Как отредактировать inf файл драйвера

Обновлено: 08.07.2024

используйте DISM с драйверами в формате INF для добавления, удаления или перечисления драйверов в сетевом или автономном образе Windows (wim). Microsoft установщик Windows или другие типы пакетов драйверов (например, файлы .exe) не поддерживаются.

Можно указать каталог, в котором находятся INF-файлы драйверов, или выбрать драйвер, указав имя INF-файла.

базовый синтаксис для обслуживания образа Windows с помощью DISM:

Для автономного образа доступны следующие параметры обслуживания драйвера.

Для работающей операционной системы доступны следующие параметры обслуживания драйвера.

/Жет-Хелп/?

При использовании сразу после параметра командной строки обслуживания драйвера отображаются сведения о параметре и аргументах. Дополнительные разделы могут стать доступными при указании изображения.

Примеры:

/Get-Drivers

Отображает основные сведения о пакетах драйверов в сетевом или автономном образе.

По умолчанию отображаются только драйверы сторонних производителей. Используйте /all аргумент для вывода сведений о драйверах по умолчанию и сторонних драйверах. Используйте /Format:Table аргумент или /Format:List для вывода выходных данных в виде таблицы или списка.

При наведении указателя мыши на образ можно определить, какие драйверы находятся в образе, а также состояние драйверов (установленных или промежуточных).

Примеры:

/жет-дриверинфо

Отображает подробные сведения о конкретном пакете драйверов.

Синтаксис

Можно указать INF-файл, установленный на образе, или еще не установленный. Можно указать имя удаляемого драйвера или стороннего драйвера в хранилище драйверов устройств. Драйверы сторонних производителей, установленные в хранилище драйверов, будут называться Oem0.inf , Oem1.inf и т. д. Это называется опубликованным именем.

Можно указать несколько драйверов в командной строке с помощью /driver параметра несколько раз.

Пример. Используйте /Get-Drivers параметр, чтобы можно было указать INF-файл драйвера. Далее выполните:

/Add-Driver

добавляет пакеты драйверов сторонних производителей в автономный образ Windows.

Синтаксис

/Remove-Driver

Удаляет драйверы сторонних производителей из автономного образа.

Можно указать несколько драйверов в командной строке с помощью /Driver параметра несколько раз.

Синтаксис

Когда к образу добавляются сторонние драйверы, они переименовываются на опубликованное имя, например Oem0.inf , Oem1.inf и т. д. Необходимо указать опубликованное имя, чтобы удалить драйвер. Невозможно удалить драйверы по умолчанию.

удаление пакета драйверов, критического для загрузки, может привести к невозможности загрузки автономного Windows образа.

Примеры:

/експорт-дривер

экспортирует все сторонние пакеты драйверов из образа Windows в целевой путь. Экспортированные драйверы затем можно внедрить в автономный образ, выполнив DISM Add-Driver команду.

Синтаксис

  • Destination , где будет сохранен экспортированный драйвер.

Примеры:

Ограничения

Команда обслуживания драйвера поддерживает только INF-файлы. Windows Установщик или другие типы пакетов драйверов (например, файлы .exe) не поддерживаются.

Драйверы устанавливаются в том порядке, в котором они перечислены в командной строке. В следующем примере 1. INF, 2. INF и 3. INF будут установлены в том порядке, в котором они перечислены в командной строке.

Есть написанный wdf драйвер, замечательно работающий под Windows 7 x32.
Переткнули железку в более новый компьютер с семёркой x64.
Я перекомпелировал драйвер для этой среды, но при установке ОС х64 сказала, что не нашла подходящих драйверов.
понял, что надо ещё и inf файл переписать.
Вот такой старый:

переделал вот так:

реакция системы осталась прежней.
подскажите пожалуйста, что сделал не так, или что не дописал.
Спасибо.

p.s.
не принципиально, будет ли один .inf на два файла драйверов или для каждого драйвера будет свой inf.

Здравствуйте, smithana, Вы писали:

S>Есть написанный wdf драйвер, замечательно работающий под Windows 7 x32.
S>Переткнули железку в более новый компьютер с семёркой x64.
цифровая подпись нужна Re[2]: как переписать .inf файл драйвера под Windows 7 x64

Здравствуйте, redp, Вы писали:

R>цифровая подпись нужна

при загрузке в режиме с отключённой проверкой подписей она не нужна.
нашлась ошибка в тексте:
[AD200Dev.NTamd86]
и справил на
[AD200Dev.NTamd64]
но ничего не поменялось.

Re[3]: как переписать .inf файл драйвера под Windows 7 x64 Здравствуйте, smithana, Вы писали:

S>Здравствуйте, redp, Вы писали:

R>>цифровая подпись нужна

S>при загрузке в режиме с отключённой проверкой подписей она не нужна.
А может все-же тестовая подпись (тестовым сертификатом) нужна. Проверь. Re[3]: как переписать .inf файл драйвера под Windows 7 x64 Здравствуйте, smithana, Вы писали:

S>нашлась ошибка в тексте:
S>[AD200Dev.NTamd86]
S>и справил на
S>[AD200Dev.NTamd64]
S>но ничего не поменялось.
в [Manufacturer] тоже надо Re[4]: как переписать .inf файл драйвера под Windows 7 x64

Здравствуйте, Psybot, Вы писали:

P>Здравствуйте, smithana, Вы писали:

S>>нашлась ошибка в тексте:
S>>[AD200Dev.NTamd86]
S>>и справил на
S>>[AD200Dev.NTamd64]
S>>но ничего не поменялось.
P>в [Manufacturer] тоже надо
пардон, не заметил готовый inf )

1. вместо [ClassInstall64] надо [ClassInstall32.ntamd64]
2. вместо [Models.NTx64] — [Models.amd64]
3. если мне не изменяет склероз, то для SERVICE_BOOT_START даже при отключенной
проверке цифровая подпись внедренная в .sys обязательна

Re[5]: как переписать .inf файл драйвера под Windows 7 x64

Здравствуйте, Psybot, Вы писали:

P>1. вместо [ClassInstall64] надо [ClassInstall32.ntamd64]
P>2. вместо [Models.NTx64] — [Models.amd64]
P>3. если мне не изменяет склероз, то для SERVICE_BOOT_START даже при отключенной
P>проверке цифровая подпись внедренная в .sys обязательна

Спасибо тебе, добрый человек.
система точно также как и в х86 сказала, что не нашла цифровой подписи, и предложила выбор, либо всё равно ставить, либо нет.
Драйвер поставился, но тут же вылетела ошибка, что в данной ОС цифр. подп. обязательна, и удалила драйвер.
А загрузившись в режиме без проверки цифр. подписи, драйвер замечательно встал и заработал.

Подскажите тогда ещё по легализации.
Дорого ли стоит подпись и к кому обращаться, т.к. на наших сайтах обсуждают только как обойти подпись, а на заграничных ничего не нашёл.
только упоминание, что пару лет назад подпись стоитла от 150 до 400 баксов на год.
Подпись даётся только на один драйвер или на компанию и я ей могу сколько угодна драйверов подписывать?

Добрый день.
Недавно в руки попал ноутбук SONY PCG-61412M (VPCCW1S1E/L) с Windows 7 Home Premium х64. Решил поставить на него новый драйвер для видеокарты NVIDIA GeForce GT M330, так как стоял еще старый от производителя за 28/10/2010.

Скачал последний официальный драйвер, но при установке он мне выдал, что поддерживаемых устройств в системе не найдено. Решил проверить через сайт c помощью автоматического определения устройства в системе, в результате получил приглашение перейти на сайт производителя ноутбука.

Анализ

Прочитав несколько статей кто и как решал эту проблему, наткнулся на утилиту nVidia Mobility Modder Tool. Если её натравить на оригинальный драйвер, то она изменит определенные файлы и добавит устройства от производителей ноутбуков. В моем случае она не помогла бы, так как в списке добавляемых видеокарт моей не было.

Далее наткнулся на сайт, который предоставляет уже измененные свежие драйвера NVIDIA для видеокарт производителей ноутбуков. Достаточно указать идентификатор устройства ( DEV ) и идентификатор поставщика подсистемы ( SUBSYS ) и, возможно, появится список подходящих драйверов. Идентификаторы Вашей видеокарты можно посмотреть в Диспетчере устройств (нажать + R, написать devmgmt.msc и нажать ОК).


[На изображении DEV = 1243 и SUBSYS = 85081043 ]

Затем открыть Cвойства [Properties] видеоадаптера и на вкладке Сведения [Details] посмотреть Код экземпляра устройства [Hardware Ids] ). Мне этот сайт не помог.

Редактирование

На этом мои поиски закончились и я решил просмотреть, какие устройства и их идентификаторы указаны в оригинальном драйвере от Nvidia. Скачал и распаковал последний драйвер версии 310.90. После распаковки драйвера перешел в каталог Display.Driver . Там меня интересует файл, в котором должна содержаться запись [NVIDIA_SetA_Devices.NTamd64.6.1] – для ОС Windows 7, определяющая для какой операционной системы, и запись названия устройства "NVIDIA GeForce GT 330M" . В моём случае это был файл nvtd.inf .
В этом файле есть еще разделы [NVIDIA_SetA_Devices.NTamd64.6.0] – для Windows Vista, [NVIDIA_SetA_Devices.NTamd64.6.2] – для Windows 8.

В конце файла есть раздел [Strings] , в этом разделе ищу название своей видеокарты. Я нашел несколько записей:

NVIDIA_DEV.0A29.FD22.1179 = "NVIDIA GeForce GT 330M"
NVIDIA_DEV.0A29.FD30.1179 = "NVIDIA GeForce GT 330M "

В этих записях можно обнаружить идентификаторы DEV и SUBSYS . Пример, 0A29 – это идентификатор устройства, а FD22.1179 – идентификатор поставщика подсистемы (здесь он разделен точкой, в Диспетчере устройств нет). Я выбрал самую первую запись NVIDIA_DEV.0A29.FD22.1179 = "NVIDIA GeForce GT 330M" .

Для моей видеокарты запись должна выглядеть так

NVIDIA_DEV.1243.8508.1043 = "NVIDIA GeForce GT 330M"

Теперь перехожу в раздел [NVIDIA_SetA_Devices.NTamd64.6.1] и запись %NVIDIA_DEV.0A29.FD22.1179% = Section002, PCI\VEN_10DE&DEV_0A29&SUBSYS_FD221179 меняю на свою

%NVIDIA_DEV.1243.8508.1043% = Section002, PCI\VEN_10DE&DEV_1243&SUBSYS_85081043

Можно изменить существующие записи, а можно и добавить новые. После изменений сохранил файл и установил драйвер.

Цикл подошел к концу. В этой статье я расскажу об еще нескольких способах инсталляции драйверов
(в прошлый раз мы рассмотрели инсталляцию с помощью простого изменения
реесстра (вручную или с использованием .reg - файла) и с использованием программы Monitor из состава Driver Studio) - с помощью inf - файла и с использованием возможностей SCM - менеджера. А последний пункт вплотную подводит нас к написанию собственной консольной проги для тестирования возможностей нашего драйвера.

Ну а в качестве маленького бонуса я расскажу, как обещала, о правке солюшенов для визуальной студии, для того, чтобы ты смог писать в ней драйвера
(а правка нужна для корректной подсветки синтаксиса кода и компиляции). Приступим.

Инсталляция драйвера (продолжение)

В данной статье мы рассмотрим еще два способа инсталляции драйвера: с помощью inf - файла и с использованием возможностей SCM - менеджера. Начнем с первого.

Для того, чтобы мы могли корректно установить наш драйвер с использованием виндошного Мастера Установка, нам необходимо создать inf - файл с правильной структурой. Пример оного вместе с комментариями читай ниже:

; Primer.Inf
[Version]
Signature="$Hacker$"
Class=Unknown
Provider=%HackerMagazine%
DriverVer=27/10/2005,0.0.0.1

[Hacker.Magazine]
%Primer%=Primer.Install, *hackermagazine\Primer

[DestinationDirs]
Primer.Files.Driver=10,System32\Drivers ; путь для копирования драйвера под Windows 98
Primer.Files.Driver.NTx86=10,System32\Drivers ; путь для копирования драйвера под Windows NT

[SourceDisksNames]
1="Primer build directory".

[SourceDisksFiles]
Primer.sys=1,drv\w98 ; путь, где находится версия драйвера под Windows 98

[SourceDisksFiles.x86]
Primer.sys=1,drv\nt ; путь, где находится версия драйвера под Windows NT
; в нашем случае обе версии драйверов, конечно, одинаковые

; Windows 98
; секция, используемая в случае установки драйвера под Windows 98
[Primer.Install]
CopyFiles=Primer.Files.Driver
AddReg=Primer.AddReg

[Primer.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,Primer.sys
[Primer.Files.Driver]
Primer.sys

; Windows 2000, XP, Server 2003
; секция, используемая в случае установки драйвера под Windows NT
[Primer.Install.NTx86]
CopyFiles=Primer.Files.Driver.NTx86

[Primer.Files.Driver.NTx86]
Primer.sys. %COPYFLG_NOSKIP%

[Primer.Install.NTx86.Services]
AddService = Primer, %SPSVCINST_ASSOCSERVICE%, Primer.Service

[Primer.Service]
DisplayName = %Primer.ServiceName%
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_AUTO_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
ServiceBinary = %10%\System32\Drivers\Primer.sys

; Строки
[Strings]
HackerMagazine="Napisanie draiverov v podrobnostjah №4"
Primer="Primer driver: checked build"
Primer.ServiceName="Primer NTDDK driver (V.001)"

SPSVCINST_ASSOCSERVICE=0x00000002
COPYFLG_NOSKIP=2
SERVICE_KERNEL_DRIVER=1
SERVICE_AUTO_START=2
SERVICE_DEMAND_START=3
SERVICE_ERROR_NORMAL=1

Сохраняй этот файлик с расширением inf. Ну а теперь можешь запускать Мастер Установки, в нем указывай способ выбора устройства вручную
(без автоматического поиска и определения), путь к каталогу с inf - файлом. Ну, думаю, тебя не нужно учить общению с Мастером 🙂 После завершения установки, если все пройдет нормально, то драйвер успешно встанет в систему и ты сможешь лицезреть его в списке устройств. Все, теперь его можно тестировать.

Перейдем к SCM - менеджеру. SCM - менеджер - это сервис Windows NT, предоставляющий удобную возможность работать с драйвером без использования Мастера Установки - с помощью функций, вызываемых из пользовательского приложения. Для того, чтобы начать работать с SCM - мененджером, необходимо вызвать функцию OpenSCManager, а для завершения работы - CloseServiceHandle. Но, к сожалению, работать с помощью SCM - менеджера можно не со всеми типами драйверов.

Ну а теперь мы приступим к написанию своего консольного приложения, тестирующего драйвер и использующего SCM - менеджер.

Написание консольного приложения для тестирования драйвера

Во-первых, нужно создать файл Ioctl.h. Его содержимое
(которое, надо думать, тебе знакомо по файлу Driver.h :)):

Вот содержимое файла resource.h:

. и файла ресурсов .rc:

1 TEXTINCLUDE MOVEABLE PURE
BEGIN
"resource.h\0"
END

3 TEXTINCLUDE MOVEABLE PURE
BEGIN
"\r\n"
"\0"
END

Ну а теперь головной .cpp - шник программы с комментариями:

// Начинаем знакомиться с SCM - менеджером. Далее - функция установки драйвера на основе его вызовов.
BOOL InstallDriver(SC_HANDLE scm, LPCTSTR DriverName, LPCTSTR driverExec)
SC_HANDLE Service =
CreateService (scm, // открытый дескриптор к SCManager
DriverName, // имя сервиса - Primer
DriverName, // для вывода на экран
SERVICE_ALL_ACCESS, // желаемый доступ
SERVICE_KERNEL_DRIVER, // тип сервиса
SERVICE_DEMAND_START, // тип запуска
SERVICE_ERROR_NORMAL, // указывает, как обрабатывается ошибка
driverExec, // путь к бинарному файлу
// Остальные параметры не используются – укажем NULL
NULL, // Не определяем группу загрузки
NULL, NULL, NULL, NULL);
if (Service == NULL) // неудача
DWORD err = GetLastError();
if (err == ERROR_SERVICE_EXISTS) */>
// более серьезная ошибка:
else printf ("ERR: Can’t create service. Err=%d\n",err);
return FALSE;
>
CloseServiceHandle (Service);
return TRUE;
>

// Функция удаления драйвера на основе SCM вызовов
BOOL RemoveDriver(SC_HANDLE scm, LPCTSTR DriverName)
SC_HANDLE Service =
OpenService (scm, DriverName, SERVICE_ALL_ACCESS);
if (Service == NULL) return FALSE;
BOOL ret = DeleteService (Service);
if (!ret) < /* неудача при удалении драйвера
*/ >

CloseServiceHandle (Service);
return ret;
>

// Функция запуска драйвера на основе SCM вызовов
BOOL StartDriver(SC_HANDLE scm, LPCTSTR DriverName)
SC_HANDLE Service =
OpenService(scm, DriverName, SERVICE_ALL_ACCESS);
if (Service == NULL) return FALSE; /* open failed */
BOOL ret =
StartService(Service, // дескриптор
0, // число аргументов
NULL); // указатель на аргументы
if (!ret) // неудача
<
DWORD err = GetLastError();
if (err == ERROR_SERVICE_ALREADY_RUNNING)
ret = TRUE; // драйвер уже работает
else < /* другие проблемы */>
>

CloseServiceHandle (Service);
return ret;
>
// Функция остановки драйвера на основе SCM вызовов
BOOL StopDriver(SC_HANDLE scm, LPCTSTR DriverName)
SC_HANDLE Service =
OpenService (scm, DriverName, SERVICE_ALL_ACCESS);
if (Service == NULL) // невозможно выполнить остановку драйвера
DWORD err = GetLastError();
return FALSE;
>
SERVICE_STATUS serviceStatus;
BOOL ret =
ControlService(Service, SERVICE_CONTROL_STOP, &serviceStatus);
if (!ret)
DWORD err = GetLastError();

CloseServiceHandle (Service);
return ret;
>

// Соберем вместе действия по установке, запуску, останову
// и удалению драйвера (для учебных целей).
// Пользоваться этой функцией в данном примере нам не придется,
// поэтому закомментируем ее.
/*
void Test_SCM_Installation(void)
SC_HANDLE scm = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(scm == NULL) // неудача
<
// получаем код ошибки и ее текстовый эквивалент
unsigned long err = GetLastError();
PrintErrorMessage(err);
return;
>
BOOL res;
res = InstallDriver(scm, DRIVERNAME, DRIVERBINARY);
// ошибка может быть не фатальной. Продолжаем:
res = StartDriver (scm, DRIVERNAME);
if(res)
// Здесь следует разместить функции работы с драйвером
res = StopDriver (scm, DRIVERNAME);
if(res) res = RemoveDriver (scm, DRIVERNAME);
>
CloseServiceHandle(scm);
return;
>
*/

// Основная функция тестирующего приложения.
// Здесь диагностике ошибочных ситуаций уделено очень мало внимания.
// В реальных приложениях так делать
// нельзя!

// делаем попытку установки драйвера
res = InstallDriver(scm, DRIVERNAME, DRIVERBINARY);
if(!res) // неудача, но, быть может, драйвер уже установлен ?
printf("Cannot install service");

HANDLE hHandle = // Получаем доступ к драйверу
CreateFile("\\\\.\\Primer",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hHandle==INVALID_HANDLE_VALUE)
printf("ERR: can not access driver Primer.sys !\n");
return (-1);
>
DWORD BytesReturned; // Переменная для хранения числа
// переданных байт
// Приступаем к тестированию драйвера. Последовательно выполняем обращения к драйверу
// с различными кодами IOCTL:

unsigned long ioctlCode=IOCTL_PRINT_DEBUG_MESS;
if(!DeviceIoControl(hHandle,
ioctlCode,
NULL, 0,
NULL, 0,
&BytesReturned,
NULL))
printf("Error in IOCTL_PRINT_DEBUG_MESS!");
return(-1);
>

ioctlCode=IOCTL_CHANGE_IRQL;
if(!DeviceIoControl(hHandle,
ioctlCode,
NULL, 0,
NULL, 0,
&BytesReturned,
NULL))
printf("Error in IOCTL_CHANGE_IRQL!");
return(-1);
>

ioctlCode=IOCTL_TOUCH_PORT_378H;
if(!DeviceIoControl(hHandle,
ioctlCode,
NULL, 0,
NULL, 0,
&BytesReturned,
NULL))
printf("Error in IOCTL_TOUCH_PORT_378H!");
return(-1);
>

// Продолжаем тестирование. Получаем 1 байт данных из драйвера.
// По окончании данного вызова переменная xdata должна
// содержать значение 33:
unsigned char xdata = 0x88;
ioctlCode=IOCTL_SEND_BYTE_TO_USER;
if(!DeviceIoControl(hHandle,
ioctlCode,
NULL, 0,
&xdata, sizeof(xdata),
&BytesReturned,
NULL))
printf("Error in IOCTL_SEND_BYTE_TO_USER!");
return(-1);
>

// Выводим мессагу в дебаговую консоль:
printf("IOCTL_SEND_BYTE_TO_USER: BytesReturned=%d xdata=%d",
BytesReturned, xdata);

