2015-09-19 86 views
2

我已经建立了我的系统进行本地内核调试,因为我只打算写一个带有两个函数的简单驱动程序。我刚才构建一个简单的“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" 
+1

不是专家,但显然你修改组分的过滤面罩右后重新启动?可能相关:http://stackoverflow.com/q/4734335/1938163 –

+0

是的,我在步骤中重新启动了几次:) – Paze

+0

驱动配置为自动启动?您是否尝试过手动启动它,例如'sc start mydriver'?你能发布.inf文件吗? –

回答

相关问题