0

以前の NDIS 5.1 では、インストールされた OS に応じて、32 ビットまたは 64 ビットの sys ファイル バイナリをインストールする 1 つの inf ファイルを作成することができました。

現在、NDIS 6 LWF INF ファイルで同じことを試みていますが、[Install.Services] セクションを複製する方法がわからないため、OS は、32 ビットまたは 64 ビットのどちらのバイナリを取得するかを自動的に選択します。 1。

これにより、基本的に次の 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 のどこにも明示的に参照されていないため、そこでフォークを作成できないことを考えると、それらを変更する方法についての洞察はありますか?

4

1 に答える 1

1

通常、CPU アーキテクチャに基づいてドライバーに別の名前を付けることはお勧めしません。すべての組み込みドライバーは、x86、ia64、amd64、arm などで同じ名前を持っています。したがって、問題を解決する簡単な方法の 1 つは、すべてのプラットフォームで「daihinia.sys」という名前のファイルを配布することです。

しかし、本当に別のファイル名が必要な場合は、次の 2 つの高レベルのオプションがあります。

  1. すべてのプラットフォームで同じ INF を使用しますが、製造元セクションをアーキテクチャごとの INF セクションで装飾します。また
  2. アーキテクチャごとに異なる INF を出荷します。唯一の違いは ServiceBinary の名前です。 Stampinf ツールは、1 つの INX テンプレートから各アーキテクチャ固有の INF を生成することで、コードの重複を回避するのに役立ちます。

最初のオプションの例:

[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 . . .
于 2014-10-03T21:20:30.527 に答える