📄 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_@IofCallDriver@8:NEAR
EXTRN __imp_@IofCompleteRequest@8:NEAR
EXTRN _WmiSystemControl@16:NEAR
; Function compile flags: /Ogsy
; File f:\w2ddk\src\kernel\serial\wmi.c
; COMDAT _SerialSystemControlDispatch@8
PAGESRP0 SEGMENT
_DeviceObject$ = 8
_Irp$ = 12
_disposition$ = 8
_SerialSystemControlDispatch@8 PROC NEAR ; COMDAT
; 36 : {
00000 55 push ebp
00001 8b ec mov ebp, esp
; 37 : SYSCTL_IRP_DISPOSITION disposition;
; 38 : NTSTATUS status;
; 39 : PSERIAL_DEVICE_EXTENSION pDevExt
; 40 : = (PSERIAL_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
00003 8b 45 08 mov eax, DWORD PTR _DeviceObject$[ebp]
00006 53 push ebx
00007 56 push esi
; 41 :
; 42 : PAGED_CODE();
; 43 :
; 44 : status = WmiSystemControl( &pDevExt->WmiLibInfo,
; 45 : DeviceObject,
; 46 : Irp,
; 47 : &disposition);
00008 8b 75 0c mov esi, DWORD PTR _Irp$[ebp]
0000b 8d 4d 08 lea ecx, DWORD PTR _disposition$[ebp]
0000e 57 push edi
0000f 8b 78 28 mov edi, DWORD PTR [eax+40]
00012 51 push ecx
00013 56 push esi
00014 50 push eax
00015 8d 87 8c 05 00
00 lea eax, DWORD PTR [edi+1420]
0001b 50 push eax
0001c e8 00 00 00 00 call _WmiSystemControl@16
00021 8b d8 mov ebx, eax
; 48 : switch(disposition)
; 49 : {
00023 8b 45 08 mov eax, DWORD PTR _disposition$[ebp]
00026 85 c0 test eax, eax
00028 74 28 je SHORT $L14942
0002a 83 f8 01 cmp eax, 1
0002d 74 19 je SHORT $L14943
; 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;
; 75 : }
; 76 :
; 77 : default:
; 78 : {
; 79 : //
; 80 : // We really should never get here, but if we do just forward....
; 81 : ASSERT(FALSE);
; 82 : IoSkipCurrentIrpStackLocation(Irp);
0002f fe 46 23 inc BYTE PTR [esi+35]
00032 83 46 60 24 add DWORD PTR [esi+96], 36 ; 00000024H
; 83 : status = IoCallDriver(pDevExt->LowerDeviceObject, Irp);
00036 8b 8f a0 04 00
00 mov ecx, DWORD PTR [edi+1184]
0003c 8b d6 mov edx, esi
0003e ff 15 00 00 00
00 call DWORD PTR __imp_@IofCallDriver@8
00044 8b d8 mov ebx, eax
; 84 : break;
00046 eb 0a jmp SHORT $L14942
$L14943:
; 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);
00048 32 d2 xor dl, dl
0004a 8b ce mov ecx, esi
0004c ff 15 00 00 00
00 call DWORD PTR __imp_@IofCompleteRequest@8
$L14942:
00052 5f pop edi
; 85 : }
; 86 : }
; 87 :
; 88 : return(status);
00053 8b c3 mov eax, ebx
00055 5e pop esi
00056 5b pop ebx
; 89 :
; 90 : }
00057 5d pop ebp
00058 c2 08 00 ret 8
_SerialSystemControlDispatch@8 ENDP
PAGESRP0 ENDS
PUBLIC _SerialTossWMIRequest@12
EXTRN _WmiCompleteRequest@20:NEAR
; Function compile flags: /Ogsy
; COMDAT _SerialTossWMIRequest@12
PAGESRP0 SEGMENT
_PDevObj$ = 8
_PIrp$ = 12
_GuidIndex$ = 16
_SerialTossWMIRequest@12 PROC NEAR ; COMDAT
; 124 : PSERIAL_DEVICE_EXTENSION pDevExt;
; 125 : NTSTATUS status;
; 126 :
; 127 : PAGED_CODE();
; 128 :
; 129 : pDevExt = (PSERIAL_DEVICE_EXTENSION)PDevObj->DeviceExtension;
; 130 :
; 131 : switch (GuidIndex) {
00000 6a 04 push 4
00002 58 pop eax
00003 3b 44 24 0c cmp eax, DWORD PTR _GuidIndex$[esp-4]
; 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);
00007 6a 00 push 0
00009 6a 00 push 0
0000b 1b c0 sbb eax, eax
0000d 25 85 02 00 00 and eax, 645 ; 00000285H
00012 05 10 00 00 c0 add eax, -1073741808 ; c0000010H
00017 50 push eax
00018 ff 74 24 14 push DWORD PTR _PIrp$[esp+8]
0001c ff 74 24 14 push DWORD PTR _PDevObj$[esp+12]
00020 e8 00 00 00 00 call _WmiCompleteRequest@20
; 148 :
; 149 : return status;
; 150 : }
00025 c2 0c 00 ret 12 ; 0000000cH
_SerialTossWMIRequest@12 ENDP
PAGESRP0 ENDS
PUBLIC _SerialSetWmiDataItem@28
; Function compile flags: /Ogsy
; COMDAT _SerialSetWmiDataItem@28
PAGESRP0 SEGMENT
_PDevObj$ = 8
_PIrp$ = 12
_GuidIndex$ = 16
_SerialSetWmiDataItem@28 PROC NEAR ; COMDAT
; 192 : PAGED_CODE();
; 193 :
; 194 : //
; 195 : // Toss this request -- we don't support anything for it
; 196 : //
; 197 :
; 198 : return SerialTossWMIRequest(PDevObj, PIrp, GuidIndex);
00000 ff 74 24 0c push DWORD PTR _GuidIndex$[esp-4]
00004 ff 74 24 0c push DWORD PTR _PIrp$[esp]
00008 ff 74 24 0c push DWORD PTR _PDevObj$[esp+4]
0000c e8 00 00 00 00 call _SerialTossWMIRequest@12
; 199 : }
00011 c2 1c 00 ret 28 ; 0000001cH
_SerialSetWmiDataItem@28 ENDP
PAGESRP0 ENDS
PUBLIC _SerialSetWmiDataBlock@24
; Function compile flags: /Ogsy
; COMDAT _SerialSetWmiDataBlock@24
PAGESRP0 SEGMENT
_PDevObj$ = 8
_PIrp$ = 12
_GuidIndex$ = 16
_SerialSetWmiDataBlock@24 PROC NEAR ; COMDAT
; 239 : PAGED_CODE();
; 240 :
; 241 : //
; 242 : // Toss this request -- we don't support anything for it
; 243 : //
; 244 :
; 245 : return SerialTossWMIRequest(PDevObj, PIrp, GuidIndex);
00000 ff 74 24 0c push DWORD PTR _GuidIndex$[esp-4]
00004 ff 74 24 0c push DWORD PTR _PIrp$[esp]
00008 ff 74 24 0c push DWORD PTR _PDevObj$[esp+4]
0000c e8 00 00 00 00 call _SerialTossWMIRequest@12
; 246 : }
00011 c2 18 00 ret 24 ; 00000018H
_SerialSetWmiDataBlock@24 ENDP
PAGESRP0 ENDS
PUBLIC _SerialQueryWmiDataBlock@32
EXTRN _SerialGetProperties@8:NEAR
; Function compile flags: /Ogsy
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -