当前位置: 首页 > news >正文

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:

http://www.jsqmd.com/news/366151/

相关文章:

  • 机器人学习数据集构建实战指南:从架构设计到行业落地
  • 效率革命:FancyZones多屏协同的窗口管理技巧
  • 如何为不同规模选婚礼策划?2026年北京婚礼策划公司全面评测与推荐,直击定制与预算痛点 - 十大品牌推荐
  • 世界模型到底比大语言模型强在哪里?用一个小游戏项目说清楚
  • 2026!深圳新房艺术漆涂装房屋局改专业服务商权威推荐 文小墙居首成优选 - 品牌评测官
  • 高清图像煤矿传送带异物传输带上煤矿异物检测数据集VOC+YOLO格式784张1类别
  • 如何解锁Unity全功能?3个专业工具推荐与开发资源整合
  • 2026年北京婚礼策划公司推荐:基于行业认证与案例评价,直击品质与个性化核心痛点 - 十大品牌推荐
  • 2026国内企服平台推荐:赋能企业高质量发展的实用选择 - 品牌排行榜
  • smartmontools 7.5技术架构革新:从被动监测到主动预测的存储健康管理新范式
  • 模拟器构建实战指南:从环境搭建到性能优化的PCSX2全流程解析
  • DeepSeek-VL2模型定制化实战入门:从零开始打造专属视觉语言AI助手
  • 4个科学指南:如何通过TeslaMate实现电动车电池维护与续航优化
  • Claude Code终端编码助手安装配置指南
  • 2026年西安、咸阳等地口碑好的蛋糕西点培训学校推荐,专业培训全解析 - 工业设备
  • 【解决方案】跨设备加密相册:端到端加密的多平台数据同步方案
  • 2026四川房屋加固公司哪家好:房屋、桥梁、地基与裂缝修复哪家强 - 深度智识库
  • 颠覆式VRChat社交管理工具全攻略:重新定义虚拟社交体验
  • 气动冲片机
  • 2026年波波知了有什么服务?企业综合服务平台功能解析 - 品牌排行榜
  • 简单理解:非阻塞读取有哪些方法?
  • 3步掌握SharpShell开发:面向Windows扩展开发者的实践指南
  • Java小白求职互联网大厂:从Spring Boot到分布式缓存的面试场景
  • 工作流引擎集成实战指南:从BPMN前端开发到Camunda/Flowable全栈突破
  • 2026年有哪些值得关注的半导体展会?国内及国际知名展会推荐 - 品牌2025
  • 全网京东e卡回收权威合规平台有哪些 - 淘淘收小程序
  • 2026更新版!8个降AI率平台测评:研究生降AI率必备工具推荐
  • 2026年阿里云企业邮箱服务商推荐与选型指南 - 品牌2025
  • 2026年智能试剂出入库管理柜头部企业深度解析:技术实力与市场占有率双领先品牌盘点 - 品牌推荐大师
  • [特殊字符] 50行代码实现“总和守恒”数据脱敏算法|Data Lorem Ipsum:从作业分配到银行还款的万能神器