📄 wmi.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 12.00.9044.0
TITLE F:\W2DDK\src\kernel\serial\wmi.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 DWORD 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
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _RtlConvertLongToLargeInteger@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialSystemControlDispatch@8
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialTossWMIRequest@12
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialSetWmiDataItem@28
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialSetWmiDataBlock@24
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialQueryWmiDataBlock@32
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialQueryWmiRegInfo@24
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
INCLUDELIB LIBC
INCLUDELIB OLDNAMES
PUBLIC _SerialWmiGuidList
PUBLIC _SerialPortNameGuid
PUBLIC _SerialPortCommGuid
PUBLIC _SerialPortHWGuid
PUBLIC _SerailPortPerfGuid
PUBLIC _SerialPortPropertiesGuid
_DATA SEGMENT
_SerialPortNameGuid DD 0a0ec11a8H
DW 0b16cH
DW 011d1H
DB 0bdH
DB 098H
DB 00H
DB 0a0H
DB 0c9H
DB 06H
DB 0beH
DB 02dH
_SerialPortCommGuid DD 0edb16a62H
DW 0b16cH
DW 011d1H
DB 0bdH
DB 098H
DB 00H
DB 0a0H
DB 0c9H
DB 06H
DB 0beH
DB 02dH
_SerialPortHWGuid DD 0270b9b86H
DW 0b16dH
DW 011d1H
DB 0bdH
DB 098H
DB 00H
DB 0a0H
DB 0c9H
DB 06H
DB 0beH
DB 02dH
_SerailPortPerfGuid DD 056415accH
DW 0b16dH
DW 011d1H
DB 0bdH
DB 098H
DB 00H
DB 0a0H
DB 0c9H
DB 06H
DB 0beH
DB 02dH
_SerialPortPropertiesGuid DD 08209ec2aH
DW 02d6bH
DW 011d2H
DB 0baH
DB 049H
DB 00H
DB 0a0H
DB 0c9H
DB 06H
DB 029H
DB 010H
_SerialWmiGuidList DD FLAT:_SerialPortNameGuid
DD 01H
DD 00H
DD FLAT:_SerialPortCommGuid
DD 01H
DD 00H
DD FLAT:_SerialPortHWGuid
DD 01H
DD 00H
DD FLAT:_SerailPortPerfGuid
DD 01H
DD 00H
DD FLAT:_SerialPortPropertiesGuid
DD 01H
DD 00H
_DATA ENDS
PUBLIC _SerialSystemControlDispatch@8
EXTRN __imp__KeGetCurrentIrql@0:NEAR
EXTRN __imp__RtlAssert@16:NEAR
EXTRN _DbgPrint:NEAR
EXTRN __imp_@IofCallDriver@8:NEAR
EXTRN __imp_@IofCompleteRequest@8:NEAR
EXTRN _WmiSystemControl@16:NEAR
; COMDAT _SerialSystemControlDispatch@8
; File f:\w2ddk\src\kernel\serial\wmi.c
PAGESRP0 SEGMENT
$SG14977 DB 'EX: Pageable code called at IRQL %d', 0aH, 00H
ORG $+3
$SG14980 DB 'f:\w2ddk\src\kernel\serial\wmi.c', 00H
ORG $+3
$SG14981 DB 'FALSE', 00H
ORG $+2
$SG14992 DB 'f:\w2ddk\src\kernel\serial\wmi.c', 00H
ORG $+3
$SG14993 DB 'FALSE', 00H
; Function compile flags: /Ogs
_DeviceObject$ = 8
_Irp$ = 12
_disposition$ = -4
_status$ = 8
_SerialSystemControlDispatch@8 PROC NEAR ; COMDAT
; 36 : {
0007e 55 push ebp
0007f 8b ec mov ebp, esp
00081 51 push ecx
; 37 : SYSCTL_IRP_DISPOSITION disposition;
; 38 : NTSTATUS status;
; 39 : PSERIAL_DEVICE_EXTENSION pDevExt
; 40 : = (PSERIAL_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
00082 8b 45 08 mov eax, DWORD PTR _DeviceObject$[ebp]
00085 53 push ebx
00086 56 push esi
; 41 :
; 42 : PAGED_CODE();
00087 8b 35 00 00 00
00 mov esi, DWORD PTR __imp__KeGetCurrentIrql@0
0008d 57 push edi
0008e 8b 78 28 mov edi, DWORD PTR [eax+40]
00091 ff d6 call esi
00093 8b 1d 00 00 00
00 mov ebx, DWORD PTR __imp__RtlAssert@16
00099 3c 01 cmp al, 1
0009b 76 22 jbe SHORT $L14978
0009d ff d6 call esi
0009f 0f b6 c0 movzx eax, al
000a2 50 push eax
000a3 68 00 00 00 00 push OFFSET FLAT:$SG14977
000a8 e8 00 00 00 00 call _DbgPrint
000ad 59 pop ecx
000ae 59 pop ecx
000af 6a 00 push 0
000b1 6a 2a push 42 ; 0000002aH
000b3 68 00 00 00 00 push OFFSET FLAT:$SG14980
000b8 68 00 00 00 00 push OFFSET FLAT:$SG14981
000bd ff d3 call ebx
$L14978:
; 43 :
; 44 : status = WmiSystemControl( &pDevExt->WmiLibInfo,
; 45 : DeviceObject,
; 46 : Irp,
; 47 : &disposition);
000bf 8b 75 0c mov esi, DWORD PTR _Irp$[ebp]
000c2 8d 45 fc lea eax, DWORD PTR _disposition$[ebp]
000c5 50 push eax
000c6 56 push esi
000c7 ff 75 08 push DWORD PTR _DeviceObject$[ebp]
000ca 8d 87 8c 05 00
00 lea eax, DWORD PTR [edi+1420]
000d0 50 push eax
000d1 e8 00 00 00 00 call _WmiSystemControl@16
000d6 89 45 08 mov DWORD PTR _status$[ebp], eax
; 48 : switch(disposition)
; 49 : {
000d9 8b 45 fc mov eax, DWORD PTR _disposition$[ebp]
000dc 85 c0 test eax, eax
000de 74 40 je SHORT $L14986
000e0 83 f8 01 cmp eax, 1
000e3 74 31 je SHORT $L14987
000e5 7e 05 jle SHORT $L14989
000e7 83 f8 03 cmp eax, 3
; 63 : break;
; 64 : }
; 65 :
; 66 : case IrpForward:
; 67 : case IrpNotWmi:
; 68 : {
; 69 : //
; 70 : // This irp is either not a WMI irp or is a WMI irp targetted
; 71 : // at a device lower in the stack.
; 72 : IoSkipCurrentIrpStackLocation(Irp);
; 73 : status = IoCallDriver(pDevExt->LowerDeviceObject, Irp);
; 74 : break;
000ea 7e 10 jle SHORT $L15183
$L14989:
; 75 : }
; 76 :
; 77 : default:
; 78 : {
; 79 : //
; 80 : // We really should never get here, but if we do just forward....
; 81 : ASSERT(FALSE);
000ec 6a 00 push 0
000ee 6a 51 push 81 ; 00000051H
000f0 68 00 00 00 00 push OFFSET FLAT:$SG14992
000f5 68 00 00 00 00 push OFFSET FLAT:$SG14993
000fa ff d3 call ebx
$L15183:
; 82 : IoSkipCurrentIrpStackLocation(Irp);
000fc fe 46 23 inc BYTE PTR [esi+35]
000ff 83 46 60 24 add DWORD PTR [esi+96], 36 ; 00000024H
; 83 : status = IoCallDriver(pDevExt->LowerDeviceObject, Irp);
00103 8b 8f a0 04 00
00 mov ecx, DWORD PTR [edi+1184]
00109 8b d6 mov edx, esi
0010b ff 15 00 00 00
00 call DWORD PTR __imp_@IofCallDriver@8
00111 89 45 08 mov DWORD PTR _status$[ebp], eax
; 84 : break;
00114 eb 0a jmp SHORT $L14986
$L14987:
; 50 : case IrpProcessed:
; 51 : {
; 52 : //
; 53 : // This irp has been processed and may be completed or pending.
; 54 : break;
; 55 : }
; 56 :
; 57 : case IrpNotCompleted:
; 58 : {
; 59 : //
; 60 : // This irp has not been completed, but has been fully processed.
; 61 : // we will complete it now
; 62 : IoCompleteRequest(Irp, IO_NO_INCREMENT);
00116 32 d2 xor dl, dl
00118 8b ce mov ecx, esi
0011a ff 15 00 00 00
00 call DWORD PTR __imp_@IofCompleteRequest@8
$L14986:
; 85 : }
; 86 : }
; 87 :
; 88 : return(status);
00120 8b 45 08 mov eax, DWORD PTR _status$[ebp]
00123 5f pop edi
00124 5e pop esi
00125 5b pop ebx
; 89 :
; 90 : }
00126 c9 leave
00127 c2 08 00 ret 8
_SerialSystemControlDispatch@8 ENDP
PAGESRP0 ENDS
PUBLIC _SerialTossWMIRequest@12
EXTRN _WmiCompleteRequest@20:NEAR
; COMDAT _SerialTossWMIRequest@12
PAGESRP0 SEGMENT
$SG15014 DB 'EX: Pageable code called at IRQL %d', 0aH, 00H
ORG $+3
$SG15017 DB 'f:\w2ddk\src\kernel\serial\wmi.c', 00H
ORG $+3
$SG15018 DB 'FALSE', 00H
; Function compile flags: /Ogs
_PDevObj$ = 8
_PIrp$ = 12
_GuidIndex$ = 16
_SerialTossWMIRequest@12 PROC NEAR ; COMDAT
; 123 : {
00052 55 push ebp
00053 8b ec mov ebp, esp
00055 56 push esi
; 124 : PSERIAL_DEVICE_EXTENSION pDevExt;
; 125 : NTSTATUS status;
; 126 :
; 127 : PAGED_CODE();
00056 8b 35 00 00 00
00 mov esi, DWORD PTR __imp__KeGetCurrentIrql@0
0005c ff d6 call esi
0005e 3c 01 cmp al, 1
00060 76 26 jbe SHORT $L15015
00062 ff d6 call esi
00064 0f b6 c0 movzx eax, al
00067 50 push eax
00068 68 00 00 00 00 push OFFSET FLAT:$SG15014
0006d e8 00 00 00 00 call _DbgPrint
00072 59 pop ecx
00073 59 pop ecx
00074 6a 00 push 0
00076 6a 7f push 127 ; 0000007fH
00078 68 00 00 00 00 push OFFSET FLAT:$SG15017
0007d 68 00 00 00 00 push OFFSET FLAT:$SG15018
00082 ff 15 00 00 00
00 call DWORD PTR __imp__RtlAssert@16
$L15015:
; 128 :
; 129 : pDevExt = (PSERIAL_DEVICE_EXTENSION)PDevObj->DeviceExtension;
; 130 :
; 131 : switch (GuidIndex) {
00088 6a 04 push 4
0008a 58 pop eax
0008b 3b 45 10 cmp eax, DWORD PTR _GuidIndex$[ebp]
; 132 :
; 133 : case WMI_SERIAL_PORT_NAME_INFORMATION:
; 134 : case WMI_SERIAL_PORT_COMM_INFORMATION:
; 135 : case WMI_SERIAL_PORT_HW_INFORMATION:
; 136 : case WMI_SERIAL_PORT_PERF_INFORMATION:
; 137 : case WMI_SERIAL_PORT_PROPERTIES:
; 138 : status = STATUS_INVALID_DEVICE_REQUEST;
; 139 : break;
; 140 :
; 141 : default:
; 142 : status = STATUS_WMI_GUID_NOT_FOUND;
; 143 : break;
; 144 : }
; 145 :
; 146 : status = WmiCompleteRequest(PDevObj, PIrp,
; 147 : status, 0, IO_NO_INCREMENT);
0008e 6a 00 push 0
00090 6a 00 push 0
00092 1b c0 sbb eax, eax
00094 25 85 02 00 00 and eax, 645 ; 00000285H
00099 05 10 00 00 c0 add eax, -1073741808 ; c0000010H
0009e 50 push eax
0009f ff 75 0c push DWORD PTR _PIrp$[ebp]
000a2 ff 75 08 push DWORD PTR _PDevObj$[ebp]
000a5 e8 00 00 00 00 call _WmiCompleteRequest@20
000aa 5e pop esi
; 148 :
; 149 : return status;
; 150 : }
000ab 5d pop ebp
000ac c2 0c 00 ret 12 ; 0000000cH
_SerialTossWMIRequest@12 ENDP
PAGESRP0 ENDS
PUBLIC _SerialSetWmiDataItem@28
; COMDAT _SerialSetWmiDataItem@28
PAGESRP0 SEGMENT
$SG15044 DB 'EX: Pageable code called at IRQL %d', 0aH, 00H
ORG $+3
$SG15047 DB 'f:\w2ddk\src\kernel\serial\wmi.c', 00H
ORG $+3
$SG15048 DB 'FALSE', 00H
; Function compile flags: /Ogs
_PDevObj$ = 8
_PIrp$ = 12
_GuidIndex$ = 16
_SerialSetWmiDataItem@28 PROC NEAR ; COMDAT
; 191 : {
00052 55 push ebp
00053 8b ec mov ebp, esp
00055 56 push esi
; 192 : PAGED_CODE();
00056 8b 35 00 00 00
00 mov esi, DWORD PTR __imp__KeGetCurrentIrql@0
0005c ff d6 call esi
0005e 3c 01 cmp al, 1
00060 76 29 jbe SHORT $L15045
00062 ff d6 call esi
00064 0f b6 c0 movzx eax, al
00067 50 push eax
00068 68 00 00 00 00 push OFFSET FLAT:$SG15044
0006d e8 00 00 00 00 call _DbgPrint
00072 59 pop ecx
00073 59 pop ecx
00074 6a 00 push 0
00076 68 c0 00 00 00 push 192 ; 000000c0H
0007b 68 00 00 00 00 push OFFSET FLAT:$SG15047
00080 68 00 00 00 00 push OFFSET FLAT:$SG15048
00085 ff 15 00 00 00
00 call DWORD PTR __imp__RtlAssert@16
$L15045:
; 193 :
; 194 : //
; 195 : // Toss this request -- we don't support anything for it
; 196 : //
; 197 :
; 198 : return SerialTossWMIRequest(PDevObj, PIrp, GuidIndex);
0008b ff 75 10 push DWORD PTR _GuidIndex$[ebp]
0008e ff 75 0c push DWORD PTR _PIrp$[ebp]
00091 ff 75 08 push DWORD PTR _PDevObj$[ebp]
00094 e8 00 00 00 00 call _SerialTossWMIRequest@12
00099 5e pop esi
; 199 : }
0009a 5d pop ebp
0009b c2 1c 00 ret 28 ; 0000001cH
_SerialSetWmiDataItem@28 ENDP
PAGESRP0 ENDS
PUBLIC _SerialSetWmiDataBlock@24
; COMDAT _SerialSetWmiDataBlock@24
PAGESRP0 SEGMENT
$SG15063 DB 'EX: Pageable code called at IRQL %d', 0aH, 00H
ORG $+3
$SG15066 DB 'f:\w2ddk\src\kernel\serial\wmi.c', 00H
ORG $+3
$SG15067 DB 'FALSE', 00H
; Function compile flags: /Ogs
_PDevObj$ = 8
_PIrp$ = 12
_GuidIndex$ = 16
_SerialSetWmiDataBlock@24 PROC NEAR ; COMDAT
; 238 : {
00052 55 push ebp
00053 8b ec mov ebp, esp
00055 56 push esi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -