KMDF WdfDriverCreate 函数 returns "insufficient resources"
KMDF WdfDriverCreate function returns "insufficient resources"
我正在尝试编写一个 kmdf driver 来针对自定义 PCIe 板。按照微软提供的默认项目,我对.inf文件做了一些小改动,主要是改变了字符串的名称,并提供了我们PCIe板卡的硬件ID。
部署 driver 正常工作。 driver 安装并显示在设备管理器上,但它说它没有正确安装或可能已损坏。
在调试时,我看到 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
但它永远行不通。我确保所有符号路径都正确加载,如下所示
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.pdbFC6AA4329F4372BE924775887225632\Wdf01000.pdb
fffff880`00f20000 fffff880`00f30000 WDFLDR (pdb symbols) c:\winsymbols\wdfldr.pdb74B20D2E5B4E7AA2DE143F642A176E2\wdfldr.pdb
其中 "CIPDriver" 是我的 driver。
在 运行 转储命令上,这是输出:
22: kd> !wdfkd.wdflogdump CIPDriver.sys
Trace searchpath is:
Trace format prefix is: %7!u!: %!FUNC! -
TMF file used for formatting log is: C:\WinDDK00.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 是微软符号的缓存,我是按照这里的指南获得的:https://msdn.microsoft.com/en-us/library/windows/hardware/ff558829(v=vs.85).aspx
我的第二个问题是,如何正确设置调试器以转储日志?
谢谢
我不太明白为什么这有帮助,但如果我在
下关闭 KMDF 验证程序
[DriverName] Package -> Properties -> Configuration Properties -> Driver Install -> KMDF Verifier -> Enable KMDF Verifier
并部署驱动程序,成功了。如果我打开它,它就会失败。我部署了我的驱动程序几次,打开和关闭该选项,当它打开时它总是失败。
我将这个问题连同我的发现一起发布了。也许那里有人可以回答为什么会这样:https://www.osronline.com/showthread.cfm?link=277793
我正在尝试编写一个 kmdf driver 来针对自定义 PCIe 板。按照微软提供的默认项目,我对.inf文件做了一些小改动,主要是改变了字符串的名称,并提供了我们PCIe板卡的硬件ID。
部署 driver 正常工作。 driver 安装并显示在设备管理器上,但它说它没有正确安装或可能已损坏。
在调试时,我看到 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
但它永远行不通。我确保所有符号路径都正确加载,如下所示
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.pdbFC6AA4329F4372BE924775887225632\Wdf01000.pdb
fffff880`00f20000 fffff880`00f30000 WDFLDR (pdb symbols) c:\winsymbols\wdfldr.pdb74B20D2E5B4E7AA2DE143F642A176E2\wdfldr.pdb
其中 "CIPDriver" 是我的 driver。
在 运行 转储命令上,这是输出:
22: kd> !wdfkd.wdflogdump CIPDriver.sys
Trace searchpath is:
Trace format prefix is: %7!u!: %!FUNC! -
TMF file used for formatting log is: C:\WinDDK00.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 是微软符号的缓存,我是按照这里的指南获得的:https://msdn.microsoft.com/en-us/library/windows/hardware/ff558829(v=vs.85).aspx
我的第二个问题是,如何正确设置调试器以转储日志?
谢谢
我不太明白为什么这有帮助,但如果我在
下关闭 KMDF 验证程序[DriverName] Package -> Properties -> Configuration Properties -> Driver Install -> KMDF Verifier -> Enable KMDF Verifier
并部署驱动程序,成功了。如果我打开它,它就会失败。我部署了我的驱动程序几次,打开和关闭该选项,当它打开时它总是失败。
我将这个问题连同我的发现一起发布了。也许那里有人可以回答为什么会这样:https://www.osronline.com/showthread.cfm?link=277793