📄 pnp.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.00.9178
TITLE .\pnp.c
.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT PARA USE32 PUBLIC 'BSS'
_BSS ENDS
$$SYMBOLS SEGMENT BYTE USE32 'DEBSYM'
$$SYMBOLS ENDS
$$TYPES SEGMENT BYTE USE32 'DEBTYP'
$$TYPES ENDS
_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS ENDS
; COMDAT ??_C@_07HJLKKEON@STOPPED?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_07DKDIHBMC@WORKING?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0M@NGFJOEFI@PENDINGSTOP?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0O@CMHNAAAF@PENDINGREMOVE?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BA@FPDANPCF@SURPRISEREMOVED?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_07POKKMNIN@REMOVED?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_07NFANNNEC@UNKNOWN?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT _RamDiskAddDevice@8
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _RamDiskDispatchPnp@8
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _RamDiskDispatchPower@8
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _RamDiskDispatchSystemControl@8
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _RamDiskIoCompletionRoutine@12
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _RamDiskCleanUp@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _RamDiskRemoveDevice@8
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _GetPnpIrpName@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
INCLUDELIB LIBC
INCLUDELIB OLDNAMES
PUBLIC _StateTable
PUBLIC ??_C@_07HJLKKEON@STOPPED?$AA@ ; `string'
PUBLIC ??_C@_07DKDIHBMC@WORKING?$AA@ ; `string'
PUBLIC ??_C@_0M@NGFJOEFI@PENDINGSTOP?$AA@ ; `string'
PUBLIC ??_C@_0O@CMHNAAAF@PENDINGREMOVE?$AA@ ; `string'
PUBLIC ??_C@_0BA@FPDANPCF@SURPRISEREMOVED?$AA@ ; `string'
PUBLIC ??_C@_07POKKMNIN@REMOVED?$AA@ ; `string'
PUBLIC ??_C@_07NFANNNEC@UNKNOWN?$AA@ ; `string'
; COMDAT ??_C@_07HJLKKEON@STOPPED?$AA@
CONST SEGMENT
??_C@_07HJLKKEON@STOPPED?$AA@ DB 'STOPPED', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_07DKDIHBMC@WORKING?$AA@
CONST SEGMENT
??_C@_07DKDIHBMC@WORKING?$AA@ DB 'WORKING', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0M@NGFJOEFI@PENDINGSTOP?$AA@
CONST SEGMENT
??_C@_0M@NGFJOEFI@PENDINGSTOP?$AA@ DB 'PENDINGSTOP', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0O@CMHNAAAF@PENDINGREMOVE?$AA@
CONST SEGMENT
??_C@_0O@CMHNAAAF@PENDINGREMOVE?$AA@ DB 'PENDINGREMOVE', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BA@FPDANPCF@SURPRISEREMOVED?$AA@
CONST SEGMENT
??_C@_0BA@FPDANPCF@SURPRISEREMOVED?$AA@ DB 'SURPRISEREMOVED', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_07POKKMNIN@REMOVED?$AA@
CONST SEGMENT
??_C@_07POKKMNIN@REMOVED?$AA@ DB 'REMOVED', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_07NFANNNEC@UNKNOWN?$AA@
CONST SEGMENT
??_C@_07NFANNNEC@UNKNOWN?$AA@ DB 'UNKNOWN', 00H ; `string'
CONST ENDS
_DATA SEGMENT
_StateTable DD FLAT:??_C@_07HJLKKEON@STOPPED?$AA@
DD FLAT:??_C@_07DKDIHBMC@WORKING?$AA@
DD FLAT:??_C@_0M@NGFJOEFI@PENDINGSTOP?$AA@
DD FLAT:??_C@_0O@CMHNAAAF@PENDINGREMOVE?$AA@
DD FLAT:??_C@_0BA@FPDANPCF@SURPRISEREMOVED?$AA@
DD FLAT:??_C@_07POKKMNIN@REMOVED?$AA@
DD FLAT:??_C@_07NFANNNEC@UNKNOWN?$AA@
_DATA ENDS
PUBLIC _RamDiskDispatchPower@8
EXTRN __imp__PoCallDriver@8:NEAR
EXTRN __imp__PoStartNextPowerIrp@4:NEAR
EXTRN __imp_@IofCompleteRequest@8:NEAR
; Function compile flags: /Ogsy
; File f:\winddk\2600\src\storage\ramdisk\sys\pnp.c
; COMDAT _RamDiskDispatchPower@8
_TEXT SEGMENT
_DeviceObject$ = 8
_Irp$ = 12
_RamDiskDispatchPower@8 PROC NEAR ; COMDAT
; 427 : PDEVICE_EXTENSION devExt;
; 428 : NTSTATUS status = STATUS_SUCCESS;
; 429 :
; 430 : PAGED_CODE();
; 431 :
; 432 : DBGPRINT( DBG_COMP_POWER, DBG_LEVEL_VERBOSE, ("DispatchPower - IN. Fdo=(%p) Irp=(%p)\n",
; 433 : DeviceObject, Irp ) );
; 434 : devExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
00000 8b 44 24 04 mov eax, DWORD PTR _DeviceObject$[esp-4]
00004 56 push esi
; 435 :
; 436 : //
; 437 : // If the device has been removed, the driver should not pass
; 438 : // the IRP down to the next lower driver.
; 439 : //
; 440 :
; 441 : if ( devExt->DevState == REMOVED) {
; 442 : PoStartNextPowerIrp( Irp );
00005 8b 74 24 0c mov esi, DWORD PTR _Irp$[esp]
00009 57 push edi
0000a 8b 78 28 mov edi, DWORD PTR [eax+40]
0000d 83 7f 0c 05 cmp DWORD PTR [edi+12], 5
00011 56 push esi
00012 75 20 jne SHORT $L14525
00014 ff 15 00 00 00
00 call DWORD PTR __imp__PoStartNextPowerIrp@4
; 443 : status = STATUS_DELETE_PENDING;
; 444 : COMPLETE_REQUEST( Irp, status, 0 );
0001a 83 66 1c 00 and DWORD PTR [esi+28], 0
0001e bf 56 00 00 c0 mov edi, -1073741738 ; c0000056H
00023 32 d2 xor dl, dl
00025 8b ce mov ecx, esi
00027 89 7e 18 mov DWORD PTR [esi+24], edi
0002a ff 15 00 00 00
00 call DWORD PTR __imp_@IofCompleteRequest@8
; 445 : return status;
00030 8b c7 mov eax, edi
00032 eb 17 jmp SHORT $L14519
$L14525:
; 446 : }
; 447 :
; 448 : PoStartNextPowerIrp( Irp );
00034 ff 15 00 00 00
00 call DWORD PTR __imp__PoStartNextPowerIrp@4
; 449 : IoSkipCurrentIrpStackLocation( Irp );
0003a fe 46 23 inc BYTE PTR [esi+35]
0003d 83 46 60 24 add DWORD PTR [esi+96], 36 ; 00000024H
; 450 :
; 451 : DBGPRINT( DBG_COMP_POWER, DBG_LEVEL_VERBOSE, ("DispatchPower - OUT.\n" ) );
; 452 :
; 453 : return PoCallDriver( devExt->LowerDeviceObject, Irp );
00041 56 push esi
00042 ff 77 04 push DWORD PTR [edi+4]
00045 ff 15 00 00 00
00 call DWORD PTR __imp__PoCallDriver@8
$L14519:
0004b 5f pop edi
0004c 5e pop esi
; 454 :
; 455 : } // End of RamDiskDispatchPower()
0004d c2 08 00 ret 8
_RamDiskDispatchPower@8 ENDP
_TEXT ENDS
PUBLIC _RamDiskDispatchSystemControl@8
EXTRN __imp_@IofCallDriver@8:NEAR
; Function compile flags: /Ogsy
; COMDAT _RamDiskDispatchSystemControl@8
_TEXT SEGMENT
_DeviceObject$ = 8
_Irp$ = 12
_RamDiskDispatchSystemControl@8 PROC NEAR ; COMDAT
; 480 : PDEVICE_EXTENSION devExt;
; 481 :
; 482 : PAGED_CODE();
; 483 :
; 484 : DBGPRINT( DBG_COMP_WMI, DBG_LEVEL_VERBOSE, ("DispatchSystemControl - IN. Fdo=(%p) Irp=(%p)\n",
; 485 : DeviceObject, Irp ) );
; 486 :
; 487 : devExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
; 488 : IoSkipCurrentIrpStackLocation( Irp );
00000 8b 54 24 08 mov edx, DWORD PTR _Irp$[esp-4]
00004 8b 44 24 04 mov eax, DWORD PTR _DeviceObject$[esp-4]
00008 8b 40 28 mov eax, DWORD PTR [eax+40]
0000b fe 42 23 inc BYTE PTR [edx+35]
0000e 83 42 60 24 add DWORD PTR [edx+96], 36 ; 00000024H
; 489 : DBGPRINT( DBG_COMP_WMI, DBG_LEVEL_VERBOSE, ("DispatchSystemControl - OUT.\n" ) );
; 490 : return IoCallDriver( devExt->LowerDeviceObject, Irp );
00012 8b 48 04 mov ecx, DWORD PTR [eax+4]
00015 ff 15 00 00 00
00 call DWORD PTR __imp_@IofCallDriver@8
; 491 :
; 492 : } // End of RamDiskDispatchSystemControl()
0001b c2 08 00 ret 8
_RamDiskDispatchSystemControl@8 ENDP
_TEXT ENDS
PUBLIC _RamDiskIoCompletionRoutine@12
EXTRN __imp__KeSetEvent@12:NEAR
; Function compile flags: /Ogsy
; COMDAT _RamDiskIoCompletionRoutine@12
_TEXT SEGMENT
_DeviceObject$ = 8
_Irp$ = 12
_Event$ = 16
_RamDiskIoCompletionRoutine@12 PROC NEAR ; COMDAT
; 520 :
; 521 : KeSetEvent( Event, 0, FALSE );
00000 6a 00 push 0
00002 6a 00 push 0
00004 ff 74 24 14 push DWORD PTR _Event$[esp+4]
00008 ff 15 00 00 00
00 call DWORD PTR __imp__KeSetEvent@12
; 522 : return STATUS_MORE_PROCESSING_REQUIRED;
0000e b8 16 00 00 c0 mov eax, -1073741802 ; c0000016H
; 523 :
; 524 : } // End of RamDiskIoCompletionRoutine()
00013 c2 0c 00 ret 12 ; 0000000cH
_RamDiskIoCompletionRoutine@12 ENDP
_TEXT ENDS
PUBLIC _RamDiskCleanUp@4
EXTRN __imp__IoDeleteDevice@4:NEAR
EXTRN __imp__IoDeleteSymbolicLink@4:NEAR
EXTRN __imp__IoDetachDevice@4:NEAR
EXTRN __imp__ExFreePoolWithTag@8:NEAR
; Function compile flags: /Ogsy
; COMDAT _RamDiskCleanUp@4
_TEXT SEGMENT
_DeviceObject$ = 8
_RamDiskCleanUp@4 PROC NEAR ; COMDAT
; 548 : {
00000 53 push ebx
; 549 :
; 550 : PDEVICE_EXTENSION devExt = DeviceObject->DeviceExtension;
00001 8b 5c 24 08 mov ebx, DWORD PTR _DeviceObject$[esp]
00005 56 push esi
00006 8b 73 28 mov esi, DWORD PTR [ebx+40]
; 551 :
; 552 : PAGED_CODE();
; 553 : DBGPRINT( DBG_COMP_PNP, DBG_LEVEL_VERBOSE, ("RamDiskCleanUp\n" ) );
; 554 :
; 555 : if ( devExt->Flags & FLAG_LINK_CREATED ) {
00009 f6 46 28 01 test BYTE PTR [esi+40], 1
0000d 74 0a je SHORT $L14552
; 556 : IoDeleteSymbolicLink( &devExt->SymbolicLink );
0000f 8d 46 5c lea eax, DWORD PTR [esi+92]
00012 50 push eax
00013 ff 15 00 00 00
00 call DWORD PTR __imp__IoDeleteSymbolicLink@4
$L14552:
; 557 : }
; 558 : if ( devExt->SymbolicLink.Buffer ) {
00019 8b 46 60 mov eax, DWORD PTR [esi+96]
0001c 85 c0 test eax, eax
0001e 57 push edi
0001f 8b 3d 00 00 00
00 mov edi, DWORD PTR __imp__ExFreePoolWithTag@8
00025 74 05 je SHORT $L14553
; 559 : ExFreePool( devExt->SymbolicLink.Buffer );
00027 6a 00 push 0
00029 50 push eax
0002a ff d7 call edi
$L14553:
; 560 : }
; 561 : if ( devExt->DiskRegInfo.DriveLetter.Buffer ) {
0002c 8b 46 58 mov eax, DWORD PTR [esi+88]
0002f 85 c0 test eax, eax
00031 74 05 je SHORT $L14554
; 562 : ExFreePool( devExt->DiskRegInfo.DriveLetter.Buffer );
00033 6a 00 push 0
00035 50 push eax
00036 ff d7 call edi
$L14554:
; 563 : }
; 564 : if ( devExt->DiskImage ) {
00038 8b 46 2c mov eax, DWORD PTR [esi+44]
0003b 85 c0 test eax, eax
0003d 74 05 je SHORT $L14555
; 565 : ExFreePool( devExt->DiskImage );
0003f 6a 00 push 0
00041 50 push eax
00042 ff d7 call edi
$L14555:
; 566 : }
; 567 : if ( devExt->LowerDeviceObject ) {
00044 8b 76 04 mov esi, DWORD PTR [esi+4]
00047 85 f6 test esi, esi
00049 5f pop edi
0004a 74 07 je SHORT $L14556
; 568 : IoDetachDevice( devExt->LowerDeviceObject );
0004c 56 push esi
0004d ff 15 00 00 00
00 call DWORD PTR __imp__IoDetachDevice@4
$L14556:
; 569 : }
; 570 : IoDeleteDevice( DeviceObject );
00053 53 push ebx
00054 ff 15 00 00 00
00 call DWORD PTR __imp__IoDeleteDevice@4
0005a 5e pop esi
0005b 5b pop ebx
; 571 :
; 572 : return;
; 573 : }
0005c c2 04 00 ret 4
_RamDiskCleanUp@4 ENDP
_TEXT ENDS
PUBLIC _RamDiskRemoveDevice@8
EXTRN __imp__IoGetDriverObjectExtension@8:NEAR
EXTRN __imp__IoReleaseRemoveLockAndWaitEx@12:NEAR
EXTRN __imp__IoSetDeviceInterfaceState@8:NEAR
EXTRN _DriverEntry@8:NEAR
; Function compile flags: /Ogsy
; COMDAT _RamDiskRemoveDevice@8
_TEXT SEGMENT
_DeviceObject$ = 8
_Irp$ = 12
_RamDiskRemoveDevice@8 PROC NEAR ; COMDAT
; 598 : {
00000 53 push ebx
; 599 : PDEVICE_EXTENSION devExt = DeviceObject->DeviceExtension;
00001 8b 5c 24 08 mov ebx, DWORD PTR _DeviceObject$[esp]
00005 56 push esi
00006 57 push edi
00007 8b 7b 28 mov edi, DWORD PTR [ebx+40]
; 600 : PRAMDISK_DRIVER_EXTENSION driverExtension;
; 601 : NTSTATUS status;
; 602 :
; 603 : PAGED_CODE();
; 604 : DBGPRINT( DBG_COMP_PNP, DBG_LEVEL_VERBOSE, ("RemoveDevice\n" ) );
; 605 :
; 606 : #ifdef DBG
; 607 : status =
; 608 : #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -