首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KMDF WdfDriverCreate函数返回“资源不足”

KMDF WdfDriverCreate函数返回“资源不足”
EN

Stack Overflow用户
提问于 2016-07-06 18:41:35
回答 1查看 325关注 0票数 1

我正试图编写一个kmdf驱动程序来针对自定义的PCIe板。在遵循微软提供的默认项目之后,我对.inf文件做了一些小的更改,主要是更改字符串的名称和提供PCIe板的硬件ID。

部署驱动程序就像它应该做的那样。驱动程序安装并显示在设备管理器上,但它表示没有正确安装,否则可能损坏。

在调试时,我看到WdfDriverCreate失败,错误为0xC000009A,这意味着资源不足。

作为参考,这是kmdf模板项目为您生成的代码,这就是我目前正在运行的代码:

代码语言:javascript
复制
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;
}

我的第一个问题是,什么会导致这一切?

在引发错误后,我试图通过运行

代码语言:javascript
复制
!wdfkd.wdflogdump mydriver.sys

但从来都不起作用。我确保正确加载所有符号路径,如下所示

代码语言:javascript
复制
    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“是我的司机。

在运行转储命令时,这是输出:

代码语言:javascript
复制
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的输出

代码语言:javascript
复制
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:\ the符号是Microsofts符号的缓存,我按照这里的指南获得了这些符号:https://msdn.microsoft.com/en-us/library/windows/hardware/ff558829(v=vs.85).aspx

我的第二个问题是,如何正确地设置调试器以转储日志?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-18 14:47:24

我不太明白这为什么有帮助,但如果我关闭了KMDF验证器

代码语言:javascript
复制
[DriverName] Package -> Properties -> Configuration Properties -> Driver Install -> KMDF Verifier -> Enable KMDF Verifier 

部署驱动程序,就能工作了。如果我打开它,它就失败了。我部署了我的司机几次切换这个选项开关,它总是失败的时候,它是开着。

我把这个问题连同我的调查结果一起贴了出来。也许有人可以回答为什么是这样的:https://www.osronline.com/showthread.cfm?link=277793

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38231468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档