kdmf pnp驱动程序在安装时找不到设备

时间:2016-04-14 10:13:41

标签: inf kmdf

我正在尝试创建一个pnp驱动程序,但是当我运行sc start driver-name时,我收到系统错误1058(禁用禁用或未启用设备关联)。但是,如果我修改了nonpnp WDF_DRIVER_CONFIG_INIT(&config, WDF_NO_EVENT_CALLBACK);config.DriverInitFlags |= WdfDriverInitNonPnpDriver;的代码,则服务启动并且我能够进行调试。

我为通过设备管理器验证的设备尝试了不同的hwid值。 DriverEntry运行正常,我使用了windbg,但设备添加功能从未被调用过。

pnp。

的驱动程序输入代码
// prototype for add device function
EVT_WDF_DRIVER_DEVICE_ADD QDeviceAdd;

NTSTATUS DriverEntry(
    IN OUT PDRIVER_OBJECT   DriverObject,
    IN PUNICODE_STRING      RegistryPath
    )
{
    NTSTATUS                       status = STATUS_SUCCESS;
    WDF_DRIVER_CONFIG              config;
    WDFDRIVER                      hDriver;
    PWDFDEVICE_INIT                pInit = NULL;
    WDF_OBJECT_ATTRIBUTES          attributes;

    KdPrint(("enabling wpp tracing\n"));
    WPP_INIT_TRACING(DriverObject, RegistryPath);

    WDF_DRIVER_CONFIG_INIT(
        &config,
        QDeviceAdd // WDF_NO_EVENT_CALLBACK This is a non-pnp driver.
        );

    WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
    attributes.EvtCleanupCallback = QEvtDriverContextCleanup;

    status = WdfDriverCreate(DriverObject,
        RegistryPath,
        &attributes,
        &config,
        &hDriver);

    if (!NT_SUCCESS(status)) {
        KdPrint(("NonPnp: WdfDriverCreate failed with status 0x%x\n", status));
        WPP_CLEANUP(DriverObject);
        return status;
    }

    return status;
}

1 个答案:

答案 0 :(得分:0)

显然以前的inf文件副本仍留在商店中,注册表没有更新,所以经过一些挖掘后我结束了以下操作:

检入C:\ Windows \ Inf \ setupapi.dev.log并复制丢失的文件。 然后使用pnputil

从商店中删除驱动程序
  • pnputil -d oemXX.inf
  • 手动删除密钥 HKLM \系统\ CurrentControlSet \控制\类{您级-ID}
  • pnputil -i / path / to / inf

感谢this sitethis post