2014-09-03 5 views
0

В предыдущие времена с NDIS 5.1 нам удалось создать один файл inf, который установил двоичный файл с 32 или 64-битным двоичным файлом в зависимости от ОС, где он был установлен.Два двоичных файла в одном файле INF для NDIS 6 LWF

Мы пытаемся сделать то же самое с файлом NDIS 6 LWF INF и не имеем представления о том, как мы могли бы дублировать раздел [Install.Services], поэтому ОС автоматически выберет, какой двоичный файл выбрать, 32 или 64-битный.

В основном это приводит нас к следующим INF разделов файла:

[Install.Services] 
; You may also want to add the SPSVCINST_STARTSERVICE flag, like this: 
;  AddService=NdisLwf,0x800,NdisLwf_Service_Inst ; SPSVCINST_STARTSERVICE 
AddService=Daihinia,,Daihinia_Service_Inst 

[Daihinia_Service_Inst] 
DisplayName  = %Daihinia_Desc% 
ServiceType  = 1 ;SERVICE_KERNEL_DRIVER 
; Typically you will want your filter driver to start with SERVICE_SYSTEM_START. 
; If it is an Optional filter, you may also use 3;SERVICE_DEMAND_START. 
StartType  = 1 ;SERVICE_SYSTEM_START 
ErrorControl = 1 ;SERVICE_ERROR_NORMAL 
ServiceBinary = %12%\daihinia6-32.sys 
LoadOrderGroup = NDIS 
Description  = %Daihinia_Desc% 
AddReg   = Common.Params.reg, NdisImPlatformBindingOptions.reg 

В [Daihinia_Service_Inst] мы имеем в 32-битном двоичном в приведенном выше примере.

Любое понимание того, как изменить их, учитывая, что раздел [Install.Services] не упоминается нигде в INF явно, поэтому мы не можем сделать вилку там?

ответ

1

Обычно мы не призываем водителей иметь другое имя, основанное на архитектуре ЦП. Все встроенные драйверы имеют одно и то же имя на x86, ia64, amd64, arm и т. Д. Таким образом, один простой способ решить проблему - просто отправить файл с именем «daihinia.sys» на всех платформах.

Но если вы действительно хотите иметь разные имена файлов, то у вас есть два варианта высокого уровня:

  1. Используйте тот же INF на все платформы, но украсить Manufacturer section с пошаговой архитектурой разделами INF; или
  2. Корабль другой INF для каждой архитектуры. Если единственным отличием является имя ServiceBinary. The stampinf tool может помочь вам избежать дублирования кода, создав каждый INF-файл, зависящий от архитектуры, из одного шаблона INX.

Примером первого варианта:

[Manufacturer] 
%Msft%=MSFT,NTx86,NTamd64 

[MSFT.NTx86] 
%NdisLwf_Desc%=Install32, MS_NdisLwf 

[MSFT.NTamd64] 
%NdisLwf_Desc%=Install64, MS_NdisLwf 

[Install32.Services] 
AddService=MyService,,Service32 

[Install64.Services] 
AddService=MyService,,Service64 

[Service32] 
ServiceBinary=%12%\MyImage32.sys 
. . . other options . . . 

[Service64] 
ServiceBinary=%12%\MyImage64.sys 
. . . other options . . . 
+0

Спасибо, Джеффри, он работал (до некоторой степени). Я скоро опубликую другой связанный с ним вопрос, потому что он прекрасно устанавливает его через лист свойств адаптера, но не устанавливает его через DIFxAPI или DPInst. – user245481