我已經建立了我的系統進行本地內核調試,因爲我只打算寫一個帶有兩個函數的簡單驅動程序。我剛纔構建一個簡單的「Hello World」類型的驅動程序,看看我能得到我的司機運行,目前我有使用禁用驅動程序簽名驗證並啓用內核調試模式:如何運行KMDF驅動程序?
bcdedit /debug on
我也測試簽署我的司機使用Windows測試商店的證書?或任何它被稱爲在VS2015 :)
現在,我的問題是,我安裝我的驅動程序通過右鍵單擊.inf
文件後,建立,但我看到沒有輸出從我的任何調試打印在我的驅動程序(代碼如下)所以這讓我相信我的司機根本沒有跑?或者是什麼 ?
我更改了安裝驅動程序的計算機上的組件過濾器掩碼的值以進行調試。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter = 0xFFFFFFFF
所以,我不知道是什麼導致我的驅動程序不運行/輸出任何東西。
驅動程序代碼:
#include <ntddk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD KmdfHelloWorldEvtDeviceAdd;
void WinPrint(const char *message) {
KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, message));
}
NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath)
{
NTSTATUS status;
WDF_DRIVER_CONFIG config;
WinPrint("KmdfHelloWorld: DriverEntry\n");
KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "DriverEntry called!"));
KdPrintEx((DPFLTR_IHVDRIVER_ID, 0xFFFFFFFF, "DriverEntry called!"));
WinPrint("DriverEntry called!");
WDF_DRIVER_CONFIG_INIT(&config, KmdfHelloWorldEvtDeviceAdd);
status = WdfDriverCreate(DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE);
return status;
}
NTSTATUS KmdfHelloWorldEvtDeviceAdd(_In_ WDFDRIVER Driver, _Inout_ PWDFDEVICE_INIT DeviceInit)
{
NTSTATUS status;
WDFDEVICE hDevice;
UNREFERENCED_PARAMETER(Driver);
WinPrint("KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n");
WinPrint("Unloading driver!");
status = WdfDeviceCreate(&DeviceInit, WDF_NO_OBJECT_ATTRIBUTES, &hDevice);
return status;
}
我試圖創建,並從驅動器上運行的服務,我用下面的命令在提升的命令提示符,但我遇到了一些問題,我不認爲這是正確的方式來運行內核驅動程序(我不知道如何運行一個:S)。
sc create poschamonitorv2 binPath="C:\x64\debug\poschamonitorv2.sys" DisplayName= "Poscha Monitor"
sc start poschamonitorv2
但這只是導致以下錯誤
ERROR_CHILD_NOT_COMPLETE
129 (0x81)
The %1 application cannot be run in Win32 mode.
,所以我還沒有想通了這一點:/喔以下是.inf文件,它只是從VS自動生成與細微的變化我。
;
; PoschaMonitorV2.inf
;
[Version]
Signature="$WINDOWS NT$"
Class=Sample ; TODO: edit Class
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid
Provider=%ManufacturerName%
CatalogFile=PoschaMonitorV2.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]
PoschaMonitorV2.sys = 1,,
;*****************************************
; Install Section
;*****************************************
[Manufacturer]
%ManufacturerName%=Standard,NT$ARCH$
[Standard.NT$ARCH$]
%PoschaMonitorV2.DeviceDesc%=PoschaMonitorV2_Device, Root\PoschaMonitorV2 ; TODO: edit hw-id
[PoschaMonitorV2_Device.NT]
CopyFiles=Drivers_Dir
[Drivers_Dir]
PoschaMonitorV2.sys
;-------------- Service installation
[PoschaMonitorV2_Device.NT.Services]
AddService = PoschaMonitorV2,%SPSVCINST_ASSOCSERVICE%, PoschaMonitorV2_Service_Inst
; -------------- PoschaMonitorV2 driver install sections
[PoschaMonitorV2_Service_Inst]
DisplayName = %PoschaMonitorV2.SVCDESC%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_AUTO_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\PoschaMonitorV2.sys
;
;--- PoschaMonitorV2_Device Coinstaller installation ------
;
[DestinationDirs]
PoschaMonitorV2_Device_CoInstaller_CopyFiles = 11
[PoschaMonitorV2_Device.NT.CoInstallers]
AddReg=PoschaMonitorV2_Device_CoInstaller_AddReg
CopyFiles=PoschaMonitorV2_Device_CoInstaller_CopyFiles
[PoschaMonitorV2_Device_CoInstaller_AddReg]
HKR,,CoInstallers32,0x00010000, "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller"
[PoschaMonitorV2_Device_CoInstaller_CopyFiles]
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll
[SourceDisksFiles]
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=1 ; make sure the number matches with SourceDisksNames
[PoschaMonitorV2_Device.NT.Wdf]
KmdfService = PoschaMonitorV2, PoschaMonitorV2_wdfsect
[PoschaMonitorV2_wdfsect]
KmdfLibraryVersion = $KMDFVERSION$
[Strings]
SPSVCINST_ASSOCSERVICE= 0x00000002
ManufacturerName="<Your manufacturer name>" ;TODO: Replace with your manufacturer name
ClassName="Samples" ; TODO: edit ClassName
DiskName = "PoschaMonitorV2 Installation Disk"
PoschaMonitorV2.DeviceDesc = "PoschaMonitorV2 Device"
PoschaMonitorV2.SVCDESC = "PoschaMonitorV2 Service"
不是專家,但顯然你修改組分的過濾面罩右後重新啓動?可能相關:http://stackoverflow.com/q/4734335/1938163 –
是的,我在步驟中重新啓動了幾次:) – Paze
驅動配置爲自動啓動?您是否嘗試過手動啓動它,例如'sc start mydriver'?你能發佈.inf文件嗎? –