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

📄 passthru.cod

📁 James Antognini和Tom Divine提供的PASSTHRU的编成实例。
💻 COD
📖 第 1 页 / 共 3 页
字号:
; 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 + -