
Ich versuche, den Minispy-Minifilter von Microsoft zu installieren und ordnungsgemäß zum Laufen zu bringen. Ich habe in VS2013 ein neues leeres Kerneltreiberprojekt gestartet, den Treiber kompiliert und testweise signiert.
Ich kann das Dienstprogramm wdreg.exe verwenden, um den Treiber erfolgreich zu installieren. Ich füge am Anfang der Funktion DriverEntry() einen DbgPrint-Test ein und kann ihn mit DbgView lesen, sodass die Installation des Treibers scheinbar ordnungsgemäß verläuft. Wenn ich wdreg.exe verwende, um den Treiber zu installieren, wird außerdem ein benannter Dienst Wdf01000 erstellt und mit sc query Wdf01000 kann ich ihn in Betrieb sehen. Wenn ich fltmc.exe verwende, um die Instanzen zu laden oder anzuzeigen, führt das zu seltsamen Ergebnissen.
Microsoft sagt, dass ich zur Installation mit der rechten Maustaste auf die INF-Datei klicken und auf „Installieren“ klicken soll. Wenn ich das mache, sagt mir Windows: „Die von Ihnen ausgewählte INF-Datei unterstützt diese Installationsmethode nicht.“ Eingefügt ist eine Kopie meiner von VS2013 generierten INF-Datei.
Kann mir jemand sagen, wie ich den Minispy-Treiber richtig installiere, starte und an ein Dateisystem auf x64 Win7/Win8 anhänge? Danke
[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"
Antwort1
Sie müssen eine .cat-Datei basierend auf der INF-Datei erstellen und diese dann signieren. Es gibt ein Tool namens inf2cat, das die .cat-Datei erstellt. Verwenden Sie dann einfach signtool, um sie zu signieren. Sobald dies erledigt ist, sollte die Installation problemlos funktionieren.
Antwort2
Ihr Treiber läuft also, super. DerMinispy FSFD-Beispielbesteht jedoch aus zwei Teilen.
Aber gehen wir ein wenig zurück. Die INF enthält keinen DefaultInstall
oder DefaultInstall.Services
Abschnitt - eine Voraussetzung für die Verwendung der von Ihnen versuchten Methode (Rechtsklick + „Installieren“).
Sie können sehen, welcher Befehl ausgeführt wird, indem Sie sich HKCR\inffile\shell\Install\command
( %SystemRoot%\System32\InfDefaultInstall.exe "%1"
in meinem Fall) ansehen. Dies verwendet effektiv setupapi.dll
( InstallHinfSection
), um die Installation zu versuchen. Dasselbe kann erreicht werden, indem man rundll32.exe
entsprechendzu diesem Artikel.
Wenn ich anhand der Quelle des Beispiels (dem WDK) schätze, würde ich wahrscheinlich versuchen, es über zu installieren, dpinst.exe
das sich beispielsweise im redist\DIFx\dpinst
Ordner des Windows 7 SP1 WDK befindet. Da Sie den Treiber aber bereits installieren konnten, scheint dies nicht das Problem zu sein. Der Treiber läuft offensichtlich.
Wie dem auch sei, Sie müssen verstehen, dass nur weil Sie eine Debug-Ausgabe sehen, das DriverEntry()
nicht bedeutet, dass der Filtertreiber an irgendwelche Volumes angeschlossen ist. Tatsächlich wird in der Dokumentation für Minispy ausdrücklich darauf hingewiesen, dass Sie ein Dienstprogramm im Benutzermodus benötigen (es wird jedoch nichts über einen Windows-Dienst angegeben). Und wenn ich mir den Beispielcode ansehe, würde ich erwarten, dass ich das Mini-FSFD mit dem Namen minispy.sys
und eine Konsolenanwendung mit dem Namen minispy.exe
aus einem Build bekomme. Letztere soll Erstere steuern, einschließlich der Steuerung der Anbindung an Volumes (weitere Einzelheiten finden Sie InterpretCommand()
im Inneren mspyUser.c
). Beispielsweise der Befehl a
zum Anhängen, d
zum Abhängen und l
zum Auflisten von Geräten (Volumes).
Ich weiß nicht, warum Sie verwendet haben wdreg.exe
, aber das Ergebnis sieht aus, als ob ein Benutzermodustreiber (WDF/WUDF) installiert worden wäre?! Dies ist jedoch ein Kernelmodustreiber, daher ist es ganz natürlich, dass dies nicht funktioniert.