核心内容摘要
情感当“久操”成为一种艺术:深度连接的秘诀
ACPI!ACPIBuildProcessDevicePhaseSta函数对ISA的处理ACPI!ACPIDetectDuplicateHID1: kd tBreakpoint 5 hiteax00000008 ebx00000008 ecx89984198 edx00000001 esi89984188 edi80b019f4eipf73fb911 espf78aef68 ebpf78aef84 iopl0 nv up ei pl zr na pe nccs0008 ss0010 ds0023 es0023 fs0030 gs0000 efl00000246ACPI!ACPIBuildProcessGenericList0x4d:f73fb911 ff55f4 call dword ptr [ebp-0Ch] ss:0010:f78aef78{ACPI!ACPIBuildProcessDevicePhaseSta (f73fb72e)}1: kd teax00000008 ebx00000008 ecx89984198 edx00000001 esi89984188 edi80b019f4eipf73fb72e espf78aef64 ebpf78aef84 iopl0 nv up ei pl zr na pe nccs0008 ss0010 ds0023 es0023 fs0030 gs0000 efl00000246ACPI!ACPIBuildProcessDevicePhaseSta:f73fb72e 55 push ebp1: kd kc#00 ACPI!ACPIBuildProcessDevicePhaseSta01 ACPI!ACPIBuildProcessGenericList02 ACPI!ACPIBuildDeviceDpc03 nt!KiRetireDpcList04 nt!KiDispatchInterruptWARNING: Frame IP not in any known module. Following frames may be wrong.05 0x01: kd dvBuildRequest 0x89984188#define WORK_DONE_EJD WORK_DONE_STEP_6//// The next stage is to start running the _EJD//BuildRequest-NextWorkDone WORK_DONE_EJD;//// See if the device conforms to the ACPI specification for HIDs and UIDs// We do this at this point because we now know wether or not the device// is present or not and that is an important test because the OEM is// allowed to have 2 devices with the same HID/UID as long as both arent// present at the same time.//检查设备是否符合HIDs和UIDs的ACPI规范。
我们在此处进行此项测试因为我们现在已知设备是否存在这是一项重要测试//因为OEM可以有两台设备具有相同的HID/UID只要它们不同时存在即可ACPIDetectDuplicateHID(deviceExtension);This routine looks at all the sibling devices of the specifieddevice and determines if there are devices with duplicate HIDs andUIDs此例程会查看指定设备的所有同级设备并判断是否存在具有重复硬件标识符HID和唯一标识符UID的设备1: kd kc#00 ACPI!ACPIDetectDuplicateHID01 ACPI!ACPIBuildProcessDevicePhaseSta02 ACPI!ACPIBuildProcessGenericList03 ACPI!ACPIBuildDeviceDpc04 nt!KiRetireDpcList05 nt!KiDispatchInterruptWARNING: Frame IP not in any known module. Following frames may be wrong.06 0x01: kd dvDeviceExtension 0x899c0a88eled struct EXTENSIONLIST_ENUMDATA1: kd dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x899c0a
((ACPI!_DEVICE_EXTENSION *)0x899c0a
: 0x899c0a88 [Type: _DEVICE_EXTENSION *][0x000] Flags : 0x40100000000008 [Type: unsigned __int64][0x000] UFlags [Type: __unnamed][0x008] Signature : 0x5f534750 [Type: unsigned long][0x00c] DebugFlags : 0x0 [Type: unsigned long][0x010] DispatchTable : 0x0 [Type: IRP_DISPATCH_TABLE *][0x014] WorkContext [Type: WORK_QUEUE_CONTEXT][0x014] Fdo [Type: _FDO_DEVICE_EXTENSION][0x014] Filter [Type: _FILTER_DEVICE_EXTENSION][0x014] Pdo [Type: _PDO_DEVICE_EXTENSION][0x058] WorkQueue [Type: EXTENSION_WORKER][0x058] Button [Type: BUTTON_EXTENSION][0x058] Thermal [Type: THERMAL_EXTENSION][0x058] LinkNode [Type: LINK_NODE_EXTENSION][0x058] Dock [Type: DOCK_EXTENSION][0x058] Processor [Type: _PROCESSOR_DEVICE_EXTENSION][0x088] DeviceState : Stopped (
[Type: _ACPI_DEVICE_STATE][0x08c] PreviousState : Stopped (
[Type: _ACPI_DEVICE_STATE][0x090] PowerInfo [Type: _ACPI_POWER_INFO][0x10c] DeviceID : 0x70000 : Unable to read memory at Address 0x70000 [Type: unsigned char *][0x10c] Address : 0x70000 [Type: unsigned long][0x110] InstanceID : 0x0 [Type: unsigned char *][0x114] ResourceList : 0x0 [Type: _CM_RESOURCE_LIST *][0x118] PnpResourceList : 0x0 [Type: _ObjData *][0x11c] OutstandingIrpCount : 1 [Type: long][0x120] ReferenceCount : 52 [Type: long][0x124] HibernatePathCount : 0 [Type: long][0x128] RemoveEvent : 0x0 [Type: _KEVENT *][0x12c] AcpiObject : 0x899b2278 [Type: _NSObj *][0x130] DeviceObject : 0x0 [Type: _DEVICE_OBJECT *][0x134] TargetDeviceObject : 0x0 [Type: _DEVICE_OBJECT *][0x138] PhysicalDeviceObject : 0x0 [Type: _DEVICE_OBJECT *][0x13c] ParentExtension : 0x899c0d58 [Type: _DEVICE_EXTENSION *][0x140] ChildDeviceList [Type: _LIST_ENTRY][0x148] SiblingDeviceList [Type: _LIST_ENTRY][0x150] EjectDeviceHead [Type: _LIST_ENTRY][0x158] EjectDeviceList [Type: _LIST_ENTRY]1: kd db 0x899b2278899b2278 bc 21 9b 89 68 3c 9b 89-ac ff 9a 89 bc 22 9b 89 .!..h.........899b2288 49 53 41 5f 30 f3 9a
22 9b 89 00 00 06 00 ISA_
..
.....899b2298 00 00 00 00 00 00 00
00 00 00 00 00 00 00 ................899b22a8 88 0a 9c 89 00 00 00
4e 53 4f 44 00 00 00 ........HNSOD...899b22b8 00 f0 9a 89 0c e5 9b
23 9b 89 78 22 9b 89 .........#..x..899b22c8 00 00 00 00 5f 41 44
f3 9a 89 78 22 9b 89 ...._ADR
..x..899b22d8 00 00 01 00 00 00 00
00 07 00 00 00 00 00 ................899b22e8 00 00 00 00 00 00 00
00 00 00 48 4e 53 4f ............HNSO1: kd dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x899c0d
((ACPI!_DEVICE_EXTENSION *)0x899c0d
: 0x899c0d58 [Type: _DEVICE_EXTENSION *][0x000] Flags : 0x40200002000008 [Type: unsigned __int64][0x000] UFlags [Type: __unnamed][0x008] Signature : 0x5f534750 [Type: unsigned long][0x00c] DebugFlags : 0x0 [Type: unsigned long][0x010] DispatchTable : 0x0 [Type: IRP_DISPATCH_TABLE *][0x014] WorkContext [Type: WORK_QUEUE_CONTEXT][0x014] Fdo [Type: _FDO_DEVICE_EXTENSION][0x014] Filter [Type: _FILTER_DEVICE_EXTENSION][0x014] Pdo [Type: _PDO_DEVICE_EXTENSION][0x058] WorkQueue [Type: EXTENSION_WORKER][0x058] Button [Type: BUTTON_EXTENSION][0x058] Thermal [Type: THERMAL_EXTENSION][0x058] LinkNode [Type: LINK_NODE_EXTENSION][0x058] Dock [Type: DOCK_EXTENSION][0x058] Processor [Type: _PROCESSOR_DEVICE_EXTENSION][0x088] DeviceState : Stopped (
[Type: _ACPI_DEVICE_STATE][0x08c] PreviousState : Stopped (
[Type: _ACPI_DEVICE_STATE][0x090] PowerInfo [Type: _ACPI_POWER_INFO][0x10c] DeviceID : 0x899c1148 : 0x41 [Type: unsigned char *][0x10c] Address : 0x899c1148 [Type: unsigned long][0x110] InstanceID : 0x0 [Type: unsigned char *][0x114] ResourceList : 0x0 [Type: _CM_RESOURCE_LIST *][0x118] PnpResourceList : 0x0 [Type: _ObjData *][0x11c] OutstandingIrpCount : 1 [Type: long][0x120] ReferenceCount : 82 [Type: long][0x124] HibernatePathCount : 0 [Type: long][0x128] RemoveEvent : 0x0 [Type: _KEVENT *][0x12c] AcpiObject : 0x899affac [Type: _NSObj *][0x130] DeviceObject : 0x0 [Type: _DEVICE_OBJECT *][0x134] TargetDeviceObject : 0x0 [Type: _DEVICE_OBJECT *][0x138] PhysicalDeviceObject : 0x0 [Type: _DEVICE_OBJECT *][0x13c] ParentExtension : 0x89981a18 [Type: _DEVICE_EXTENSION *][0x140] ChildDeviceList [Type: _LIST_ENTRY][0x148] SiblingDeviceList [Type: _LIST_ENTRY][0x150] EjectDeviceHead [Type: _LIST_ENTRY][0x158] EjectDeviceList [Type: _LIST_ENTRY]1: kd db 0x899affac899affac 4c ff 9a 89 ac 40 9b 89-f0 f0 9a 89 24 00 9b 89 L..........$...899affbc 50 43 49 30 30 f3 9a
c ff 9a 89 00 00 06 00 PCI
..L.......899affcc 00 00 00 00 00 00 00
00 00 00 00 00 00 00 ................899affdc 58 0d 9c 89 00 00 00
4f 52 47 34 00 00 00 X.......HORG
..899affec 00 f0 9a 89 50 00 00
00 00 00 02 00 00 00 ....P...
......899afffc 00 00 00 00 00 00 00
00 00 00 00 00 00 00 ................899b000c 00 00 00 00 00 00 00
00 00 00 48 4e 53 4f ............HNSO899b001c 44 00 00 00 00 f0 9a
a0 91 89 68 00 9b 89 D.......d...h...1: kd db 0x899c1148899c1148 41 43 50 49 5c 50 4e
41 30 33 00 00 00 00 ACPI\PNP0A
...PDEVICE_EXTENSION parentExtension DeviceExtension-ParentExtension; ebx899c0d58//// Is this the root of the device tree?//if (parentExtension NULL) {return;}1: kd peax00000000 ebx899c0d58 ecx80ae0dfa edx80b18958 esi89984188 edi899c0a88eipf73ffa75 espf78aef2c ebpf78aef4c iopl0 nv up ei ng nz na po nccs0008 ss0010 ds0023 es0023 fs0030 gs0000 efl00000282ACPI!ACPIDetectDuplicateHID0x11:f73ffa75 85db test ebx,ebx//// Do we fail to eject a PDO for this device? Or does this device not have// an _HID? 这个设备没有HID//if ( (DeviceExtension-Flags DEV_TYPE_NEVER_PRESENT) ||(DeviceExtension-Flags DEV_MASK_NOT_PRESENT) ||!(DeviceExtension-Flags DEV_MASK_HID) ) {return; //直接返回了。
}#define DEV_TYPE_NEVER_PRESENT 0x0000000000000001#define DEV_TYPE_NOT_PRESENT 0x0000000000000002#define DEV_PROP_FAILED_INIT 0x00020000 00000000#define DEV_MASK_NOT_PRESENT (DEV_TYPE_NOT_PRESENT | DEV_PROP_FAILED_INIT)#define DEV_MASK_HID (DEV_PROP_HID | DEV_PROP_FIXED_HID)#define DEV_PROP_HID 0x00002000 00000000#define DEV_PROP_FIXED_HID 0x00008000 00000000Device (ISA){Name (_ADR, 0x