⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmi.cod

📁 怎样在win2000下构造驱动程序znsoft_Serial2000_demo.ZIP
💻 COD
📖 第 1 页 / 共 2 页
字号:
; 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 + -