From: PhilG on
Hello there, I hope someone will be able to help me with this problem that has
me vexed. I'm developing a kernel function driver and it works except when I
make a call to IoReportTargetDeviceChangeAsynchronous, it bugchecks with
PNP_DETECTED_FATAL_ERROR (ca), Invalid PDO (first arg = 2). I'm pretty sure
the
PDO is reasonably correct. What I'm not sure of is what it means for it to be
initialized through QueryDeviceRelations. I added a handler for
IRP_MN_QUERY_DEVICE_RELATIONS in the Plug and Play dispatch routine with the
HandleQueryRelations function in Oney 2 Ed., p. 549. But this minor IRP
request
doesn't get invoked. Fundamental question: how do I initialize a PDO to make
it
valid for IoReportTargetDeviceChangeAsynchronous? The !analyze output follows.

Thanks,

Phil



Here's the !analyze output:

kd> !analyze -v
*******************************************************************************
*
*
* Bugcheck Analysis
*
*
*
*******************************************************************************

PNP_DETECTED_FATAL_ERROR (ca)
PnP encountered a severe error, either as a result of a problem in a driver or
a problem in PnP itself. The first argument describes the nature of the
problem, the second argument is the address of the PDO. The other arguments
vary depending on argument 1.
Arguments:
Arg1: 00000002, Invalid PDO
An API which requires a PDO has been called with either an FDO,
a PDO which hasn't been initialized yet (returned to PnP in a
QueryDeviceRelation/BusRelations), or some random piece of
memory.
Arg2: 82287360, Purported PDO.
Arg3: 00000000, Driver object.
Arg4: 00000000

Debugging Details:
------------------


BUGCHECK_STR: 0xCA_2

DEVICE_OBJECT: 82287360

DRIVER_OBJECT: 822759c0

IMAGE_NAME: pcidp.sys

DEBUG_FLR_IMAGE_TIMESTAMP: 4c223060

MODULE_NAME: pcidp

FAULTING_MODULE: f89c3000 pcidp

DEFAULT_BUCKET_ID: DRIVER_FAULT

PROCESS_NAME: Idle

LAST_CONTROL_TRANSFER: from 80532747 to 804e3592

STACK_TEXT:
805509ec 80532747 00000003 80550d48 00000000 nt!RtlpBreakWithStatusInstruction
80550a38 8053321e 00000003 80559c20 805599c0 nt!KiBugCheckDebugBreak+0x19
80550e18 8053380e 000000ca 00000002 82287360 nt!KeBugCheck2+0x574
80550e38 8051c7dc 000000ca 00000002 82287360 nt!KeBugCheckEx+0x1b
80550e54 f89c4c25 82287360 80550e88 00000000
nt!IoReportTargetDeviceChangeAsynchronous+0x12c
80550f08 f89c522d 82287360 82287418 ffdffc50 pcidp!NotifyRegisteredApp+0x185
[e:\development\coilpro\pcidp_sys\pcidp.c @ 745]
80550f2c 804dbbd4 822873d4 82287360 00000000 pcidp!PCIDPForDpcIsr+0x8d
[e:\development\coilpro\pcidp_sys\pcidp.c @ 908]
80550f50 804dbb4d 00000000 0000000e 00000000 nt!KiRetireDpcList+0x46
80550f54 00000000 0000000e 00000000 00000000 nt!KiIdleLoop+0x26


STACK_COMMAND: kb

FOLLOWUP_IP:
pcidp!NotifyRegisteredApp+185 [e:\development\coilpro\pcidp_sys\pcidp.c @ 745]
f89c4c25 89856cffffff mov dword ptr [ebp-94h],eax

SYMBOL_STACK_INDEX: 5

SYMBOL_NAME: pcidp!NotifyRegisteredApp+185

FOLLOWUP_NAME: MachineOwner

FAILURE_BUCKET_ID: 0xCA_2_pcidp!NotifyRegisteredApp+185

BUCKET_ID: 0xCA_2_pcidp!NotifyRegisteredApp+185

Followup: MachineOwner
---------