首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UMDF PnP驱动程序不创建跟踪日志。

UMDF PnP驱动程序不创建跟踪日志。
EN

Stack Overflow用户
提问于 2022-01-31 19:59:35
回答 1查看 128关注 0票数 1

我试图为这个Idd样本驱动器创建跟踪日志消息。我正在跟踪文档。

我将WPP_INIT_TRACING(pDriverObject, pRegistryPath)添加到DriverEntry中,WPP_CLEANUP(pDriverObject)添加到EvtCleanupCallback中。

代码语言:javascript
复制
_Use_decl_annotations_
void DriverContextCleanup(WDFOBJECT DriverObject)
{
    UNREFERENCED_PARAMETER(DriverObject);

    DoTraceMessage(MYDRIVER_ALL_INFO, "Tracing Fini Success");
    
    WPP_CLEANUP(WdfDriverWdmGetDriverObject(DriverObject));
}

_Use_decl_annotations_
extern "C" NTSTATUS DriverEntry(
    PDRIVER_OBJECT  pDriverObject,
    PUNICODE_STRING pRegistryPath
)
{
    WDF_DRIVER_CONFIG Config;
    NTSTATUS Status;

    WDF_OBJECT_ATTRIBUTES Attributes;
    WDF_OBJECT_ATTRIBUTES_INIT(&Attributes);

    Attributes.EvtCleanupCallback = DriverContextCleanup;

    WDF_DRIVER_CONFIG_INIT(&Config,
        IddSampleDeviceAdd
    );

    WPP_INIT_TRACING(pDriverObject, pRegistryPath);

    DoTraceMessage(MYDRIVER_ALL_INFO, "Tracing Init . . .");

    Status = WdfDriverCreate(pDriverObject, pRegistryPath, &Attributes, &Config, WDF_NO_HANDLE);
    if (!NT_SUCCESS(Status))
    {
        DoTraceMessage(MYDRIVER_ALL_INFO, "Tracing Init Failed");

        WPP_CLEANUP(pDriverObject);
        return Status;
    }

    DoTraceMessage(MYDRIVER_ALL_INFO, "Tracing Init Success");
    return Status;
}

我在DoTraceMessage和DeviceEntry中添加了一些带有MYDRIVER_ALL_INFO标志的DriverEntry ()调用。

代码语言:javascript
复制
NTSTATUS IddSampleDeviceD0Entry(WDFDEVICE Device, WDF_POWER_DEVICE_STATE PreviousState)
{
    UNREFERENCED_PARAMETER(PreviousState);

    // This function is called by WDF to start the device in the fully-on power state.

    DoTraceMessage(MYDRIVER_ALL_INFO, "Tracing Device Entry");

    auto* pContext = WdfObjectGet_IndirectDeviceContextWrapper(Device);
    pContext->pContext->InitAdapter();

    return STATUS_SUCCESS;
}

我确保在项目的属性中将WPP跟踪设置为YES。

项目构建,我进入TraceView并打开IddSampleDriver.PDB文件,将级别设置为详细,并检查所有标志。我证实它有它所需要的追踪物。因为如果我打开IddSampleApp.PDB文件,它就会失败。

在启用TestSigning并使用pnputil -a ./x64/Debug/IddSampleDriver/IddSampleDriver.inf安装驱动程序之后,运行示例应用程序,驱动程序在显示设置中启动3个虚拟监视器。然后退出应用程序,监视器就消失了。一切似乎都很正常。问题是TraceView中没有任何痕迹。

我试过使用tracelog,遵循。还是一无所获。

我试过使用logman,跟踪。还是一无所获。

我快疯了。我花了整整一个星期的时间在这个问题上,尝试每一条可能的途径,让我的跟踪信息出现。

要么我按照这些指示中的每一个都做,但都没有成功。要么是我搞砸了其中的每一个,要么是我错过了一些我需要做的事情,才能看到这些痕迹。

附加信息:

Trace.h没有被移动,目标是x64,Debug。在建置机上运行。Win10。

我使用的CTL文件:

代码语言:javascript
复制
b254994f-46e6-4718-80a0-0a3aa50d6ce4 MyDriver1TraceGuid

我使用的基本过程(以tracelog为例):

代码语言:javascript
复制
tracepdb -f .\x64\Debug\IddSampleDriver.pdb
tracelog -start TestTraceIDD -guid .\guid.ctl -f testTrace.etl -flag 0xff

pnputil -a .\x64\Debug\IddSampleDriver\IddSampleDriver.inf #install driver
.\x64\Debug\IddSampleApp.exe #create software device and attach driver to it
<exit app>

tracelog -stop TestTraceIDD
tracefmt.exe .\testTrace.etl -p . -o test.out```

pnputil -d oem20.inf -f #uninstall driver
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-02 20:59:15

解决了我的问题。我实际上并没有安装我的驱动程序,因为它在我第一次安装时还在安装,所以它总是使用那个驱动程序,而不是我启用WPP的新驱动程序。我在用pnputil安装和卸载驱动程序。例如,我使用pnputil -d oem20.inf -f来卸载驱动程序。这太糟了。我现在知道了,删除一个司机的力量什么也做不了。我之所以强制删除,是因为当我还有设备时,它不会删除,即使我会退出示例应用程序。

因此,要正确删除驱动程序,必须做的是使用pnputil枚举设备,删除使用驱动程序的设备,然后删除驱动程序。这允许正确的新驱动程序安装。

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

https://stackoverflow.com/questions/70932124

复制
相关文章

相似问题

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