Instalación correcta del controlador de minifiltro x64 minispy

Instalación correcta del controlador de minifiltro x64 minispy

Estoy intentando que el minifiltro minispy de Microsoft se instale y funcione correctamente. Comencé un nuevo proyecto de controlador de kernel vacío en VS2013, compilé el controlador y lo probé.

Puedo usar la utilidad wdreg.exe para instalar exitosamente el controlador, y realizo una prueba DbgPrint al comienzo de la función DriverEntry() y puedo leerla usando DbgView para que el controlador parezca instalarse correctamente. Además, al usar wdreg.exe para instalar el controlador se crea un servicio con nombre Wdf01000 y al usar la consulta sc Wdf01000 puedo verlo en ejecución. El uso de fltmc.exe para cargar o ver las instancias produce resultados extraños.

Microsoft dice que para instalarlo debo hacer clic derecho en el archivo .inf y hacer clic en instalar, y cuando hago esto, Windows me dice "El archivo .inf que ha seleccionado no admite este método de instalación". Pegado es una copia de mi archivo .inf generado por VS2013.

¿Alguien puede decirme la forma correcta de instalar el controlador minispy, iniciarlo y adjuntarlo a un sistema de archivos en x64 Win7/Win8? Gracias

[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"

Respuesta1

Debe crear un archivo .cat basado en inf y luego firmar el .cat. Hay una herramienta llamada inf2cat que crea el gato y luego simplemente usa signtool para firmarlo. Una vez hecho esto, no debería instalarse ningún problema.

Respuesta2

Entonces tienes tu controlador funcionando, genial. ElMuestra de FSFD de MinispySin embargo, se compone de dos partes.

Pero retrocedamos un poco. El INF no contiene una sección DefaultInstallo DefaultInstall.Services, un requisito previo para utilizar el método que intentó (haga clic derecho + "Instalar").

Puedes ver qué comando se ejecuta mirando HKCR\inffile\shell\Install\command( %SystemRoot%\System32\InfDefaultInstall.exe "%1"en mi caso). Esto, efectivamente utiliza setupapi.dll( InstallHinfSection) para intentar la instalación. Lo mismo se puede lograr utilizando rundll32.exesegúna este artículo.

Adivinando de dónde viene la muestra (el WDK), probablemente intentaría instalarla a través de dpinst.exela que viene dentro de la redist\DIFx\dpinstcarpeta del WDK de Windows 7 SP1, por ejemplo. Pero como ya lograste instalar el controlador, este no parece ser el problema. Es evidente que el conductor está huyendo.

De todos modos, debe comprender que el hecho de que vea resultados de depuración DriverEntry()no significa que el controlador de filtro esté conectado a ningún volumen. De hecho, la documentación de Minispy establece explícitamente que necesita una utilidad de modo de usuario (aunque no dice nada sobre un servicio de Windows). Y cuando miro el código de muestra, esperaría obtener un nombre para el mini-FSFD minispy.sysy una aplicación de consola minispy.exea partir de una compilación. Se supone que este último controla al primero, incluido el control de la unión a volúmenes (consulte InterpretCommand()al interior mspyUser.cpara obtener más detalles). Por ejemplo, el comando apara adjuntar, ddesconectar y lenumerar dispositivos (volúmenes).


No sé por qué usaste wdreg.exe, pero ¿el resultado parece como si instalara algún controlador en modo de usuario (WDF/WUDF)? Sin embargo, este es un controlador en modo kernel, por lo que es natural que no funcione.

información relacionada