x64 minispy ミニフィルター ドライバーの適切なインストール

x64 minispy ミニフィルター ドライバーの適切なインストール

Microsoft の minispy ミニフィルターをインストールして正常に機能させようとしています。VS2013 で新しい空のカーネル ドライバー プロジェクトを開始し、ドライバーをコンパイルしてテスト署名しました。

wdreg.exe ユーティリティを使用してドライバーを正常にインストールできます。また、DriverEntry() 関数の先頭に DbgPrint テストを配置し、DbgView を使用して読み取ることができるため、ドライバーは正常にインストールされているように見えます。また、wdreg.exe を使用してドライバーをインストールすると、Wdf01000 という名前のサービスが作成され、sc query Wdf01000 を使用して実行中であることがわかります。fltmc.exe を使用してインスタンスをロードまたは表示すると、奇妙な結果になります。

Microsoft によると、インストールするには .inf ファイルを右クリックしてインストールをクリックする必要があるとのことですが、これを実行すると、Windows から「選択した .inf ファイルはこのインストール方法をサポートしていません」というメッセージが表示されます。貼り付けられているのは、VS2013 によって生成された .inf ファイルのコピーです。

minispy ドライバーをインストールし、起動して x64 Win7/Win8 のファイルシステムに接続する正しい方法を教えていただけますか? よろしくお願いします

[Version]
Signature="$WINDOWS NT$"
Class=Sample ; TODO: edit Class
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid
Provider=%ManufacturerName%
CatalogFile=MiniSpyDev.cat  
DriverVer= ; TODO: set DriverVer in stampinf property pages

[DestinationDirs]
DefaultDestDir = 12

; ================= Class section =====================

[ClassInstall32]
Addreg=SampleClassReg

[SampleClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-5

[SourceDisksNames]
1 = %DiskName%,,,""

[SourceDisksFiles]
MiniSpyDev.sys  = 1,,

;*****************************************
; Install Section
;*****************************************

[Manufacturer]
%ManufacturerName%=Standard,NT$ARCH$

[Standard.NT$ARCH$]
%MiniSpyDev.DeviceDesc%=MiniSpyDev_Device, Root\MiniSpyDev ; TODO: edit hw-id

[MiniSpyDev_Device.NT]
CopyFiles=Drivers_Dir

[Drivers_Dir]
MiniSpyDev.sys

;-------------- Service installation
[MiniSpyDev_Device.NT.Services]
AddService = MiniSpyDev,%SPSVCINST_ASSOCSERVICE%, MiniSpyDev_Service_Inst

; -------------- MiniSpyDev driver install sections
[MiniSpyDev_Service_Inst]
DisplayName    = %MiniSpyDev.SVCDESC%
ServiceType    = 2               ; SERVICE_KERNEL_DRIVER
StartType      = 0               ; 
ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
ServiceBinary  = %12%\MiniSpyDev.sys
LoadOrderGroup = Extended Base

;
;--- MiniSpyDev_Device Coinstaller installation ------
;

[DestinationDirs]
MiniSpyDev_Device_CoInstaller_CopyFiles = 11

[MiniSpyDev_Device.NT.CoInstallers]
AddReg=MiniSpyDev_Device_CoInstaller_AddReg 
CopyFiles=MiniSpyDev_Device_CoInstaller_CopyFiles

[MiniSpyDev_Device_CoInstaller_AddReg]
HKR,,CoInstallers32,0x00010000,     "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller"

[MiniSpyDev_Device_CoInstaller_CopyFiles]
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll

[SourceDisksFiles]
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=1 ; make sure the number matches with               SourceDisksNames

[MiniSpyDev_Device.NT.Wdf]
KmdfService =  MiniSpyDev, MiniSpyDev_wdfsect
[MiniSpyDev_wdfsect]
KmdfLibraryVersion = $KMDFVERSION$

[Strings]
SPSVCINST_ASSOCSERVICE= 0x00000002
ManufacturerName="" ; TODO: add ManufacturerName
ClassName="Samples" ; TODO: edit ClassName
DiskName = "MiniSpyDev Installation Disk"
MiniSpyDev.DeviceDesc = "MiniSpyDev Device"
MiniSpyDev.SVCDESC = "MiniSpyDev Service"

答え1

inf に基づいて .cat ファイルを作成し、.cat に署名する必要があります。cat を作成する inf2cat というツールがあり、signtool を使用して署名するだけです。完了したら、問題なくインストールできるはずです。

答え2

ドライバーが動作しているのですね。Minispy FSFD サンプルただし、2つの部分で構成されています。

しかし、少し戻ってみましょう。この INF には、DefaultInstallまたはDefaultInstall.Servicesセクションが含まれていません。これは、試行した方法 (右クリック + 「インストール」) を使用するための前提条件です。

HKCR\inffile\shell\Install\command%SystemRoot%\System32\InfDefaultInstall.exe "%1"私の場合)を見れば、どのコマンドが実行されるかがわかります。これは、インストールを試行するためにsetupapi.dll( )を効果的に使用します。同じことは、次のようにInstallHinfSectionして実現できます。rundll32.exeこの記事に

サンプルの入手元 (WDK) から推測すると、たとえば Windows 7 SP1 WDK のフォルダーdpinst.exe内にあるものを介してインストールを試みると思いますredist\DIFx\dpinst。ただし、すでにドライバーをインストールできているので、これは問題ではないようです。ドライバーは明らかに実行されています。

いずれにせよ、デバッグ出力が表示されたからといって、DriverEntry()フィルター ドライバーがボリュームに接続されているとは限らないことを理解する必要があります。実際、Minispy のドキュメントには、ユーザー モード ユーティリティが必要であることが明示的に記載されています (ただし、Windows サービスについては何も記載されていません)。また、サンプル コードを見ると、ビルドから mini-FSFD の名前minispy.sysとコンソール アプリケーションの名前が取得されるはずminispy.exeです。後者は、ボリュームへの接続の制御を含め、前者を制御することになっています (詳細についてはInterpretCommand()内部を参照してください)。たとえば、アタッチ、デタッチ、デバイス (ボリューム) の一覧表示のmspyUser.cコマンドなどです。adl


なぜ を使用したのかわかりませんwdreg.exeが、結果は、何らかのユーザー モード ドライバー (WDF/WUDF) がインストールされたように見えます。ただし、これはカーネル モード ドライバーなので、これが機能しないのは当然です。

関連情報