Hello!
I’ve got the following problem: Our WDM driver (a PCI bridge driver) works fin under XP, but when I try to install it under Vista, it takes extremely long and finally fails with a timeout error. Afterwards, the driver is listed in the device manager as “fully functional”, but it doesn’t work with our application.
I debugged the driver with WinDbg to see what’s wrong, but I can’t really see the problem. Below are my results. I’d really appreciate any hint. Thanks in advance!
Regards
Stefan
-> DriverEntry
-> DrvCreateSupportDevice
-> IoCreateDevice(…, &NtDeviceName, …);
<- STATUS_SUCCESS
-> IoCreateSymbolicLink(&DosDeviceName, &NtDeviceName);
<- STATUS_SUCCESS
<- TRUE
DriverObject->MajorFunction[IRP_MJ_CREATE] = DrvDispatchCreate;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = DrvDispatchClose;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DrvDispatchDeviceControl;
DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = DrvDispatchInternalDeviceControl;
DriverObject->MajorFunction[IRP_MJ_CLEANUP] = DrvDispatchCleanup;
DriverObject->MajorFunction[IRP_MJ_POWER] = DrvDispatchPower;
DriverObject->MajorFunction[IRP_MJ_PNP] = DrvDispatchPnp;
DriverObject->DriverExtension->AddDevice = DrvAddDevice;
DriverObject->DriverStartIo = DrvStartIo;
DriverObject->DriverUnload = DrvUnload;
<- STATUS_SUCCESS
-> DrvAddDevice
-> IoCreateDevice(…, &NtDeviceName, …);
<- STATUS_SUCCESS
-> IoRegisterDeviceInterface(pdo, &GUID_DEVINTERFACE, NULL, &pdx->DeviceInterfaceName);
<- STATUS_SUCCESS
-> IoCreateSymbolicLink(&DosDeviceName, &NtDeviceName);
<- STATUS_SUCCESS
-> IoAttachDeviceToDeviceStack(DeviceObject, pdo);
<- STATUS_SUCCESS
-> DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
<- STATUS_SUCCESS
/* This one doesn’t always occur
-> DrvDispatchPnp
-> 0x18 = ???
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
*/
-> DrvDispatchPnp
-> 0x0D = IRP_MN_FILTER_RESOURCE_REQUIREMENTS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x00 = IRP_MN_START_DEVICE
-> DrvPnpStartDevice
-> DrvForwardAndWait(DeviceObject, Irp);
-> IoCallDriver(DeviceContext->LowerDevice, Irp);
<- STATUS_SUCCESS
-> DrvGetResources(DeviceContext, Irp);
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
********
=> Vista seems to wait for something for 5 Minuten (outside driver code)
********
-> DrvDispatchPnp
-> 0x09 = IRP_MN_QUERY_CAPABILITIES
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x08 = IRP_MN_QUERY_INTERFACE
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
-> DrvDispatchPnp
-> 0x09 = IRP_MN_QUERY_CAPABILITIES
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x08 = IRP_MN_QUERY_INTERFACE
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
-> DrvDispatchPnp
-> 0x09 = IRP_MN_QUERY_CAPABILITIES
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x09 = IRP_MN_QUERY_CAPABILITIES
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x09 = IRP_MN_QUERY_CAPABILITIES
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x08 = IRP_MN_QUERY_INTERFACE
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x08 = IRP_MN_QUERY_INTERFACE
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
********
=> Vista does something for 30 seconds (outside driver code)
********
-> DrvDispatchPnp
-> 0x09 = IRP_MN_QUERY_CAPABILITIES
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x08 = IRP_MN_QUERY_INTERFACE
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
-> DrvDispatchPnp
-> 0x09 = IRP_MN_QUERY_CAPABILITIES
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x08 = IRP_MN_QUERY_INTERFACE
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
<- STATUS_SUCCESS
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
-> DrvDispatchPnp
-> 0x07 = IRP_MN_QUERY_DEVICE_RELATIONS
-> DrvPnpDefault
-> IoCallDriver(DeviceContext->LowerDevice, Irp)
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
<- STATUS_NOT_SUPPORTED
********
=> Vista seems to wait for something for 5 Minuten (outside driver code)
********