
Я пытаюсь заставить minispy minifilter от Microsoft установиться и работать должным образом. Я начал новый пустой проект драйвера ядра в VS2013, скомпилировал драйвер и проверил его подпись.
Я могу использовать утилиту wdreg.exe для успешной установки драйвера, и я помещаю тест DbgPrint в начало функции DriverEntry() и могу прочитать его с помощью DbgView, так что драйвер, кажется, устанавливается нормально. Также использование wdreg.exe для установки драйвера создает именованную службу Wdf01000, и с помощью sc query Wdf01000 я могу увидеть, как она работает. Использование fltmc.exe для загрузки или просмотра экземпляров дает странные результаты.
Microsoft говорит, что для установки мне нужно щелкнуть правой кнопкой мыши по файлу .inf и нажать «Установить», и когда я это делаю, Windows сообщает мне: «Выбранный вами файл .inf не поддерживает этот метод установки». Вставлена копия моего файла .inf, сгенерированного VS2013.
Может ли кто-нибудь подсказать мне правильный способ установки драйвера minispy, запуска драйвера 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
Вам нужно создать файл .cat на основе inf, а затем подписать .cat. Есть инструмент inf2cat, который создает cat, затем просто используйте signtool, чтобы подписать его. После этого он должен установиться без проблем.
решение2
Итак, ваш драйвер запущен, отлично.Образец Minispy FSFDОднако он состоит из двух частей.
Но давайте немного вернемся назад. Этот INF не содержит раздела DefaultInstall
или DefaultInstall.Services
- необходимое условие для использования метода, который вы попробовали (щелчок правой кнопкой мыши + «Установить»).
Вы можете увидеть, какая команда выполняется, посмотрев на HKCR\inffile\shell\Install\command
( %SystemRoot%\System32\InfDefaultInstall.exe "%1"
в моем случае). Это, по сути, использует setupapi.dll
( InstallHinfSection
) для попытки установки. Того же самого можно добиться, используя rundll32.exe
в соответствиик этой статье.
Если судить по тому, откуда взялся образец (WDK), я бы, наверное, попробовал установить через dpinst.exe
тот, который находится в redist\DIFx\dpinst
папке Windows 7 SP1 WDK, например. Но поскольку вам уже удалось установить драйвер, похоже, проблема не в этом. Драйвер, очевидно, работает.
В любом случае, вам нужно понимать, что то, что вы видите отладочный вывод от, DriverEntry()
не означает, что драйвер фильтра подключен к каким-либо томам. Фактически, в документации к Minispy явно указано, что вам нужна утилита пользовательского режима (хотя ничего не говорится о службе Windows). И когда я смотрю на пример кода, я ожидаю получить mini-FSFD с именем minispy.sys
и консольное приложение с именем minispy.exe
из сборки. Последнее должно управлять первым, включая управление подключением к томам (подробности см. InterpretCommand()
внутри mspyUser.c
). Например, команда a
для присоединения, d
для отсоединения и l
для перечисления устройств (томов).
Я не знаю, почему вы использовали wdreg.exe
, но результат выглядит так, как будто он установил какой-то драйвер пользовательского режима (WDF/WUDF)?! Это драйвер режима ядра, так что вполне естественно, что он не работает.