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

📄 wmirtns.cod

📁 James Antognini和Tom Divine提供的PASSTHRU的编成实例。
💻 COD
📖 第 1 页 / 共 2 页
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.00.9178 

	TITLE	.\wmirtns.cpp
	.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@_0CF@DMGHPOPJ@h?3?2winddk?22600?2inc?2ddk?2wdm?2wxp?2w@
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
;	COMDAT ??_C@_0BN@LNCICLID@allocateCommonBuffer?5?$CB?$DN?5NULL?$AA@
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
;	COMDAT ??_C@_0BJ@FEHDECOO@freeCommonBuffer?5?$CB?$DN?5NULL?$AA@
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
;	COMDAT ??_C@_0BP@KANDHLLG@allocateAdapterChannel?5?$CB?$DN?5NULL?$AA@
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
;	COMDAT ??_C@_0BM@EHBDCMHD@flushAdapterBuffers?5?$CB?$DN?5NULL?$AA@
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
;	COMDAT ??_C@_0BL@EEOOFOPL@freeAdapterChannel?5?$CB?$DN?5NULL?$AA@
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
;	COMDAT ??_C@_0BJ@LFNJJHAK@freeMapRegisters?5?$CB?$DN?5NULL?$AA@
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
;	COMDAT ??_C@_0BE@JFCEOPNH@mapTransfer?5?$CB?$DN?5NULL?$AA@
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
;	COMDAT ??_C@_0BI@NHKOAKLK@getDmaAlignment?5?$CB?$DN?5NULL?$AA@
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
;	COMDAT ??_C@_0BH@IOFGABID@readDmaCounter?5?$CB?$DN?5NULL?$AA@
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
;	COMDAT _IsEqualGUID@8
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _==@8
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _PassthruWMIGetAddrArray@12
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _PassthruWMISetAddrArray@12
_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	_PassthruWMIGetAddrArray@12
EXTRN	__imp__NdisAcquireReadWriteLock@12:NEAR
EXTRN	__imp__NdisReleaseReadWriteLock@8:NEAR
; Function compile flags: /Odt
; File g:\pcadev\ndisim\passthruex\part2\james\james\sys\wmirtns.cpp
;	COMDAT _PassthruWMIGetAddrArray@12
_TEXT	SEGMENT
_saveLockState$ = -12
_status$ = -8
_ulBfrNeeded$ = -4
_pAdapt$ = 8
_pUlInArr$ = 12
_pInArr$ = 16
_PassthruWMIGetAddrArray@12 PROC NEAR			; COMDAT

; 36   : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	83 ec 0c	 sub	 esp, 12			; 0000000cH
  00006	56		 push	 esi
  00007	57		 push	 edi

; 37   :  NDIS_STATUS             status = NDIS_STATUS_SUCCESS;

  00008	c7 45 f8 00 00
	00 00		 mov	 DWORD PTR _status$[ebp], 0

; 38   :  LOCK_STATE              saveLockState;                                                                                                           
; 39   :  ULONG                   ulBfrNeeded;                                                                
; 40   : 
; 41   :  NdisAcquireReadWriteLock(                            // Get lock.                                                                           
; 42   :                           &pAdapt->IPAddrArrLock,
; 43   :                           FALSE,                      // Read access.
; 44   :                           &saveLockState
; 45   :                          );

  0000f	8d 45 f4	 lea	 eax, DWORD PTR _saveLockState$[ebp]
  00012	50		 push	 eax
  00013	6a 00		 push	 0
  00015	8b 4d 08	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  00018	81 c1 d0 00 00
	00		 add	 ecx, 208		; 000000d0H
  0001e	51		 push	 ecx
  0001f	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisAcquireReadWriteLock@12

; 46   :                                                                                                                                              
; 47   :  ulBfrNeeded = pAdapt->pIPAddrArray->ulArrayStr -     // Determine amount of space needed to set answer.
; 48   :                FIELD_OFFSET(IPAddrFilterArray, IPAddrArray);

  00025	8b 55 08	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  00028	8b 82 e0 02 00
	00		 mov	 eax, DWORD PTR [edx+736]
  0002e	8b 08		 mov	 ecx, DWORD PTR [eax]
  00030	83 e9 04	 sub	 ecx, 4
  00033	89 4d fc	 mov	 DWORD PTR _ulBfrNeeded$[ebp], ecx

; 49   :                                                                                                                                                           
; 50   :  if (ulBfrNeeded>*pUlInArr)                           // Is provided structure too small?                                                                                

  00036	8b 55 0c	 mov	 edx, DWORD PTR _pUlInArr$[ebp]
  00039	8b 45 fc	 mov	 eax, DWORD PTR _ulBfrNeeded$[ebp]
  0003c	3b 02		 cmp	 eax, DWORD PTR [edx]
  0003e	76 09		 jbe	 SHORT $L15616

; 51   :    status = NDIS_STATUS_BUFFER_TOO_SHORT;                                                                                                                      

  00040	c7 45 f8 16 00
	01 c0		 mov	 DWORD PTR _status$[ebp], -1073676266 ; c0010016H

; 52   :  else                                                                                                                                                     

  00047	eb 20		 jmp	 SHORT $L15618
$L15616:

; 53   :    NdisMoveMemory(pInArr,                             // Copy address array into provided structure.
; 54   :                   &pAdapt->pIPAddrArray->IPAddrArray,
; 55   :                   ulBfrNeeded
; 56   :                  );

  00049	8b 4d fc	 mov	 ecx, DWORD PTR _ulBfrNeeded$[ebp]
  0004c	8b 55 08	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  0004f	8b b2 e0 02 00
	00		 mov	 esi, DWORD PTR [edx+736]
  00055	83 c6 04	 add	 esi, 4
  00058	8b 7d 10	 mov	 edi, DWORD PTR _pInArr$[ebp]
  0005b	8b c1		 mov	 eax, ecx
  0005d	c1 e9 02	 shr	 ecx, 2
  00060	f3 a5		 rep movsd
  00062	8b c8		 mov	 ecx, eax
  00064	83 e1 03	 and	 ecx, 3
  00067	f3 a4		 rep movsb
$L15618:

; 57   :                                                                                                                                                           
; 58   :  *pUlInArr = ulBfrNeeded;                             // Show amount that is needed or that was actually used.                                            

  00069	8b 4d 0c	 mov	 ecx, DWORD PTR _pUlInArr$[ebp]
  0006c	8b 55 fc	 mov	 edx, DWORD PTR _ulBfrNeeded$[ebp]
  0006f	89 11		 mov	 DWORD PTR [ecx], edx

; 59   : 
; 60   :  NdisReleaseReadWriteLock(                            // Release lock.                                                                           
; 61   :                           &pAdapt->IPAddrArrLock,
; 62   :                           &saveLockState
; 63   :                          );

  00071	8d 45 f4	 lea	 eax, DWORD PTR _saveLockState$[ebp]
  00074	50		 push	 eax
  00075	8b 4d 08	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  00078	81 c1 d0 00 00
	00		 add	 ecx, 208		; 000000d0H
  0007e	51		 push	 ecx
  0007f	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisReleaseReadWriteLock@8

; 64   : 
; 65   :  return status;

  00085	8b 45 f8	 mov	 eax, DWORD PTR _status$[ebp]

; 66   : }

  00088	5f		 pop	 edi
  00089	5e		 pop	 esi
  0008a	8b e5		 mov	 esp, ebp
  0008c	5d		 pop	 ebp
  0008d	c2 0c 00	 ret	 12			; 0000000cH
_PassthruWMIGetAddrArray@12 ENDP
_TEXT	ENDS
PUBLIC	_PassthruWMISetAddrArray@12
EXTRN	__imp__NdisAllocateMemoryWithTag@12:NEAR
EXTRN	__imp__NdisFreeMemory@12:NEAR
EXTRN	_DbgPrint:NEAR
;	COMDAT _PassthruWMISetAddrArray@12
_TEXT	SEGMENT
$SG15642 DB	'Passthru: ', 00H
	ORG $+1
$SG15643 DB	'PassthruWMISetAddrArray():  Couldn''t get storage', 0aH, 00H
; Function compile flags: /Odt
_saveLockState$ = -12
_status$ = -8
_ulArrStr$ = -4
_pAdapt$ = 8
_ulElems$ = 12
_pInArr$ = 16
_PassthruWMISetAddrArray@12 PROC NEAR			; COMDAT

; 79   : {

  0003e	55		 push	 ebp
  0003f	8b ec		 mov	 ebp, esp
  00041	83 ec 0c	 sub	 esp, 12			; 0000000cH
  00044	56		 push	 esi
  00045	57		 push	 edi

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -