📄 passthru.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.00.9178
TITLE .\passthru.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
INIT SEGMENT PARA USE32 PUBLIC ''
INIT ENDS
; COMDAT _DriverEntry@8
INIT SEGMENT PARA USE32 PUBLIC ''
INIT ENDS
; COMDAT _PtRegisterDevice@0
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _PtDispatch@8
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _PtDeregisterDevice@0
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _PtUnload@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 _ProtHandle
PUBLIC _DriverHandle
PUBLIC _MediumArray
PUBLIC _pAdaptList
PUBLIC _MiniportCount
PUBLIC _NdisDeviceHandle
PUBLIC _ControlDeviceObject
PUBLIC _ControlDeviceState
_BSS SEGMENT
_ProtHandle DD 01H DUP (?)
_DriverHandle DD 01H DUP (?)
_pAdaptList DD 01H DUP (?)
_BSS ENDS
_DATA SEGMENT
COMM _GlobalLock:QWORD
_DATA ENDS
_BSS SEGMENT
_MiniportCount DD 01H DUP (?)
_BSS ENDS
_DATA SEGMENT
COMM _NdisWrapperHandle:DWORD
_DATA ENDS
_BSS SEGMENT
_NdisDeviceHandle DD 01H DUP (?)
_ControlDeviceObject DD 01H DUP (?)
_ControlDeviceState DD 01H DUP (?)
_BSS ENDS
_DATA SEGMENT
COMM _DrvCompileInfo:BYTE:016H
_MediumArray DD 00H
DD 01H
DD 02H
DD 03H
?DateCompiledBase@?1??DriverEntry@@9@9 DB 'Dec 3 2003', 00H ; `DriverEntry'::`2'::DateCompiledBase
?TimeCompiledBase@?1??DriverEntry@@9@9 DB ' 17:42:27', 00H ; `DriverEntry'::`2'::TimeCompiledBase
_DATA ENDS
PUBLIC _DriverEntry@8
PUBLIC _PtUnload@4
EXTRN __imp__NdisIMRegisterLayeredMiniport@16:NEAR
EXTRN __imp__NdisIMDeregisterLayeredMiniport@4:NEAR
EXTRN __imp__NdisIMAssociateMiniport@8:NEAR
EXTRN __imp__NdisMRegisterUnloadHandler@8:NEAR
EXTRN _PtUnloadProtocol@0:NEAR
EXTRN _PtOpenAdapterComplete@12:NEAR
EXTRN _PtCloseAdapterComplete@8:NEAR
EXTRN _PtResetComplete@8:NEAR
EXTRN _PtRequestComplete@12:NEAR
EXTRN __imp__NdisRegisterProtocol@16:NEAR
EXTRN _PtStatus@16:NEAR
EXTRN _PtStatusComplete@4:NEAR
EXTRN _PtSendComplete@12:NEAR
EXTRN _PtTransferDataComplete@16:NEAR
EXTRN __imp__NdisAllocateSpinLock@4:NEAR
EXTRN _PtReceive@28:NEAR
EXTRN _PtReceiveComplete@4:NEAR
EXTRN _PtReceivePacket@8:NEAR
EXTRN _PtBindAdapter@20:NEAR
EXTRN _PtUnbindAdapter@12:NEAR
EXTRN _PtPNPHandler@8:NEAR
EXTRN _MPInitialize@24:NEAR
EXTRN _MPSendPackets@12:NEAR
EXTRN _MPQueryInformation@24:NEAR
EXTRN _MPSetInformation@24:NEAR
EXTRN _MPReturnPacket@8:NEAR
EXTRN _MPTransferData@24:NEAR
EXTRN _MPHalt@4:NEAR
EXTRN _MPCancelSendPackets@8:NEAR
EXTRN _MPAdapterShutdown@4:NEAR
EXTRN _MPDevicePnPEvent@16:NEAR
EXTRN _DbgPrint:NEAR
EXTRN __imp__NdisInitializeWrapper@16:NEAR
EXTRN __imp__NdisTerminateWrapper@8:NEAR
EXTRN __imp__NdisInitUnicodeString@8:NEAR
; COMDAT _DriverEntry@8
; File g:\pcadev\ndisim\passthruex\part2\james\james\sys\passthru.c
INIT SEGMENT
$SG15883 DB 'Passthru: ', 00H
ORG $+1
$SG15884 DB 'JApassthru.passthru v1.02 (compiled %s)', 0aH, 00H
ORG $+3
$SG15899 DB 'P', 00H, 'a', 00H, 's', 00H, 's', 00H, 't', 00H, 'h', 00H
DB 'r', 00H, 'u', 00H, 00H, 00H
; Function compile flags: /Odt
tv273 = -325
tv270 = -324
tv267 = -320
tv266 = -316
tv261 = -309
tv258 = -308
tv256 = -304
tv89 = -297
tv86 = -296
tv88 = -292
tv87 = -288
tv81 = -281
tv77 = -280
tv80 = -276
tv79 = -272
_Status$ = -268
_MChars$ = -264
_Name$ = -136
_PChars$ = -128
_DateCompiled$ = -12
_DriverObject$ = 8
_RegistryPath$ = 12
_DriverEntry@8 PROC NEAR ; COMDAT
; 100 : {
0004a 55 push ebp
0004b 8b ec mov ebp, esp
0004d 81 ec 48 01 00
00 sub esp, 328 ; 00000148H
00053 56 push esi
00054 57 push edi
; 101 : NDIS_STATUS Status;
; 102 : NDIS_PROTOCOL_CHARACTERISTICS PChars;
; 103 : NDIS_MINIPORT_CHARACTERISTICS MChars;
; 104 : NDIS_STRING Name;
; 105 :
; 106 : // Information output. ja, 29.11.2003.
; 107 :
; 108 : char static DateCompiledBase[] = __DATE__,
; 109 : TimeCompiledBase[] = " "__TIME__;
; 110 : char DateCompiled[] = // Build date in preferred (dd mmm yyyy) format.
; 111 : {DateCompiledBase[4], DateCompiledBase[5], DateCompiledBase[6],
00055 a0 04 00 00 00 mov al, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9+4
0005a 88 45 f4 mov BYTE PTR _DateCompiled$[ebp], al
0005d 8a 0d 05 00 00
00 mov cl, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9+5
00063 88 4d f5 mov BYTE PTR _DateCompiled$[ebp+1], cl
00066 8a 15 06 00 00
00 mov dl, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9+6
0006c 88 55 f6 mov BYTE PTR _DateCompiled$[ebp+2], dl
; 112 : DateCompiledBase[0], DateCompiledBase[1], DateCompiledBase[2], DateCompiledBase[3],
0006f a0 00 00 00 00 mov al, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9
00074 88 45 f7 mov BYTE PTR _DateCompiled$[ebp+3], al
00077 8a 0d 01 00 00
00 mov cl, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9+1
0007d 88 4d f8 mov BYTE PTR _DateCompiled$[ebp+4], cl
00080 8a 15 02 00 00
00 mov dl, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9+2
00086 88 55 f9 mov BYTE PTR _DateCompiled$[ebp+5], dl
00089 a0 03 00 00 00 mov al, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9+3
0008e 88 45 fa mov BYTE PTR _DateCompiled$[ebp+6], al
; 113 : DateCompiledBase[7], DateCompiledBase[8], DateCompiledBase[9], DateCompiledBase[10],
00091 8a 0d 07 00 00
00 mov cl, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9+7
00097 88 4d fb mov BYTE PTR _DateCompiled$[ebp+7], cl
0009a 8a 15 08 00 00
00 mov dl, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9+8
000a0 88 55 fc mov BYTE PTR _DateCompiled$[ebp+8], dl
000a3 a0 09 00 00 00 mov al, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9+9
000a8 88 45 fd mov BYTE PTR _DateCompiled$[ebp+9], al
000ab 8a 0d 0a 00 00
00 mov cl, BYTE PTR ?DateCompiledBase@?1??DriverEntry@@9@9+10
000b1 88 4d fe mov BYTE PTR _DateCompiled$[ebp+10], cl
; 114 : 0x0
; 115 : };
000b4 c6 45 ff 00 mov BYTE PTR _DateCompiled$[ebp+11], 0
; 116 :
; 117 : if (' '==DateCompiled[0])
000b8 0f be 55 f4 movsx edx, BYTE PTR _DateCompiled$[ebp]
000bc 83 fa 20 cmp edx, 32 ; 00000020H
000bf 75 64 jne SHORT $L15881
; 118 : strcpy(DrvCompileInfo, DateCompiled+1);
000c1 8d 45 f5 lea eax, DWORD PTR _DateCompiled$[ebp+1]
000c4 89 85 f0 fe ff
ff mov DWORD PTR tv79[ebp], eax
000ca c7 85 ec fe ff
ff 00 00 00 00 mov DWORD PTR tv80[ebp], OFFSET FLAT:_DrvCompileInfo
000d4 8b 8d ec fe ff
ff mov ecx, DWORD PTR tv80[ebp]
000da 89 8d e8 fe ff
ff mov DWORD PTR tv77[ebp], ecx
$L16003:
000e0 8b 95 f0 fe ff
ff mov edx, DWORD PTR tv79[ebp]
000e6 8a 02 mov al, BYTE PTR [edx]
000e8 88 85 e7 fe ff
ff mov BYTE PTR tv81[ebp], al
000ee 8b 8d ec fe ff
ff mov ecx, DWORD PTR tv80[ebp]
000f4 8a 95 e7 fe ff
ff mov dl, BYTE PTR tv81[ebp]
000fa 88 11 mov BYTE PTR [ecx], dl
000fc 8b 85 f0 fe ff
ff mov eax, DWORD PTR tv79[ebp]
00102 83 c0 01 add eax, 1
00105 89 85 f0 fe ff
ff mov DWORD PTR tv79[ebp], eax
0010b 8b 8d ec fe ff
ff mov ecx, DWORD PTR tv80[ebp]
00111 83 c1 01 add ecx, 1
00114 89 8d ec fe ff
ff mov DWORD PTR tv80[ebp], ecx
0011a 80 bd e7 fe ff
ff 00 cmp BYTE PTR tv81[ebp], 0
00121 75 bd jne SHORT $L16003
; 119 : else
00123 eb 62 jmp SHORT $L15882
$L15881:
; 120 : strcpy(DrvCompileInfo, DateCompiled+0);
00125 8d 55 f4 lea edx, DWORD PTR _DateCompiled$[ebp]
00128 89 95 e0 fe ff
ff mov DWORD PTR tv87[ebp], edx
0012e c7 85 dc fe ff
ff 00 00 00 00 mov DWORD PTR tv88[ebp], OFFSET FLAT:_DrvCompileInfo
00138 8b 85 dc fe ff
ff mov eax, DWORD PTR tv88[ebp]
0013e 89 85 d8 fe ff
ff mov DWORD PTR tv86[ebp], eax
$L16004:
00144 8b 8d e0 fe ff
ff mov ecx, DWORD PTR tv87[ebp]
0014a 8a 11 mov dl, BYTE PTR [ecx]
0014c 88 95 d7 fe ff
ff mov BYTE PTR tv89[ebp], dl
00152 8b 85 dc fe ff
ff mov eax, DWORD PTR tv88[ebp]
00158 8a 8d d7 fe ff
ff mov cl, BYTE PTR tv89[ebp]
0015e 88 08 mov BYTE PTR [eax], cl
00160 8b 95 e0 fe ff
ff mov edx, DWORD PTR tv87[ebp]
00166 83 c2 01 add edx, 1
00169 89 95 e0 fe ff
ff mov DWORD PTR tv87[ebp], edx
0016f 8b 85 dc fe ff
ff mov eax, DWORD PTR tv88[ebp]
00175 83 c0 01 add eax, 1
00178 89 85 dc fe ff
ff mov DWORD PTR tv88[ebp], eax
0017e 80 bd d7 fe ff
ff 00 cmp BYTE PTR tv89[ebp], 0
00185 75 bd jne SHORT $L16004
$L15882:
; 121 :
; 122 : strcat(DrvCompileInfo, TimeCompiledBase);
00187 c7 85 d0 fe ff
ff 00 00 00 00 mov DWORD PTR tv256[ebp], OFFSET FLAT:?TimeCompiledBase@?1??DriverEntry@@9@9
00191 8b 8d d0 fe ff
ff mov ecx, DWORD PTR tv256[ebp]
00197 89 8d cc fe ff
ff mov DWORD PTR tv258[ebp], ecx
$L16005:
0019d 8b 95 d0 fe ff
ff mov edx, DWORD PTR tv256[ebp]
001a3 8a 02 mov al, BYTE PTR [edx]
001a5 88 85 cb fe ff
ff mov BYTE PTR tv261[ebp], al
001ab ff 85 d0 fe ff
ff inc DWORD PTR tv256[ebp]
001b1 80 bd cb fe ff
ff 00 cmp BYTE PTR tv261[ebp], 0
001b8 75 e3 jne SHORT $L16005
001ba 8b 8d d0 fe ff
ff mov ecx, DWORD PTR tv256[ebp]
001c0 2b 8d cc fe ff
ff sub ecx, DWORD PTR tv258[ebp]
001c6 8b 95 cc fe ff
ff mov edx, DWORD PTR tv258[ebp]
001cc 89 95 c4 fe ff
ff mov DWORD PTR tv266[ebp], edx
001d2 89 8d c0 fe ff
ff mov DWORD PTR tv267[ebp], ecx
001d8 b8 00 00 00 00 mov eax, OFFSET FLAT:_DrvCompileInfo
001dd 83 c0 ff add eax, -1
001e0 89 85 bc fe ff
ff mov DWORD PTR tv270[ebp], eax
$L16006:
001e6 8b 8d bc fe ff
ff mov ecx, DWORD PTR tv270[ebp]
001ec 8a 51 01 mov dl, BYTE PTR [ecx+1]
001ef 88 95 bb fe ff
ff mov BYTE PTR tv273[ebp], dl
001f5 ff 85 bc fe ff
ff inc DWORD PTR tv270[ebp]
001fb 80 bd bb fe ff
ff 00 cmp BYTE PTR tv273[ebp], 0
00202 75 e2 jne SHORT $L16006
00204 8b bd bc fe ff
ff mov edi, DWORD PTR tv270[ebp]
0020a 8b b5 c4 fe ff
ff mov esi, DWORD PTR tv266[ebp]
00210 8b 85 c0 fe ff
ff mov eax, DWORD PTR tv267[ebp]
00216 8b c8 mov ecx, eax
00218 c1 e9 02 shr ecx, 2
0021b f3 a5 rep movsd
0021d 8b c8 mov ecx, eax
0021f 83 e1 03 and ecx, 3
00222 f3 a4 rep movsb
; 123 :
; 124 : DBGPRINT((JADrvNm "." JADrvRtnName " v" JADrvRtnVer " (compiled %s)\n", DrvCompileInfo));
00224 68 00 00 00 00 push OFFSET FLAT:$SG15883
00229 e8 00 00 00 00 call _DbgPrint
0022e 83 c4 04 add esp, 4
00231 68 00 00 00 00 push OFFSET FLAT:_DrvCompileInfo
00236 68 00 00 00 00 push OFFSET FLAT:$SG15884
0023b e8 00 00 00 00 call _DbgPrint
00240 83 c4 08 add esp, 8
; 125 :
; 126 : // End information output. ja, 29.11.2003.
; 127 :
; 128 : Status = NDIS_STATUS_SUCCESS;
00243 c7 85 f4 fe ff
ff 00 00 00 00 mov DWORD PTR _Status$[ebp], 0
; 129 : NdisAllocateSpinLock(&GlobalLock);
0024d 68 00 00 00 00 push OFFSET FLAT:_GlobalLock
00252 ff 15 00 00 00
00 call DWORD PTR __imp__NdisAllocateSpinLock@4
; 130 :
; 131 : NdisMInitializeWrapper(&NdisWrapperHandle, DriverObject, RegistryPath, NULL);
00258 6a 00 push 0
0025a 8b 4d 0c mov ecx, DWORD PTR _RegistryPath$[ebp]
0025d 51 push ecx
0025e 8b 55 08 mov edx, DWORD PTR _DriverObject$[ebp]
00261 52 push edx
00262 68 00 00 00 00 push OFFSET FLAT:_NdisWrapperHandle
00267 ff 15 00 00 00
00 call DWORD PTR __imp__NdisInitializeWrapper@16
$L15888:
; 132 :
; 133 : do
; 134 : {
; 135 : //
; 136 : // Register the miniport with NDIS. Note that it is the miniport
; 137 : // which was started as a driver and not the protocol. Also the miniport
; 138 : // must be registered prior to the protocol since the protocol's BindAdapter
; 139 : // handler can be initiated anytime and when it is, it must be ready to
; 140 : // start driver instances.
; 141 : //
; 142 :
; 143 : NdisZeroMemory(&MChars, sizeof(NDIS_MINIPORT_CHARACTERISTICS));
0026d b9 1f 00 00 00 mov ecx, 31 ; 0000001fH
00272 33 c0 xor eax, eax
00274 8d bd f8 fe ff
ff lea edi, DWORD PTR _MChars$[ebp]
0027a f3 ab rep stosd
; 144 :
; 145 : MChars.MajorNdisVersion = PASSTHRU_MAJOR_NDIS_VERSION;
0027c c6 85 f8 fe ff
ff 05 mov BYTE PTR _MChars$[ebp], 5
; 146 : MChars.MinorNdisVersion = PASSTHRU_MINOR_NDIS_VERSION;
00283 c6 85 f9 fe ff
ff 01 mov BYTE PTR _MChars$[ebp+1], 1
; 147 :
; 148 : MChars.InitializeHandler = MPInitialize;
0028a c7 85 14 ff ff
ff 00 00 00 00 mov DWORD PTR _MChars$[ebp+28], OFFSET FLAT:_MPInitialize@24
; 149 : MChars.QueryInformationHandler = MPQueryInformation;
00294 c7 85 1c ff ff
ff 00 00 00 00 mov DWORD PTR _MChars$[ebp+36], OFFSET FLAT:_MPQueryInformation@24
; 150 : MChars.SetInformationHandler = MPSetInformation;
0029e c7 85 2c ff ff
ff 00 00 00 00 mov DWORD PTR _MChars$[ebp+52], OFFSET FLAT:_MPSetInformation@24
; 151 : MChars.ResetHandler = NULL;
002a8 c7 85 24 ff ff
ff 00 00 00 00 mov DWORD PTR _MChars$[ebp+44], 0
; 152 : MChars.TransferDataHandler = MPTransferData;
002b2 c7 85 30 ff ff
ff 00 00 00 00 mov DWORD PTR _MChars$[ebp+56], OFFSET FLAT:_MPTransferData@24
; 153 : MChars.HaltHandler = MPHalt;
002bc c7 85 0c ff ff
ff 00 00 00 00 mov DWORD PTR _MChars$[ebp+20], OFFSET FLAT:_MPHalt@4
; 154 : #ifdef NDIS51_MINIPORT
; 155 : MChars.CancelSendPacketsHandler = MPCancelSendPackets;
002c6 c7 85 58 ff ff
ff 00 00 00 00 mov DWORD PTR _MChars$[ebp+96], OFFSET FLAT:_MPCancelSendPackets@8
; 156 : MChars.PnPEventNotifyHandler = MPDevicePnPEvent;
002d0 c7 85 5c ff ff
ff 00 00 00 00 mov DWORD PTR _MChars$[ebp+100], OFFSET FLAT:_MPDevicePnPEvent@16
; 157 : MChars.AdapterShutdownHandler = MPAdapterShutdown;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -