
Estou tentando fazer com que o minifiltro minispy da Microsoft seja instalado e funcione corretamente. Iniciei um novo projeto de driver de kernel vazio no VS2013, compilei o driver e testei-o.
Posso usar o utilitário wdreg.exe para instalar o driver com sucesso e coloquei um teste DbgPrint no início da função DriverEntry() e posso lê-lo usando DbgView para que o driver pareça estar instalado ok. Também usar wdreg.exe para instalar o driver cria um serviço chamado Wdf01000 e usando sc query Wdf01000 posso visualizá-lo em execução. Usar fltmc.exe para carregar ou visualizar as instâncias fornece resultados estranhos.
A Microsoft diz que para instalá-lo eu deveria clicar com o botão direito no arquivo .inf e clicar em instalar, e quando faço isso o Windows me diz "O arquivo .inf que você selecionou não suporta este método de instalação". Colada é uma cópia do meu arquivo .inf gerado pelo VS2013.
Alguém pode me dizer a maneira correta de instalar o driver minispy, iniciar o driver minispy e anexá-lo a um sistema de arquivos em x64 Win7/Win8? Obrigado
[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"
Responder1
Você precisa criar um arquivo .cat com base no inf e depois assinar o .cat. Existe uma ferramenta chamada inf2cat que cria o gato e basta usar signtool para assiná-lo. Uma vez feito isso, ele não deverá instalar nenhum problema.
Responder2
Então você tem seu driver funcionando, ótimo. OAmostra Minispy FSFDé composto de duas partes, no entanto.
Mas vamos recuar um pouco. Theat INF não contém uma seção DefaultInstall
ou DefaultInstall.Services
- um pré-requisito para usar o método que você tentou (clique com o botão direito + "Instalar").
Você pode ver qual comando é executado observando HKCR\inffile\shell\Install\command
( %SystemRoot%\System32\InfDefaultInstall.exe "%1"
no meu caso). Isso efetivamente usa setupapi.dll
( InstallHinfSection
) para tentar a instalação. O mesmo pode ser alcançado usando rundll32.exe
de acordopara este artigo.
Adivinhando de onde vem a amostra (o WDK), provavelmente tentaria instalar através dpinst.exe
do que vem dentro da redist\DIFx\dpinst
pasta do WDK do Windows 7 SP1, por exemplo. Mas como você já conseguiu instalar o driver, esse não parece ser o problema. O motorista está evidentemente correndo.
De qualquer forma, você precisa entender que só porque você vê a saída de depuração DriverEntry()
não significa que o driver de filtro esteja anexado a algum volume. Na verdade, a documentação do Minispy afirma explicitamente que você precisa de um utilitário de modo de usuário (embora não indique nada sobre um serviço do Windows). E quando olho para o código de exemplo, espero obter o nome do mini-FSFD minispy.sys
e um aplicativo de console nomeado minispy.exe
a partir de uma compilação. Este último deve controlar o primeiro, incluindo o controle de anexação a volumes (consulte InterpretCommand()
o interior mspyUser.c
para obter detalhes). Por exemplo o comando a
para anexar, d
para desanexar e l
para listar dispositivos (volumes).
Não sei por que você usou o wdreg.exe
, mas o resultado parece que instalou algum driver de modo de usuário (WDF/WUDF)?! Porém, este é um driver de modo kernel, então é natural que não funcione.