📄 testpnp.cod
字号:
_TEXT ENDS
PUBLIC _Test98_PnPRemove@8
; COMDAT _Test98_PnPRemove@8
_TEXT SEGMENT
_Device$ = 8
_PdoData$ = 12
_Test98_PnPRemove@8 PROC NEAR ; COMDAT
; 463 : {
00000 55 push ebp
00001 8b ec mov ebp, esp
00003 53 push ebx
00004 56 push esi
00005 57 push edi
; 464 : PdoData->Removed = TRUE;
00006 8b 45 0c mov eax, DWORD PTR _PdoData$[ebp]
00009 c6 40 1b 01 mov BYTE PTR [eax+27], 1
; 465 :
; 466 : //
; 467 : // Complete any outsanding requests with STATUS_DELETE_PENDING.
; 468 : //
; 469 : if (PdoData->Attached) {
0000d 8b 45 0c mov eax, DWORD PTR _PdoData$[ebp]
00010 33 c9 xor ecx, ecx
00012 8a 48 1a mov cl, BYTE PTR [eax+26]
00015 85 c9 test ecx, ecx
00017 0f 84 07 00 00
00 je $L2860
; 470 : return STATUS_SUCCESS;
0001d 33 c0 xor eax, eax
0001f e9 1e 00 00 00 jmp $L2859
$L2860:
; 471 : }
; 472 :
; 473 : //
; 474 : // Free any resources.
; 475 : //
; 476 : ExFreePool (PdoData->HardwareIDs);
00024 8b 45 0c mov eax, DWORD PTR _PdoData$[ebp]
00027 8b 40 14 mov eax, DWORD PTR [eax+20]
0002a 50 push eax
0002b ff 15 00 00 00
00 call DWORD PTR __imp__ExFreePool@4
; 477 :
; 478 : Test98_KdPrint(PdoData, TEST_DBG_PNP_INFO,
; 479 : ("IoDeleteDevice2: 0x%x\n", Device));
; 480 : IoDeleteDevice (Device);
00031 8b 45 08 mov eax, DWORD PTR _Device$[ebp]
00034 50 push eax
00035 ff 15 00 00 00
00 call DWORD PTR __imp__IoDeleteDevice@4
; 481 : return STATUS_SUCCESS;
0003b 33 c0 xor eax, eax
0003d e9 00 00 00 00 jmp $L2859
$L2859:
; 482 : }
00042 5f pop edi
00043 5e pop esi
00044 5b pop ebx
00045 c9 leave
00046 c2 08 00 ret 8
_Test98_PnPRemove@8 ENDP
_TEXT ENDS
EXTRN __imp__MmMapIoSpace@16:NEAR
; COMDAT _Test98_StartFdo@12
_TEXT SEGMENT
_FdoData$ = 8
_PartialResourceList$ = 12
_PartialResourceListTranslated$ = 16
_i$ = -12
_status$ = -16
_resource$ = -4
_resourceTrans$ = -8
_Test98_StartFdo@12 PROC NEAR ; COMDAT
; 495 : {
00000 55 push ebp
00001 8b ec mov ebp, esp
00003 83 ec 18 sub esp, 24 ; 00000018H
00006 53 push ebx
00007 56 push esi
00008 57 push edi
; 496 : ULONG i;
; 497 : NTSTATUS status = STATUS_SUCCESS;
00009 c7 45 f0 00 00
00 00 mov DWORD PTR _status$[ebp], 0
; 498 : PCM_PARTIAL_RESOURCE_DESCRIPTOR resource;
; 499 : PCM_PARTIAL_RESOURCE_DESCRIPTOR resourceTrans;
; 500 :
; 501 : Test98_KdPrint (FdoData, TEST_DBG_PNP_TRACE, ("StartFdo\n"));
; 502 :
; 503 : for (i = 0,
; 504 : resource = &PartialResourceList->PartialDescriptors[0],
; 505 : resourceTrans = &PartialResourceListTranslated->PartialDescriptors[0];
; 506 :
; 507 : i < PartialResourceList->Count && NT_SUCCESS(status);
; 508 : i++, resource++, resourceTrans++) {
00010 c7 45 f4 00 00
00 00 mov DWORD PTR _i$[ebp], 0
00017 8b 45 0c mov eax, DWORD PTR _PartialResourceList$[ebp]
0001a 83 c0 08 add eax, 8
0001d 89 45 fc mov DWORD PTR _resource$[ebp], eax
00020 8b 45 10 mov eax, DWORD PTR _PartialResourceListTranslated$[ebp]
00023 83 c0 08 add eax, 8
00026 89 45 f8 mov DWORD PTR _resourceTrans$[ebp], eax
00029 e9 0b 00 00 00 jmp $L2869
$L2870:
0002e ff 45 f4 inc DWORD PTR _i$[ebp]
00031 83 45 fc 10 add DWORD PTR _resource$[ebp], 16 ; 00000010H
00035 83 45 f8 10 add DWORD PTR _resourceTrans$[ebp], 16 ; 00000010H
$L2869:
00039 8b 45 0c mov eax, DWORD PTR _PartialResourceList$[ebp]
0003c 8b 4d f4 mov ecx, DWORD PTR _i$[ebp]
0003f 39 48 04 cmp DWORD PTR [eax+4], ecx
00042 0f 86 0e 01 00
00 jbe $L2871
00048 83 7d f0 00 cmp DWORD PTR _status$[ebp], 0
0004c 0f 8c 04 01 00
00 jl $L2871
; 509 :
; 510 : switch (resource->Type) {
00052 8b 45 fc mov eax, DWORD PTR _resource$[ebp]
00055 33 c9 xor ecx, ecx
00057 8a 08 mov cl, BYTE PTR [eax]
00059 89 4d ec mov DWORD PTR -20+[ebp], ecx
0005c e9 d7 00 00 00 jmp $L2872
$L2876:
; 511 : case CmResourceTypePort:
; 512 :
; 513 : FdoData->PhysicalAddress = resource->u.Port.Start;
00061 8b 45 fc mov eax, DWORD PTR _resource$[ebp]
00064 83 c0 04 add eax, 4
00067 8b 08 mov ecx, DWORD PTR [eax]
00069 8b 40 04 mov eax, DWORD PTR [eax+4]
0006c 8b 55 08 mov edx, DWORD PTR _FdoData$[ebp]
0006f 83 c2 60 add edx, 96 ; 00000060H
00072 89 0a mov DWORD PTR [edx], ecx
00074 89 42 04 mov DWORD PTR [edx+4], eax
; 514 : Test98_KdPrint (FdoData, TEST_DBG_PNP_INFO,
; 515 : ("HardwareResource: Port (%x) ->",
; 516 : FdoData->PhysicalAddress.LowPart));
; 517 :
; 518 : switch (resourceTrans->Type) {
00077 8b 45 f8 mov eax, DWORD PTR _resourceTrans$[ebp]
0007a 33 c9 xor ecx, ecx
0007c 8a 08 mov cl, BYTE PTR [eax]
0007e 89 4d e8 mov DWORD PTR -24+[ebp], ecx
00081 e9 44 00 00 00 jmp $L2877
$L2881:
; 519 : case CmResourceTypePort:
; 520 :
; 521 : ASSERT (1 == resourceTrans->u.Port.Length);
; 522 :
; 523 : // Nothing to do here but note the address;
; 524 : FdoData->TestPortAddress =
; 525 : (PVOID) resourceTrans->u.Port.Start.LowPart;
00086 8b 45 f8 mov eax, DWORD PTR _resourceTrans$[ebp]
00089 8b 40 04 mov eax, DWORD PTR [eax+4]
0008c 8b 4d 08 mov ecx, DWORD PTR _FdoData$[ebp]
0008f 89 41 68 mov DWORD PTR [ecx+104], eax
; 526 :
; 527 : break;
00092 e9 4c 00 00 00 jmp $L2878
$L2882:
; 528 :
; 529 : case CmResourceTypeMemory:
; 530 : //
; 531 : // We need to map the memory
; 532 : //
; 533 :
; 534 : ASSERT (1 == resourceTrans->u.Memory.Length);
; 535 :
; 536 : FdoData->TestPortAddress =
; 537 : MmMapIoSpace (resourceTrans->u.Memory.Start,
; 538 : resourceTrans->u.Memory.Length,
; 539 : MmNonCached);
00097 6a 00 push 0
00099 8b 45 f8 mov eax, DWORD PTR _resourceTrans$[ebp]
0009c 8b 40 0c mov eax, DWORD PTR [eax+12]
0009f 50 push eax
000a0 8b 45 f8 mov eax, DWORD PTR _resourceTrans$[ebp]
000a3 83 c0 04 add eax, 4
000a6 8b 08 mov ecx, DWORD PTR [eax]
000a8 8b 40 04 mov eax, DWORD PTR [eax+4]
000ab 50 push eax
000ac 51 push ecx
000ad ff 15 00 00 00
00 call DWORD PTR __imp__MmMapIoSpace@16
000b3 8b 4d 08 mov ecx, DWORD PTR _FdoData$[ebp]
000b6 89 41 68 mov DWORD PTR [ecx+104], eax
; 540 :
; 541 :
; 542 : FdoData->MappedPorts = TRUE;
000b9 8b 45 08 mov eax, DWORD PTR _FdoData$[ebp]
000bc c6 40 18 01 mov BYTE PTR [eax+24], 1
; 543 :
; 544 : Test98_KdPrint_Cont (FdoData, TEST_DBG_PNP_INFO,
; 545 : ("Mem: (%x)\n", FdoData->TestPortAddress));
; 546 : break;
000c0 e9 1e 00 00 00 jmp $L2878
$L2883:
; 547 :
; 548 : default:
; 549 : Test98_KdPrint_Cont (FdoData, TEST_DBG_PNP_INFO,
; 550 : ("Unknown \n", FdoData->TestPortAddress));
; 551 :
; 552 : }
000c5 e9 19 00 00 00 jmp $L2878
$L2877:
000ca 83 7d e8 01 cmp DWORD PTR -24+[ebp], 1
000ce 0f 84 b2 ff ff
ff je $L2881
000d4 83 7d e8 03 cmp DWORD PTR -24+[ebp], 3
000d8 0f 84 b9 ff ff
ff je $L2882
000de e9 00 00 00 00 jmp $L2878
$L2878:
; 553 :
; 554 : break;
000e3 e9 69 00 00 00 jmp $L2873
$L2884:
; 555 :
; 556 : case CmResourceTypeMemory:
; 557 :
; 558 : ASSERT (CmResourceTypeMemory == resourceTrans->Type);
; 559 :
; 560 : FdoData->PhysicalAddress = resource->u.Memory.Start;
000e8 8b 45 fc mov eax, DWORD PTR _resource$[ebp]
000eb 83 c0 04 add eax, 4
000ee 8b 08 mov ecx, DWORD PTR [eax]
000f0 8b 40 04 mov eax, DWORD PTR [eax+4]
000f3 8b 55 08 mov edx, DWORD PTR _FdoData$[ebp]
000f6 83 c2 60 add edx, 96 ; 00000060H
000f9 89 0a mov DWORD PTR [edx], ecx
000fb 89 42 04 mov DWORD PTR [edx+4], eax
; 561 : FdoData->TestPortAddress =
; 562 : MmMapIoSpace (resourceTrans->u.Memory.Start,
; 563 : resourceTrans->u.Memory.Length,
; 564 : MmNonCached);
000fe 6a 00 push 0
00100 8b 45 f8 mov eax, DWORD PTR _resourceTrans$[ebp]
00103 8b 40 0c mov eax, DWORD PTR [eax+12]
00106 50 push eax
00107 8b 45 f8 mov eax, DWORD PTR _resourceTrans$[ebp]
0010a 83 c0 04 add eax, 4
0010d 8b 08 mov ecx, DWORD PTR [eax]
0010f 8b 40 04 mov eax, DWORD PTR [eax+4]
00112 50 push eax
00113 51 push ecx
00114 ff 15 00 00 00
00 call DWORD PTR __imp__MmMapIoSpace@16
0011a 8b 4d 08 mov ecx, DWORD PTR _FdoData$[ebp]
0011d 89 41 68 mov DWORD PTR [ecx+104], eax
; 565 :
; 566 : FdoData->MappedPorts = TRUE;
00120 8b 45 08 mov eax, DWORD PTR _FdoData$[ebp]
00123 c6 40 18 01 mov BYTE PTR [eax+24], 1
; 567 :
; 568 : ASSERT (1 == resource->u.Memory.Length);
; 569 :
; 570 : Test98_KdPrint (FdoData, TEST_DBG_PNP_INFO,
; 571 : ("HardwareResource: Memory (%x) -> Mem (%x)",
; 572 : FdoData->PhysicalAddress.LowPart,
; 573 : FdoData->TestPortAddress));
; 574 :
; 575 : break;
00127 e9 25 00 00 00 jmp $L2873
$L2885:
; 576 :
; 577 : case CmResourceTypeInterrupt:
; 578 : default:
; 579 :
; 580 : Test98_KdPrint (FdoData, TEST_DBG_PNP_ERROR,
; 581 : ("Unhandled resource type (0x%x)\n",
; 582 : resource->Type));
; 583 : status = STATUS_UNSUCCESSFUL;
0012c c7 45 f0 01 00
00 c0 mov DWORD PTR _status$[ebp], -1073741823 ; c0000001H
; 584 : }
00133 e9 19 00 00 00 jmp $L2873
$L2872:
00138 83 7d ec 01 cmp DWORD PTR -20+[ebp], 1
0013c 0f 84 1f ff ff
ff je $L2876
00142 83 7d ec 03 cmp DWORD PTR -20+[ebp], 3
00146 0f 84 9c ff ff
ff je $L2884
0014c e9 db ff ff ff jmp $L2885
$L2873:
; 585 : }
00151 e9 d8 fe ff ff jmp $L2870
$L2871:
; 586 : return status;
00156 8b 45 f0 mov eax, DWORD PTR _status$[ebp]
00159 e9 00 00 00 00 jmp $L2864
$L2864:
; 587 : }
0015e 5f pop edi
0015f 5e pop esi
00160 5b pop ebx
00161 c9 leave
00162 c2 0c 00 ret 12 ; 0000000cH
_Test98_StartFdo@12 ENDP
_TEXT ENDS
PUBLIC _Test98_Remove@8
EXTRN __imp__IoInvalidateDeviceRelations@8:NEAR
EXTRN __imp_@KfAcquireSpinLock@4:NEAR
EXTRN __imp_@KfReleaseSpinLock@8:NEAR
; COMDAT _Test98_Remove@8
_TEXT SEGMENT
_Remove$ = 8
_FdoData$ = 12
_irql$ = -4
_entry$ = -8
_pdoData$ = -20
_found$ = -16
_handle$ = -12
__EX_Blink$2899 = -28
__EX_Flink$2900 = -24
_Test98_Remove@8 PROC NEAR ; COMDAT
; 599 : {
00000 55 push ebp
00001 8b ec mov ebp, esp
00003 83 ec 1c sub esp, 28 ; 0000001cH
00006 53 push ebx
00007 56 push esi
00008 57 push edi
; 600 : KIRQL irql;
; 601 : PLIST_ENTRY entry;
; 602 : PPDO_DEVICE_DATA pdoData;
; 603 : BOOLEAN found = FALSE;
00009 c6 45 f0 00 mov BYTE PTR _found$[ebp], 0
; 604 : PVOID handle = NULL;
0000d c7 45 f4 00 00
00 00 mov DWORD PTR _handle$[ebp], 0
; 605 :
; 606 : KeAcquireSpinLock (&FdoData->Spin, &irql);
00014 8b 4d 0c mov ecx, DWORD PTR _FdoData$[ebp]
00017 83 c1 14 add ecx, 20 ; 00000014H
0001a ff 15 00 00 00
00 call DWORD PTR __imp_@KfAcquireSpinLock@4
00020 88 45 fc mov BYTE PTR _irql$[ebp], al
; 607 :
; 608 : for (entry = FdoData->PDOs.Flink;
; 609 : entry != &FdoData->PDOs;
; 610 : entry = entry->Flink) {
00023 8b 45 0c mov eax, DWORD PTR _FdoData$[ebp]
00026 8b 40 1c mov eax, DWORD PTR [eax+28]
00029 89 45 f8 mov DWORD PTR _entry$[ebp], eax
0002c e9 08 00 00 00 jmp $L2894
$L2895:
00031 8b 45 f8 mov eax, DWORD PTR _entry$[ebp]
00034 8b 00 mov eax, DWORD PTR [eax]
00036 89 45 f8 mov DWORD PTR _entry$[ebp], eax
$L2894:
00039 8b 45 0c mov eax, DWORD PTR _FdoData$[ebp]
0003c 83 c0 1c add eax, 28 ; 0000001cH
0003f 3b 45 f8 cmp eax, DWORD PTR _entry$[ebp]
00042 0f 84 63 00 00
00 je $L2896
; 611 :
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -