news 2026/7/8 0:03:24

nt!IopSetupArbiterAndTranslators函数分析之对ResourceTranslator的处理生成translatorEntry

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nt!IopSetupArbiterAndTranslators函数分析之对ResourceTranslator的处理生成translatorEntry

nt!IopSetupArbiterAndTranslators函数分析之对ResourceTranslator的处理生成translatorEntry

if (searchTranslator) {
//
// First, check if there is a translator for the device node?
// If yes, translate the req desc and link it to the front of ReqDesc->TranslatedReqDesc
// else do nothing.
//

found = IopFindResourceHandlerInfo(
ResourceTranslator,
deviceNode,
resourceType,
&translatorEntry);

0: kd> dv searchTranslator
searchTranslator = 0x01 ''
0: kd> t

0: kd> kc
#
00 nt!IopFindResourceHandlerInfo
01 nt!IopSetupArbiterAndTranslators
02 nt!IopResourceRequirementsListToReqList
03 nt!IopAllocateBootResourcesInternal
04 nt!IopAllocateBootResources
05 nt!IopReportBootResources
06 nt!PiQueryAndAllocateBootResources
07 nt!PiProcessNewDeviceNode
08 nt!PipProcessDevNodeTree
09 nt!PipDeviceActionWorker
0a nt!PipRequestDeviceAction
0b nt!IopInitializeBootDrivers
0c nt!IoInitSystem
0d nt!Phase1Initialization
0e nt!PspSystemThreadStartup
0f nt!KiThreadStartup
0: kd> dv
HandlerType = ResourceTranslator (0n1)
DeviceNode = 0x899c5bc8
ResourceType = 0x06 ''
HandlerEntry = 0xf789a184

0: kd> dx -r1 ((ntkrnlmp!_DEVICE_NODE *)0x899c5bc8)
((ntkrnlmp!_DEVICE_NODE *)0x899c5bc8) : 0x899c5bc8 [Type: _DEVICE_NODE *]
[+0x000] Sibling : 0x0 [Type: _DEVICE_NODE *]
[+0x004] Child : 0x899c5850 [Type: _DEVICE_NODE *]
[+0x008] Parent : 0x0 [Type: _DEVICE_NODE *]
[+0x00c] LastChild : 0x89983478 [Type: _DEVICE_NODE *]
[+0x010] Level : 0x0 [Type: unsigned long]
[+0x014] Notify : 0x0 [Type: _PO_DEVICE_NOTIFY *]
[+0x018] State : DeviceNodeStarted (776) [Type: _PNP_DEVNODE_STATE]
[+0x01c] PreviousState : DeviceNodeEnumerateCompletion (781) [Type: _PNP_DEVNODE_STATE]
[+0x020] StateHistory [Type: _PNP_DEVNODE_STATE [20]]
[+0x070] StateHistoryEntry : 0x5 [Type: unsigned long]
[+0x074] CompletionStatus : 0 [Type: long]
[+0x078] PendingIrp : 0x0 [Type: _IRP *]
[+0x07c] Flags : 0x131 [Type: unsigned long]
[+0x080] UserFlags : 0x0 [Type: unsigned long]
[+0x084] Problem : 0x0 [Type: unsigned long]
[+0x088] PhysicalDeviceObject : 0x899c5d08 : Device for "\Driver\PnpManager" [Type: _DEVICE_OBJECT *]
[+0x08c] ResourceList : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x090] ResourceListTranslated : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x094] InstancePath : "HTREE\ROOT\0" [Type: _UNICODE_STRING]
[+0x09c] ServiceName : "" [Type: _UNICODE_STRING]
[+0x0a4] DuplicatePDO : 0x0 [Type: _DEVICE_OBJECT *]
[+0x0a8] ResourceRequirements : 0x0 [Type: _IO_RESOURCE_REQUIREMENTS_LIST *]
[+0x0ac] InterfaceType : InterfaceTypeUndefined (-1) [Type: _INTERFACE_TYPE]
[+0x0b0] BusNumber : 0xffffffff [Type: unsigned long]
[+0x0b4] ChildInterfaceType : InterfaceTypeUndefined (-1) [Type: _INTERFACE_TYPE]
[+0x0b8] ChildBusNumber : 0xffffffff [Type: unsigned long]
[+0x0bc] ChildBusTypeIndex : 0xffff [Type: unsigned short]
[+0x0be] RemovalPolicy : 0x0 [Type: unsigned char]
[+0x0bf] HardwareRemovalPolicy : 0x0 [Type: unsigned char]
[+0x0c0] TargetDeviceNotify [Type: _LIST_ENTRY]
[+0x0c8] DeviceArbiterList [Type: _LIST_ENTRY]
[+0x0d0] DeviceTranslatorList [Type: _LIST_ENTRY]
[+0x0d8] NoTranslatorMask : 0x0 [Type: unsigned short] [+0x0d8] NoTranslatorMask
[+0x0da] QueryTranslatorMask : 0x0 [Type: unsigned short]
[+0x0dc] NoArbiterMask : 0x0 [Type: unsigned short]
[+0x0de] QueryArbiterMask : 0x44 [Type: unsigned short]
[+0x0e0] OverUsed1 [Type: __unnamed]
[+0x0e4] OverUsed2 [Type: __unnamed]
[+0x0e8] BootResources : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x0ec] CapabilityFlags : 0x0 [Type: unsigned long]
[+0x0f0] DockInfo [Type: __unnamed]
[+0x100] DisableableDepends : 0x0 [Type: unsigned long]
[+0x104] PendedSetInterfaceState [Type: _LIST_ENTRY]
[+0x10c] LegacyBusListEntry [Type: _LIST_ENTRY]

[+0x0d0] DeviceTranslatorList [Type: _LIST_ENTRY]

0: kd> dx -r1 (*((ntkrnlmp!_LIST_ENTRY *)0x899c5c98))
(*((ntkrnlmp!_LIST_ENTRY *)0x899c5c98)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0x899c5c98 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x899c5c98 [Type: _LIST_ENTRY *]

case ResourceTranslator:

noHandlerMask = DeviceNode->NoTranslatorMask;
queryHandlerMask = DeviceNode->QueryTranslatorMask;
listHead = &DeviceNode->DeviceTranslatorList;
break;

0: kd> gu
eax=00000000 ebx=e12be0b8 ecx=e127f306 edx=00000000 esi=e12979d0 edi=899c5bc8
eip=80ca1354 esp=f789a16c ebp=f789a198 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!IopSetupArbiterAndTranslators+0x1ee:
80ca1354 84c0 test al,al
0: kd> p
eax=00000000 ebx=e12be0b8 ecx=e127f306 edx=00000000 esi=e12979d0 edi=899c5bc8
eip=80ca135c esp=f789a16c ebp=f789a198 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!IopSetupArbiterAndTranslators+0x1f6:
80ca135c 8a4df9 mov cl,byte ptr [ebp-7] ss:0010:f789a191=06

if (resourceType <= PI_MAXIMUM_RESOURCE_TYPE_TRACKED) {
resourceMask = 1 << resourceType;
} else {
resourceMask = 0;
}
status = IopQueryResourceHandlerInterface(ResourceTranslator,
deviceNode->PhysicalDeviceObject,
resourceType,
&interface);
deviceNode->QueryTranslatorMask |= resourceMask;


0: kd> kc
#
00 nt!IopQueryResourceHandlerInterface
01 nt!IopSetupArbiterAndTranslators
02 nt!IopResourceRequirementsListToReqList
03 nt!IopAllocateBootResourcesInternal
04 nt!IopAllocateBootResources
05 nt!IopReportBootResources
06 nt!PiQueryAndAllocateBootResources
07 nt!PiProcessNewDeviceNode
08 nt!PipProcessDevNodeTree
09 nt!PipDeviceActionWorker
0a nt!PipRequestDeviceAction
0b nt!IopInitializeBootDrivers
0c nt!IoInitSystem
0d nt!Phase1Initialization
0e nt!PspSystemThreadStartup
0f nt!KiThreadStartup
0: kd> dv
HandlerType = ResourceTranslator (0n1)
DeviceObject = 0x899c5d08 Device for "\Driver\PnpManager"
ResourceType = 0x06 ''


switch (HandlerType) {
case ResourceTranslator:
size = sizeof(TRANSLATOR_INTERFACE) + 4; // Pnptest
//size = sizeof(TRANSLATOR_INTERFACE);
interfaceType = GUID_TRANSLATOR_INTERFACE_STANDARD;
break;

0: kd> kc
#
00 nt!IopPnPDispatch
01 nt!IofCallDriver
02 nt!IopSynchronousCall
03 nt!IopQueryResourceHandlerInterface
04 nt!IopSetupArbiterAndTranslators
05 nt!IopResourceRequirementsListToReqList
06 nt!IopAllocateBootResourcesInternal
07 nt!IopAllocateBootResources
08 nt!IopReportBootResources
09 nt!PiQueryAndAllocateBootResources
0a nt!PiProcessNewDeviceNode
0b nt!PipProcessDevNodeTree
0c nt!PipDeviceActionWorker
0d nt!PipRequestDeviceAction
0e nt!IopInitializeBootDrivers
0f nt!IoInitSystem
10 nt!Phase1Initialization
11 nt!PspSystemThreadStartup
12 nt!KiThreadStartup
0: kd> dv
DeviceObject = 0x899c5d08 Device for "\Driver\PnpManager"
Irp = 0x899c5468
information = 0x899c5d08
length = 8
uiNumber = 0xf789a0d0
id = 0x00000000
separatorCount = 0x80cb0b37
0: kd> !Irp 0x899c5468
Irp is active with 1 stacks 1 is current (= 0x899c54d8)
No Mdl: No System Buffer: Thread 899a1020: Irp stack trace.
cmd flg cl Device File Completion-Context
>[IRP_MJ_PNP(1b), IRP_MN_QUERY_INTERFACE(8)]
0 0 899c5d08 00000000 00000000-00000000
\Driver\PnpManager
Args: f789a144 0000001c e129d9b8 00000006

case IRP_MN_QUERY_INTERFACE:
status = Irp->IoStatus.Status;
deviceNode = (PDEVICE_NODE)DeviceObject->DeviceObjectExtension->DeviceNode;
if (deviceNode == IopRootDeviceNode) {
if ( IopCompareGuid((PVOID)irpSp->Parameters.QueryInterface.InterfaceType, (PVOID)&GUID_ARBITER_INTERFACE_STANDARD)) {
status = STATUS_SUCCESS;
arbiterInterface = (PARBITER_INTERFACE) irpSp->Parameters.QueryInterface.Interface;
arbiterInterface->ArbiterHandler = ArbArbiterHandler;
switch ((UCHAR)((ULONG_PTR)irpSp->Parameters.QueryInterface.InterfaceSpecificData)) {
case CmResourceTypePort:
arbiterInterface->Context = (PVOID) &IopRootPortArbiter;
break;
case CmResourceTypeMemory:
arbiterInterface->Context = (PVOID) &IopRootMemArbiter;
break;
case CmResourceTypeInterrupt:
arbiterInterface->Context = (PVOID) &IopRootIrqArbiter;
break;
case CmResourceTypeDma:
arbiterInterface->Context = (PVOID) &IopRootDmaArbiter;
break;
case CmResourceTypeBusNumber:
arbiterInterface->Context = (PVOID) &IopRootBusNumberArbiter;
break;
default:
status = STATUS_INVALID_PARAMETER;
break;
}
} else if ( IopCompareGuid((PVOID)irpSp->Parameters.QueryInterface.InterfaceType, (PVOID)&GUID_TRANSLATOR_INTERFACE_STANDARD)) {
translatorInterface = (PTRANSLATOR_INTERFACE) irpSp->Parameters.QueryInterface.Interface;
translatorInterface->TranslateResources = IopTranslatorHandlerCm;
translatorInterface->TranslateResourceRequirements = IopTranslatorHandlerIo;

status = STATUS_SUCCESS;
}
}
break;

0: kd> dt IO_STACK_LOCATION 899c54d8 -r
nt!IO_STACK_LOCATION
+0x000 MajorFunction : 0x1b ''
+0x001 MinorFunction : 0x8 ''
+0x002 Flags : 0 ''
+0x003 Control : 0 ''
+0x004 Parameters : __unnamed
+0x000 QueryInterface : __unnamed
+0x000 InterfaceType : 0xf789a144 _GUID {6c154a92-aacf-11d0-8d2a-00a0c906b244}
+0x004 Size : 0x1c
+0x006 Version : 0
+0x008 Interface : 0xe129d9b8 _INTERFACE
+0x00c InterfaceSpecificData : 0x00000006 Void

0: kd> dt TRANSLATOR_INTERFACE 0xe129d9b8
nt!TRANSLATOR_INTERFACE
+0x000 Size : 0x1c
+0x002 Version : 0
+0x004 Context : (null)
+0x008 InterfaceReference : (null)
+0x00c InterfaceDereference : (null)
+0x010 TranslateResources : (null)
+0x014 TranslateResourceRequirements : (null)

DEFINE_GUID( GUID_TRANSLATOR_INTERFACE_STANDARD, 0x6c154a92L, 0xaacf, 0x11d0, 0x8d, 0x2a, 0x00, 0xa0, 0xc9, 0x06, 0xb2, 0x44 );

} else if ( IopCompareGuid((PVOID)irpSp->Parameters.QueryInterface.InterfaceType, (PVOID)&GUID_TRANSLATOR_INTERFACE_STANDARD)) {
translatorInterface = (PTRANSLATOR_INTERFACE) irpSp->Parameters.QueryInterface.Interface;
translatorInterface->TranslateResources = IopTranslatorHandlerCm;
translatorInterface->TranslateResourceRequirements = IopTranslatorHandlerIo;
status = STATUS_SUCCESS;
}

0: kd> dt TRANSLATOR_INTERFACE 0xe129d9b8
nt!TRANSLATOR_INTERFACE
+0x000 Size : 0x1c
+0x002 Version : 0
+0x004 Context : (null)
+0x008 InterfaceReference : (null)
+0x00c InterfaceDereference : (null)
+0x010 TranslateResources : 0x80caf840 long nt!IopTranslatorHandlerCm+0
+0x014 TranslateResourceRequirements : 0x80caf8e2 long nt!IopTranslatorHandlerIo+0

0: kd> bp nt!IopTranslatorHandlerCm
0: kd> bp nt!IopTranslatorHandlerIo


0: kd> gu
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=899c5468 edi=899c5d08
eip=80a2675c esp=f789a0c4 ebp=f789a0d0 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!IofCallDriver+0x62:
80a2675c 5f pop edi
0: kd> gu
eax=00000000 ebx=899c5d08 ecx=00000000 edx=00000000 esi=f789a144 edi=899c54fc
eip=80c95e00 esp=f789a0d8 ebp=f789a100 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!IopSynchronousCall+0x1aa:
80c95e00 8bf0 mov esi,eax
0: kd> gu
eax=00000000 ebx=0000001c ecx=00000008 edx=00000000 esi=e129d9b8 edi=00000000
eip=80c969ff esp=f789a114 ebp=f789a154 iopl=0 nv up ei ng nz ac po cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000293
nt!IopQueryResourceHandlerInterface+0x10d:
80c969ff 8bd8 mov ebx,eax
0: kd> gu
eax=00000000 ebx=e12be0b8 ecx=00000008 edx=00000000 esi=00000040 edi=899c5bc8
eip=80ca137d esp=f789a16c ebp=f789a198 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!IopSetupArbiterAndTranslators+0x217:
80ca137d 6609b7da000000 or word ptr [edi+0DAh],si ds:0023:899c5ca2=0000


status = IopQueryResourceHandlerInterface(ResourceTranslator,
deviceNode->PhysicalDeviceObject,
resourceType,
&interface);
deviceNode->QueryTranslatorMask |= resourceMask;


0: kd> dx -r1 ((ntkrnlmp!_DEVICE_NODE *)0x899c5bc8)
((ntkrnlmp!_DEVICE_NODE *)0x899c5bc8) : 0x899c5bc8 [Type: _DEVICE_NODE *]
[+0x000] Sibling : 0x0 [Type: _DEVICE_NODE *]
[+0x004] Child : 0x899c5850 [Type: _DEVICE_NODE *]
[+0x008] Parent : 0x0 [Type: _DEVICE_NODE *]
[+0x00c] LastChild : 0x89983478 [Type: _DEVICE_NODE *]
[+0x010] Level : 0x0 [Type: unsigned long]
[+0x014] Notify : 0x0 [Type: _PO_DEVICE_NOTIFY *]
[+0x018] State : DeviceNodeStarted (776) [Type: _PNP_DEVNODE_STATE]
[+0x01c] PreviousState : DeviceNodeEnumerateCompletion (781) [Type: _PNP_DEVNODE_STATE]
[+0x020] StateHistory [Type: _PNP_DEVNODE_STATE [20]]
[+0x070] StateHistoryEntry : 0x5 [Type: unsigned long]
[+0x074] CompletionStatus : 0 [Type: long]
[+0x078] PendingIrp : 0x0 [Type: _IRP *]
[+0x07c] Flags : 0x131 [Type: unsigned long]
[+0x080] UserFlags : 0x0 [Type: unsigned long]
[+0x084] Problem : 0x0 [Type: unsigned long]
[+0x088] PhysicalDeviceObject : 0x899c5d08 : Device for "\Driver\PnpManager" [Type: _DEVICE_OBJECT *]
[+0x08c] ResourceList : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x090] ResourceListTranslated : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x094] InstancePath : "HTREE\ROOT\0" [Type: _UNICODE_STRING]
[+0x09c] ServiceName : "" [Type: _UNICODE_STRING]
[+0x0a4] DuplicatePDO : 0x0 [Type: _DEVICE_OBJECT *]
[+0x0a8] ResourceRequirements : 0x0 [Type: _IO_RESOURCE_REQUIREMENTS_LIST *]
[+0x0ac] InterfaceType : InterfaceTypeUndefined (-1) [Type: _INTERFACE_TYPE]
[+0x0b0] BusNumber : 0xffffffff [Type: unsigned long]
[+0x0b4] ChildInterfaceType : InterfaceTypeUndefined (-1) [Type: _INTERFACE_TYPE]
[+0x0b8] ChildBusNumber : 0xffffffff [Type: unsigned long]
[+0x0bc] ChildBusTypeIndex : 0xffff [Type: unsigned short]
[+0x0be] RemovalPolicy : 0x0 [Type: unsigned char]
[+0x0bf] HardwareRemovalPolicy : 0x0 [Type: unsigned char]
[+0x0c0] TargetDeviceNotify [Type: _LIST_ENTRY]
[+0x0c8] DeviceArbiterList [Type: _LIST_ENTRY]
[+0x0d0] DeviceTranslatorList [Type: _LIST_ENTRY]
[+0x0d8] NoTranslatorMask : 0x0 [Type: unsigned short]
[+0x0da] QueryTranslatorMask : 0x40 [Type: unsigned short] 原来是0x0

if (found == FALSE) {
translatorEntry = (PPI_RESOURCE_TRANSLATOR_ENTRY)ExAllocatePoolTE(
PagedPool | POOL_COLD_ALLOCATION,
sizeof(PI_RESOURCE_TRANSLATOR_ENTRY));
if (!translatorEntry) {
status = STATUS_INSUFFICIENT_RESOURCES;
return status;
}
translatorEntry->ResourceType = resourceType;
InitializeListHead(&translatorEntry->DeviceTranslatorList);
translatorEntry->TranslatorInterface = (PTRANSLATOR_INTERFACE)interface;
translatorEntry->DeviceNode = deviceNode;
listHead = &deviceNode->DeviceTranslatorList;
InsertTailList(listHead, &translatorEntry->DeviceTranslatorList);
if (!interface) {


0: kd> dt PI_RESOURCE_TRANSLATOR_ENTRY e1294b38
nt!PI_RESOURCE_TRANSLATOR_ENTRY
+0x000 DeviceTranslatorList : _LIST_ENTRY [ 0xe1294b38 - 0xe1294b38 ]
+0x008 ResourceType : 0x6 ''
+0x00c TranslatorInterface : 0xe129d9b8 _TRANSLATOR_INTERFACE
+0x010 DeviceNode : 0x899c5bc8 _DEVICE_NODE

0: kd> dx -r1 ((ntkrnlmp!_DEVICE_NODE *)0x899c5bc8)
((ntkrnlmp!_DEVICE_NODE *)0x899c5bc8) : 0x899c5bc8 [Type: _DEVICE_NODE *]
[+0x000] Sibling : 0x0 [Type: _DEVICE_NODE *]
[+0x004] Child : 0x899c5850 [Type: _DEVICE_NODE *]
[+0x008] Parent : 0x0 [Type: _DEVICE_NODE *]
[+0x00c] LastChild : 0x89983478 [Type: _DEVICE_NODE *]
[+0x010] Level : 0x0 [Type: unsigned long]
[+0x014] Notify : 0x0 [Type: _PO_DEVICE_NOTIFY *]
[+0x018] State : DeviceNodeStarted (776) [Type: _PNP_DEVNODE_STATE]
[+0x01c] PreviousState : DeviceNodeEnumerateCompletion (781) [Type: _PNP_DEVNODE_STATE]
[+0x020] StateHistory [Type: _PNP_DEVNODE_STATE [20]]
[+0x070] StateHistoryEntry : 0x5 [Type: unsigned long]
[+0x074] CompletionStatus : 0 [Type: long]
[+0x078] PendingIrp : 0x0 [Type: _IRP *]
[+0x07c] Flags : 0x131 [Type: unsigned long]
[+0x080] UserFlags : 0x0 [Type: unsigned long]
[+0x084] Problem : 0x0 [Type: unsigned long]
[+0x088] PhysicalDeviceObject : 0x899c5d08 : Device for "\Driver\PnpManager" [Type: _DEVICE_OBJECT *]
[+0x08c] ResourceList : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x090] ResourceListTranslated : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x094] InstancePath : "HTREE\ROOT\0" [Type: _UNICODE_STRING]
[+0x09c] ServiceName : "" [Type: _UNICODE_STRING]
[+0x0a4] DuplicatePDO : 0x0 [Type: _DEVICE_OBJECT *]
[+0x0a8] ResourceRequirements : 0x0 [Type: _IO_RESOURCE_REQUIREMENTS_LIST *]
[+0x0ac] InterfaceType : InterfaceTypeUndefined (-1) [Type: _INTERFACE_TYPE]
[+0x0b0] BusNumber : 0xffffffff [Type: unsigned long]
[+0x0b4] ChildInterfaceType : InterfaceTypeUndefined (-1) [Type: _INTERFACE_TYPE]
[+0x0b8] ChildBusNumber : 0xffffffff [Type: unsigned long]
[+0x0bc] ChildBusTypeIndex : 0xffff [Type: unsigned short]
[+0x0be] RemovalPolicy : 0x0 [Type: unsigned char]
[+0x0bf] HardwareRemovalPolicy : 0x0 [Type: unsigned char]
[+0x0c0] TargetDeviceNotify [Type: _LIST_ENTRY]
[+0x0c8] DeviceArbiterList [Type: _LIST_ENTRY]
[+0x0d0] DeviceTranslatorList [Type: _LIST_ENTRY]

0: kd> dx -r1 (*((ntkrnlmp!_LIST_ENTRY *)0x899c5c98))
(*((ntkrnlmp!_LIST_ENTRY *)0x899c5c98)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0xe1294b38[Type: _LIST_ENTRY *]
[+0x004] Blink : 0xe1294b38 [Type: _LIST_ENTRY *]

if (translatorEntry) {
translatorFound = TRUE;
}
17 e Disable Clear f743f147 [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 1806] 0001 (0001) ACPI!ACPIBusIrpQueryInterface+0x11b
29 e Disable Clear 80ca128f [d:\srv03rtm\base\ntos\io\pnpmgr\pnpres.c @ 2701] 0001 (0001) nt!IopSetupArbiterAndTranslators+0x129
22 e Disable Clear 80ca1263 [d:\srv03rtm\base\ntos\io\pnpmgr\pnpres.c @ 2689] 0001 (0001) nt!IopSetupArbiterAndTranslators+0xfd

断点1:
17 e Disable Clear f743f147 [d:\srv03rtm\base\busdrv\acpi\driver\nt\bus.c @ 1806] 0001 (0001) ACPI!ACPIBusIrpQueryInterface+0x11b

if (found == FALSE) {
arbiterEntry = (PPI_RESOURCE_ARBITER_ENTRY)ExAllocatePoolAE(
PagedPool | POOL_COLD_ALLOCATION,
sizeof(PI_RESOURCE_ARBITER_ENTRY)); 断点1:
if (!arbiterEntry) {
status = STATUS_INSUFFICIENT_RESOURCES;
return status;
}
IopInitializeArbiterEntryState(arbiterEntry);
InitializeListHead(&arbiterEntry->DeviceArbiterList);
arbiterEntry->ResourceType = resourceType;
arbiterEntry->Level = deviceNode->Level;
listHead = &deviceNode->DeviceArbiterList;
InsertTailList(listHead, &arbiterEntry->DeviceArbiterList);
arbiterEntry->ArbiterInterface = (PARBITER_INTERFACE)interface;
if (!interface) {

断点1:
断点2:

29 e Disable Clear 80ca128f [d:\srv03rtm\base\ntos\io\pnpmgr\pnpres.c @ 2701] 0001 (0001) nt!IopSetupArbiterAndTranslators+0x129
if (found == FALSE) {
translatorEntry = (PPI_RESOURCE_TRANSLATOR_ENTRY)ExAllocatePoolTE(
PagedPool | POOL_COLD_ALLOCATION,
sizeof(PI_RESOURCE_TRANSLATOR_ENTRY)); 断点2:
if (!translatorEntry) {
status = STATUS_INSUFFICIENT_RESOURCES;
return status;
}
translatorEntry->ResourceType = resourceType;
InitializeListHead(&translatorEntry->DeviceTranslatorList);
translatorEntry->TranslatorInterface = (PTRANSLATOR_INTERFACE)interface;
translatorEntry->DeviceNode = deviceNode;
listHead = &deviceNode->DeviceTranslatorList;
InsertTailList(listHead, &translatorEntry->DeviceTranslatorList);
if (!interface) {
断点2:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 0:55:07

创始人IP打造新范式:从单点内容到系统运营的跃迁|创客匠人

在知识经济时代&#xff0c;创始人IP已成为企业增长的核心引擎。然而&#xff0c;许多IP运营者陷入了一个普遍困境&#xff1a;内容越做越多&#xff0c;精力越耗越散&#xff0c;转化却始终上不去。这不是因为不够努力&#xff0c;而是因为还在用"工具层"思维运营IP…

作者头像 李华
网站建设 2026/7/1 7:42:29

Replica Dataset实战指南:从环境搭建到高级渲染的完整路径

Replica Dataset实战指南&#xff1a;从环境搭建到高级渲染的完整路径 【免费下载链接】Replica-Dataset The Replica Dataset v1 as published in https://arxiv.org/abs/1906.05797 . 项目地址: https://gitcode.com/gh_mirrors/re/Replica-Dataset Replica Dataset是…

作者头像 李华
网站建设 2026/7/1 7:41:44

探索xviewer.js:揭秘基于three.js的3D渲染框架实战指南

探索xviewer.js&#xff1a;揭秘基于three.js的3D渲染框架实战指南 【免费下载链接】www-genshin 项目地址: https://gitcode.com/GitHub_Trending/ww/www-genshin 3秒了解核心价值 xviewer.js就像3D开发界的"瑞士军刀"&#xff0c;以插件化架构为前端开发者…

作者头像 李华
网站建设 2026/7/2 16:44:51

探索基于 PLC 的码垛机械手控制系统

基于plc的码垛机械手控制系统&#xff0c;基于S7-1200的三轴机械臂搬运系统&#xff0c;基于博途plc的物料传送搬运码垛系统&#xff0c;S7-1200物料搬运博途编程。 包括仿真&#xff0c;图纸&#xff0c;报告等在自动化生产领域&#xff0c;码垛机械手控制系统的应用越来越广泛…

作者头像 李华
网站建设 2026/7/1 7:41:44

SQL中,防止除0错误

NULLIF(x, y) 是一个标准 SQL 函数&#xff0c;含义是&#xff1a; 如果 x y&#xff0c;则返回 NULL 否则返回 x例如&#xff1a;100 / NULLIF(CAST(b.zgzs AS DOUBLE), 0)

作者头像 李华