📄 pnp.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 12.00.9044.0
TITLE F:\W2DDK\src\kernel\serial\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 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
; COMDAT ??_C@_0BH@JNNM@PowerSystemUnspecified?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BD@NDKJ@PowerSystemWorking?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BF@JLBM@PowerSystemSleeping1?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BF@GEKF@PowerSystemSleeping2?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BF@MODC@PowerSystemSleeping3?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BF@CJOB@PowerSystemHibernate?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BE@ECLL@PowerSystemShutdown?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BD@GFLO@PowerSystemMaximum?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BH@OAIA@PowerDeviceUnspecified?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0O@DAGD@PowerDeviceD0?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0O@JKPE@PowerDeviceD1?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0O@GFEN@PowerDeviceD2?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0O@MPNK@PowerDeviceD3?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BD@HNLO@PowerDeviceMaximum?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _RtlConvertLongToLargeInteger@4
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialSyncCompletion@12
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _SerialCreateDevObj@8
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialAddDevice@8
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialPnpDispatch@8
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialReportMaxBaudRate@4
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialFinishStartDevice@16
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialStartDevice@8
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialItemCallBack@44
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialControllerCallBack@44
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialGetPortInfo@20
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialDoExternalNaming@8
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _SerialUndoExternalNaming@4
PAGESRP0 SEGMENT PARA USE32 PUBLIC ''
PAGESRP0 ENDS
; COMDAT _GUID_CLASS_COMPORT
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
INCLUDELIB LIBC
INCLUDELIB OLDNAMES
PUBLIC _GUID_CLASS_COMPORT
PUBLIC _SerSystemCapString
PUBLIC ??_C@_0BH@JNNM@PowerSystemUnspecified?$AA@ ; `string'
PUBLIC ??_C@_0BD@NDKJ@PowerSystemWorking?$AA@ ; `string'
PUBLIC ??_C@_0BF@JLBM@PowerSystemSleeping1?$AA@ ; `string'
PUBLIC ??_C@_0BF@GEKF@PowerSystemSleeping2?$AA@ ; `string'
PUBLIC ??_C@_0BF@MODC@PowerSystemSleeping3?$AA@ ; `string'
PUBLIC ??_C@_0BF@CJOB@PowerSystemHibernate?$AA@ ; `string'
PUBLIC ??_C@_0BE@ECLL@PowerSystemShutdown?$AA@ ; `string'
PUBLIC ??_C@_0BD@GFLO@PowerSystemMaximum?$AA@ ; `string'
PUBLIC _SerDeviceCapString
PUBLIC ??_C@_0BH@OAIA@PowerDeviceUnspecified?$AA@ ; `string'
PUBLIC ??_C@_0O@DAGD@PowerDeviceD0?$AA@ ; `string'
PUBLIC ??_C@_0O@JKPE@PowerDeviceD1?$AA@ ; `string'
PUBLIC ??_C@_0O@GFEN@PowerDeviceD2?$AA@ ; `string'
PUBLIC ??_C@_0O@MPNK@PowerDeviceD3?$AA@ ; `string'
PUBLIC ??_C@_0BD@HNLO@PowerDeviceMaximum?$AA@ ; `string'
_BSS SEGMENT
?currentInstance@?1??SerialCreateDevObj@@9@9 DD 01H DUP (?) ; currentInstance
_BSS ENDS
CONST SEGMENT
_SerialPhysicalZero DD 00H
ORG $+4
CONST ENDS
; COMDAT _GUID_CLASS_COMPORT
CONST SEGMENT
_GUID_CLASS_COMPORT DD 086e0d1e0H
DW 08089H
DW 011d0H
DB 09cH
DB 0e4H
DB 08H
DB 00H
DB 03eH
DB 030H
DB 01fH
DB 073H
CONST ENDS
; COMDAT ??_C@_0BH@JNNM@PowerSystemUnspecified?$AA@
CONST SEGMENT
??_C@_0BH@JNNM@PowerSystemUnspecified?$AA@ DB 'PowerSystemUnspecified', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BD@NDKJ@PowerSystemWorking?$AA@
CONST SEGMENT
??_C@_0BD@NDKJ@PowerSystemWorking?$AA@ DB 'PowerSystemWorking', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BF@JLBM@PowerSystemSleeping1?$AA@
CONST SEGMENT
??_C@_0BF@JLBM@PowerSystemSleeping1?$AA@ DB 'PowerSystemSleeping1', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BF@GEKF@PowerSystemSleeping2?$AA@
CONST SEGMENT
??_C@_0BF@GEKF@PowerSystemSleeping2?$AA@ DB 'PowerSystemSleeping2', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BF@MODC@PowerSystemSleeping3?$AA@
CONST SEGMENT
??_C@_0BF@MODC@PowerSystemSleeping3?$AA@ DB 'PowerSystemSleeping3', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BF@CJOB@PowerSystemHibernate?$AA@
CONST SEGMENT
??_C@_0BF@CJOB@PowerSystemHibernate?$AA@ DB 'PowerSystemHibernate', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BE@ECLL@PowerSystemShutdown?$AA@
CONST SEGMENT
??_C@_0BE@ECLL@PowerSystemShutdown?$AA@ DB 'PowerSystemShutdown', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BD@GFLO@PowerSystemMaximum?$AA@
CONST SEGMENT
??_C@_0BD@GFLO@PowerSystemMaximum?$AA@ DB 'PowerSystemMaximum', 00H ; `string'
CONST ENDS
_DATA SEGMENT
_SerSystemCapString DD FLAT:??_C@_0BH@JNNM@PowerSystemUnspecified?$AA@
DD FLAT:??_C@_0BD@NDKJ@PowerSystemWorking?$AA@
DD FLAT:??_C@_0BF@JLBM@PowerSystemSleeping1?$AA@
DD FLAT:??_C@_0BF@GEKF@PowerSystemSleeping2?$AA@
DD FLAT:??_C@_0BF@MODC@PowerSystemSleeping3?$AA@
DD FLAT:??_C@_0BF@CJOB@PowerSystemHibernate?$AA@
DD FLAT:??_C@_0BE@ECLL@PowerSystemShutdown?$AA@
DD FLAT:??_C@_0BD@GFLO@PowerSystemMaximum?$AA@
_DATA ENDS
; COMDAT ??_C@_0BH@OAIA@PowerDeviceUnspecified?$AA@
CONST SEGMENT
??_C@_0BH@OAIA@PowerDeviceUnspecified?$AA@ DB 'PowerDeviceUnspecified', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0O@DAGD@PowerDeviceD0?$AA@
CONST SEGMENT
??_C@_0O@DAGD@PowerDeviceD0?$AA@ DB 'PowerDeviceD0', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0O@JKPE@PowerDeviceD1?$AA@
CONST SEGMENT
??_C@_0O@JKPE@PowerDeviceD1?$AA@ DB 'PowerDeviceD1', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0O@GFEN@PowerDeviceD2?$AA@
CONST SEGMENT
??_C@_0O@GFEN@PowerDeviceD2?$AA@ DB 'PowerDeviceD2', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0O@MPNK@PowerDeviceD3?$AA@
CONST SEGMENT
??_C@_0O@MPNK@PowerDeviceD3?$AA@ DB 'PowerDeviceD3', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BD@HNLO@PowerDeviceMaximum?$AA@
CONST SEGMENT
??_C@_0BD@HNLO@PowerDeviceMaximum?$AA@ DB 'PowerDeviceMaximum', 00H ; `string'
CONST ENDS
_DATA SEGMENT
_SerDeviceCapString DD FLAT:??_C@_0BH@OAIA@PowerDeviceUnspecified?$AA@
DD FLAT:??_C@_0O@DAGD@PowerDeviceD0?$AA@
DD FLAT:??_C@_0O@JKPE@PowerDeviceD1?$AA@
DD FLAT:??_C@_0O@GFEN@PowerDeviceD2?$AA@
DD FLAT:??_C@_0O@MPNK@PowerDeviceD3?$AA@
DD FLAT:??_C@_0BD@HNLO@PowerDeviceMaximum?$AA@
_DATA ENDS
PUBLIC _SerialSyncCompletion@12
EXTRN __imp__KeSetEvent@12:NEAR
; Function compile flags: /Ogs
; File f:\w2ddk\src\kernel\serial\pnp.c
; COMDAT _SerialSyncCompletion@12
_TEXT SEGMENT
_SerialSyncEvent$ = 16
_SerialSyncCompletion@12 PROC NEAR ; COMDAT
; 87 : {
00000 55 push ebp
00001 8b ec mov ebp, esp
; 88 : KeSetEvent(SerialSyncEvent, IO_NO_INCREMENT, FALSE);
00003 6a 00 push 0
00005 6a 00 push 0
00007 ff 75 10 push DWORD PTR _SerialSyncEvent$[ebp]
0000a ff 15 00 00 00
00 call DWORD PTR __imp__KeSetEvent@12
; 89 : return STATUS_MORE_PROCESSING_REQUIRED;
00010 b8 16 00 00 c0 mov eax, -1073741802 ; c0000016H
; 90 : }
00015 5d pop ebp
00016 c2 0c 00 ret 12 ; 0000000cH
_SerialSyncCompletion@12 ENDP
_TEXT ENDS
PUBLIC _SerialCreateDevObj@8
EXTRN __imp__KeInitializeEvent@12:NEAR
EXTRN _SerialLogError@64:NEAR
EXTRN _SerialDebugLevel:DWORD
EXTRN __imp__KeGetCurrentIrql@0:NEAR
EXTRN __imp__RtlAssert@16:NEAR
EXTRN __imp__RtlIntegerToUnicodeString@12:NEAR
EXTRN __imp__RtlInitUnicodeString@8:NEAR
EXTRN __imp__ExAllocatePoolWithTag@12:NEAR
EXTRN __imp__ExFreePool@4:NEAR
EXTRN __imp__RtlAppendUnicodeStringToString@8:NEAR
EXTRN __imp__RtlAppendUnicodeToString@8:NEAR
EXTRN _DbgPrint:NEAR
EXTRN _driverDefaults:BYTE
EXTRN __imp__IoCreateDevice@28:NEAR
EXTRN __imp__IoDeleteDevice@4:NEAR
; COMDAT _SerialCreateDevObj@8
PAGESRP0 SEGMENT
$SG14848 DB 'EX: Pageable code called at IRQL %d', 0aH, 00H
ORG $+3
$SG14851 DB 'f:\w2ddk\src\kernel\serial\pnp.c', 00H
ORG $+3
$SG14852 DB 'FALSE', 00H
ORG $+2
$SG14859 DB 'SERIAL: Enter SerialCreateDevObj', 0aH, 00H
ORG $+2
$SG14882 DB 'SERIAL: Couldn''t allocate memory for device name', 0aH, 00H
ORG $+2
$SG14891 DB '\', 00H, 'D', 00H, 'e', 00H, 'v', 00H, 'i', 00H, 'c', 00H
DB 'e', 00H, '\', 00H, 'S', 00H, 'e', 00H, 'r', 00H, 'i', 00H, 'a'
DB 00H, 'l', 00H, 00H, 00H
ORG $+2
$SG14902 DB 'SerialAddDevice: Create device failed - %x ', 0aH, 00H
ORG $+3
$SG14976 DB 'SERIAL: SerialCreateDevObj Error, Cleaning up', 0aH, 00H
ORG $+1
$SG14997 DB 'SERIAL: Leave SerialCreateDevObj', 0aH, 00H
ORG $+2
$SG14913 DB 'f:\w2ddk\src\kernel\serial\pnp.c', 00H
ORG $+3
$SG14914 DB 'deviceObject != NULL', 00H
ORG $+3
$SG14929 DB 'SERIAL: Couldn''t allocate memory for DeviceName', 0aH, 00H
ORG $+3
$SG14946 DB 'SerialAddDevice: Cannot allocate memory for NtName', 0aH
DB 00H
$SG14962 DB 'SERIAL: Leave SerialCreateDevObj', 0aH, 00H
; Function compile flags: /Ogs
_DriverObject$ = 8
_NewDeviceObject$ = 12
_deviceObjName$ = -16
_deviceObject$ = -4
_pDevExt$ = 8
_status$ = -8
_instanceStr$ = -24
_instanceNumberBuffer$ = -64
_SerialCreateDevObj@8 PROC NEAR ; COMDAT
; 116 : {
00216 55 push ebp
00217 8b ec mov ebp, esp
00219 83 ec 40 sub esp, 64 ; 00000040H
0021c 53 push ebx
0021d 56 push esi
0021e 57 push edi
; 117 : UNICODE_STRING deviceObjName;
; 118 : PDEVICE_OBJECT deviceObject = NULL;
; 119 : PSERIAL_DEVICE_EXTENSION pDevExt;
; 120 : NTSTATUS status = STATUS_SUCCESS;
; 121 : static ULONG currentInstance = 0;
; 122 : UNICODE_STRING instanceStr;
; 123 : WCHAR instanceNumberBuffer[20];
; 124 :
; 125 :
; 126 : PAGED_CODE();
0021f 8b 3d 00 00 00
00 mov edi, DWORD PTR __imp__KeGetCurrentIrql@0
00225 33 f6 xor esi, esi
00227 89 75 fc mov DWORD PTR _deviceObject$[ebp], esi
0022a ff d7 call edi
0022c 33 db xor ebx, ebx
0022e 43 inc ebx
0022f 3a c3 cmp al, bl
00231 76 25 jbe SHORT $L14853
00233 ff d7 call edi
00235 0f b6 c0 movzx eax, al
00238 50 push eax
00239 68 00 00 00 00 push OFFSET FLAT:$SG14848
0023e e8 00 00 00 00 call _DbgPrint
00243 59 pop ecx
00244 59 pop ecx
00245 56 push esi
00246 6a 7e push 126 ; 0000007eH
00248 68 00 00 00 00 push OFFSET FLAT:$SG14851
0024d 68 00 00 00 00 push OFFSET FLAT:$SG14852
00252 ff 15 00 00 00
00 call DWORD PTR __imp__RtlAssert@16
$L14853:
; 127 :
; 128 : SerialDump (SERTRACECALLS,("SERIAL: Enter SerialCreateDevObj\n"));
00258 f6 05 00 00 00
00 40 test BYTE PTR _SerialDebugLevel, 64 ; 00000040H
0025f 74 0b je SHORT $L14854
00261 68 00 00 00 00 push OFFSET FLAT:$SG14859
00266 e8 00 00 00 00 call _DbgPrint
0026b 59 pop ecx
$L14854:
; 129 :
; 130 : //
; 131 : // Zero out allocated memory pointers so we know if they must be freed
; 132 : //
; 133 :
; 134 : RtlZeroMemory(&deviceObjName, sizeof(UNICODE_STRING));
0026c 33 c0 xor eax, eax
0026e 8d 7d f0 lea edi, DWORD PTR _deviceObjName$[ebp]
00271 ab stosd
; 135 :
; 136 : deviceObjName.MaximumLength = DEVICE_OBJECT_NAME_LENGTH * sizeof(WCHAR);
; 137 : deviceObjName.Buffer = ExAllocatePool(PagedPool, deviceObjName.MaximumLength
; 138 : + sizeof(WCHAR));
00272 68 43 4f 4d 58 push 1481461571 ; 584d4f43H
00277 68 02 01 00 00 push 258 ; 00000102H
0027c ab stosd
0027d 53 push ebx
0027e 66 c7 45 f2 00
01 mov WORD PTR _deviceObjName$[ebp+2], 256 ; 00000100H
00284 ff 15 00 00 00
00 call DWORD PTR __imp__ExAllocatePoolWithTag@12
0028a 8b f8 mov edi, eax
; 139 :
; 140 :
; 141 : if (deviceObjName.Buffer == NULL) {
0028c 3b fe cmp edi, esi
0028e 89 7d f4 mov DWORD PTR _deviceObjName$[ebp+4], edi
00291 75 45 jne SHORT $L14870
; 142 : SerialLogError(DriverObject, NULL, SerialPhysicalZero, SerialPhysicalZero,
; 143 : 0, 0, 0, 19, STATUS_SUCCESS, SERIAL_INSUFFICIENT_RESOURCES,
; 144 : 0, NULL, 0, NULL);
00293 56 push esi
00294 a1 04 00 00 00 mov eax, DWORD PTR _SerialPhysicalZero+4
00299 56 push esi
0029a 8b 0d 00 00 00
00 mov ecx, DWORD PTR _SerialPhysicalZero
002a0 56 push esi
002a1 56 push esi
002a2 68 08 00 06 c0 push -1073348600 ; c0060008H
002a7 56 push esi
002a8 6a 13 push 19 ; 00000013H
002aa 56 push esi
002ab 56 push esi
002ac 56 push esi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -