我正在尝试编写一个kmdf驱动程序来定位一个定制的PCIe板。 在遵循Microsoft提供的默认项目之后,我对.inf文件做了一些小改动,主要是更改string的名称和提供我们PCIe板的硬件ID。
部署驱动程序的工作原理应该如此。 该驱动程序安装并显示在设备pipe理器上,但它说,它没有正确安装或可能会损坏。
在debugging,我看到WdfDriverCreate失败,错误0xC000009A,这意味着资源不足。
作为参考,这是kmdf模板项目为您生成的代码,这是我正在运行的代码:
NTSTATUS DriverEntry( _In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath ) { WDF_DRIVER_CONFIG config; NTSTATUS status; WDF_OBJECT_ATTRIBUTES attributes; // // Initialize WPP Tracing // WPP_INIT_TRACING( DriverObject, RegistryPath ); TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DRIVER, "%!FUNC! Entry"); // // Register a cleanup callback so that we can call WPP_CLEANUP when // the framework driver object is deleted during driver unload. // WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, DEVICE_CONTEXT); attributes.EvtCleanupCallback = CIPDriverEvtDriverContextCleanup; WDF_DRIVER_CONFIG_INIT(&config, CIPDriverEvtDeviceAdd ); KdPrint(("CIP: Driver Entry\n")); status = WdfDriverCreate(DriverObject, RegistryPath, &attributes, &config, WDF_NO_HANDLE ); if (!NT_SUCCESS(status)) { TraceEvents(TRACE_LEVEL_ERROR, TRACE_DRIVER, "WdfDriverCreate failed %!STATUS!", status); KdPrint(("CIP: WdfDriverCreate failed with status - 0x%x\n", status)); WPP_CLEANUP(DriverObject); return status; } TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DRIVER, "%!FUNC! Exit"); return status; }
我的第一个问题是,这会导致什么?
我试图通过运行引发错误后转储日志
!wdfkd.wdflogdump mydriver.sys
但它从来没有工作。 我确保所有符号path都正确加载,如下所示
fffff880`05fdd000 fffff880`05fe6000 CIPDriver (private pdb symbols) C:\Users\jimmyjoebobby\Documents\Visual Studio 2013\Projects\CIPDriver\x64\Win7Debug\CIPDriver.pdb 22: kd> lm m wdf* start end module name fffff880`00e5e000 fffff880`00f20000 Wdf01000 (pdb symbols) c:\winsymbols\Wdf01000.pdb\03FC6AA4329F4372BE924775887225632\Wdf01000.pdb fffff880`00f20000 fffff880`00f30000 WDFLDR (pdb symbols) c:\winsymbols\wdfldr.pdb\9674B20D2E5B4E7AA2DE143F642A176E2\wdfldr.pdb
“CIPDriver”是我的驱动程序。
在运行dump命令时,这是输出:
22: kd> !wdfkd.wdflogdump CIPDriver.sys Trace searchpath is: Trace format prefix is: %7!u!: %!FUNC! - TMF file used for formatting log is: C:\WinDDK\7600.16385.1\tools\tracing\amd64\wdf01000.tmf Log at fffffa80356232f8 Gather log: Please wait, this may take a moment (reading 0 bytes). % read so far ... warn: The log could not be accessed hint: Are the symbols the WDF library available? hint: The log is inaccessable after driver unload.
和.sympath的输出
22: kd> .sympath Symbol search path is: C:\Users\jimmyjoebobby\Documents\Visual Studio 2013\Projects\CIPDriver\Win7Debug;C:\winsymbols Expanded Symbol search path is: c:\users\jimmyjoebobby\documents\visual studio 2013\projects\cipdriver\win7debug;c:\winsymbols
其中C:\ winsymbols是我通过以下指南获取的微软的符号caching: https ://msdn.microsoft.com/en-us/library/windows/hardware/ff558829(v=vs.85).aspx
我的第二个问题是,我如何正确设置debugging器来转储出日志?
谢谢
我不太明白为什么这有帮助,但如果我关闭KMDF验证者
[DriverName] Package -> Properties -> Configuration Properties -> Driver Install -> KMDF Verifier -> Enable KMDF Verifier
并部署驱动程序,它的工作原理。 如果我打开它,它会失败。 我部署了几次驱动程序来打开和关闭该选项,打开时总是失败。
我发布了这个问题以及我的发现。 也许有人可以回答为什么这样的情况: https : //www.osronline.com/showthread.cfm?link=277793