// Выполнение следующего теста в Windows NT приведет к
// краху ОС`и
/*
ioctlCode=IOCTL_MAKE_SYSTEM_CRASH;
if(!DeviceIoControl(hHandle,
ioctlCode,
NULL, 0,
NULL, 0,
&BytesReturned,
NULL))
printf("Error in IOCTL_MAKE_SYSTEM_CRASH!");
return(-1);
>
*/
// Закрываем дескриптор доступа к драйверу:
CloseHandle(hHandle);

res = RemoveDriver (scm, DRIVERNAME);
if(!res)
printf("Cannot remove driver!");
CloseServiceHandle(scm);
return -1;
>

Правка солюшенов визуальной студии

<?xml version = "1.0" encoding = "windows-1251" ?>
<VisualStudioProject ProjectType = "Visual C++"
Version = "7.00"
Name = "Primer"
SccProjectName = " "
SccLocalPath = " " >
<Platforms><Platform Name = "Win32" />
</Platforms>
<Configurations> <Configuration Name = "Checked | Win32 "
OutputDirectory = ".\checked"
IntermeaditeDirectory = ".\checked"
ConfigurationType = "2"
UseOfMFC = "0"
ATLMinimizesCRunTimeLibraryUsage = "FALSE"
CharacterSet = "1" >
<Tool Name = "VCCLCompilerTool"
AdditionalOptions = "/Zel - cbstring /QIfdiv- /QIf /Gi- /Gm- /GX"
Optimization = "0"
EnableIntrinsicFunctions = "FALSE"
OmitFramePointers = "TRUE"
OptimizeForProcessor = "2"
AdditionalIncludeDirectories
PreprocessorDefinitions
IgnoreStandartIncludePath="TRUE"
StringPooling = "TRUE"
ExceptionHandling = "TRUE"
RuntimeLibrary="0"
StructMemberAlignment="4"
BufferSecurityCheck = "FALSE"
EnableFunctionLevelLinking = "TRUE"
PrecompiledHeaderFile = ".\checked/Primer.pch"
AssemblerListingLocation = ".\checked/"
ObjectFile=".\checked/"
ProgramDataBaseFileName= ".\checked\Primer.pdb"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="1"
CallingConvention="2"
CompileAs = "0"
ForcedIncludeFiles= "warning.h"/>
<Tool Name = "VCCustomerBuildTool"/>
<Tool Name = "VCLinkerTool" AdditionalOptions = " "
AdditionalDependencies
OutputFile = ".\checked\Primer.sys"
Version = "5.0"
LinkIncremental TRUE"
AdditionalLibraryDirectories = "C:\WinDDK\2600\lib\w2k\i386"
IgnoreAllDefaultsLibraries = "TRUE"
ProgramDatabaseFile = ".\checked/Primer.pdb"
GenerateMapFile = "TRUE"
MapFileName = "Primer.map"
StackReserveSize = "262144"
StackCommitSize = "4096"
OptimizeReferences = "2"
EnableCOMDATFolding = "2"
EntryPointSymbol = "DriverEntry"
SetChecksum = "TRUE"
BaseAddress = "0x10000"
ImportLibrary = " "
MergeSections = ".rdata = .text"
TargetMachine = "1" />

<Tool Name = "VCMIDILTool"
MkTypeLibCompatible = "TRUE"
SuppressStartupBanner = "TRUE"
TargetEnvironment = "1"
TypeLibraryName = ".\checked/Primer.tlb"/>
<Tool Name = "VCPostBuildEventTool" />

<Tool Name = "VCPreBuildEventTool"/>
<Tool Name = "VCPreLinkEventTool" />

<Tool Name = "VCResourceCompilerTool"/>
<Tool Name = "VCWebServiceProxyGeneratorTool" />

<Tool Name = "VCWebDeploymentTool" />

</Configuration>
</Configurations>
<Files> <Filter Name = "Header Files" Filter = ".h">
<File RelativePath = ".\Driver.h"> </File>
</Filter>
<Filter Name = "Source Files" Filter = ".c;.cpp">
<File RelativePath = ".\main.cpp"> </File>
</Filter>
</Files>
<Globals></Globals>
</VisualStudioProject>

Комментарии тут излишни - все параметры понятны без слов. Это, конечно, примерная структура, в твоем проекте многое может отличаться. Но для нашего тестового драйвера такие два файла вполне подойдут.

Ну вот и все. Желаю удачи и интересных находок в плавании по увлекательному океану драйверов и железа! Да не облысеют твои пятки!

Читайте также: