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

📄 wmirtns.cod

📁 James Antognini和Tom Divine提供的PASSTHRU的编成实例。
💻 COD
📖 第 1 页 / 共 2 页
字号:

; 80   :  NDIS_STATUS             status;
; 81   :  ULONG                   ulArrStr;
; 82   :  LOCK_STATE              saveLockState;                                                                                                           
; 83   :                                                                                                                                              
; 84   :  NdisAcquireReadWriteLock(                            // Get lock.                                                                           
; 85   :                           &pAdapt->IPAddrArrLock,
; 86   :                           TRUE,                       // Write access.
; 87   :                           &saveLockState
; 88   :                          );

  00046	8d 45 f4	 lea	 eax, DWORD PTR _saveLockState$[ebp]
  00049	50		 push	 eax
  0004a	6a 01		 push	 1
  0004c	8b 4d 08	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  0004f	81 c1 d0 00 00
	00		 add	 ecx, 208		; 000000d0H
  00055	51		 push	 ecx
  00056	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisAcquireReadWriteLock@12
$L15627:

; 89   :                                                                                                                                              
; 90   :  do                                                                                                                                          
; 91   :    {                                                                                                                                         
; 92   :     if (NULL!=pAdapt->pIPAddrArray)                   // Answer area allocated (this should be true except when the first set is being done)?                                                              

  0005c	8b 55 08	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  0005f	83 ba e0 02 00
	00 00		 cmp	 DWORD PTR [edx+736], 0
  00066	74 24		 je	 SHORT $L15630

; 93   :       {
; 94   :        // Note:  A possible optimization is to leave the existing area in place if it is big enough to accommodate the current request.
; 95   : 
; 96   :        ulArrStr = pAdapt->pIPAddrArray->ulArrayStr;   // Get structure's size.

  00068	8b 45 08	 mov	 eax, DWORD PTR _pAdapt$[ebp]
  0006b	8b 88 e0 02 00
	00		 mov	 ecx, DWORD PTR [eax+736]
  00071	8b 11		 mov	 edx, DWORD PTR [ecx]
  00073	89 55 fc	 mov	 DWORD PTR _ulArrStr$[ebp], edx

; 97   :        NdisFreeMemory(                                // Free structure's storage.
; 98   :                       pAdapt->pIPAddrArray,
; 99   :                       ulArrStr,
; 100  :                       0
; 101  :                      );

  00076	6a 00		 push	 0
  00078	8b 45 fc	 mov	 eax, DWORD PTR _ulArrStr$[ebp]
  0007b	50		 push	 eax
  0007c	8b 4d 08	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  0007f	8b 91 e0 02 00
	00		 mov	 edx, DWORD PTR [ecx+736]
  00085	52		 push	 edx
  00086	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisFreeMemory@12
$L15630:

; 102  :       }
; 103  :        
; 104  :     ulArrStr =                                        // Get size of fixed portion.
; 105  :       FIELD_OFFSET(IPAddrFilterArray, IPAddrArray) +
; 106  :       FIELD_OFFSET(PassthruIPAddrArray, IPAddrArray);  

  0008c	c7 45 fc 08 00
	00 00		 mov	 DWORD PTR _ulArrStr$[ebp], 8

; 107  :     ulArrStr += ulElems*sizeof(ULONG);                // Add size of variable portion.

  00093	8b 45 0c	 mov	 eax, DWORD PTR _ulElems$[ebp]
  00096	8b 4d fc	 mov	 ecx, DWORD PTR _ulArrStr$[ebp]
  00099	8d 14 81	 lea	 edx, DWORD PTR [ecx+eax*4]
  0009c	89 55 fc	 mov	 DWORD PTR _ulArrStr$[ebp], edx

; 108  :        
; 109  :     status =                                          // Allocate nonpaged storage for IP-address-array structure.
; 110  :       NdisAllocateMemoryWithTag((PVOID *)&pAdapt->pIPAddrArray,
; 111  :                                 ulArrStr,
; 112  :                                 TAG
; 113  :                                );

  0009f	68 61 50 6d 49	 push	 1231900769		; 496d5061H
  000a4	8b 45 fc	 mov	 eax, DWORD PTR _ulArrStr$[ebp]
  000a7	50		 push	 eax
  000a8	8b 4d 08	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  000ab	81 c1 e0 02 00
	00		 add	 ecx, 736		; 000002e0H
  000b1	51		 push	 ecx
  000b2	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisAllocateMemoryWithTag@12
  000b8	89 45 f8	 mov	 DWORD PTR _status$[ebp], eax

; 114  :        
; 115  :     if (NDIS_STATUS_SUCCESS!=status)       

  000bb	83 7d f8 00	 cmp	 DWORD PTR _status$[ebp], 0
  000bf	74 23		 je	 SHORT $L15641

; 116  :       {       
; 117  :        DBGPRINT(("PassthruWMISetAddrArray():  Couldn't get storage\n"));                                            

  000c1	68 00 00 00 00	 push	 OFFSET FLAT:$SG15642
  000c6	e8 00 00 00 00	 call	 _DbgPrint
  000cb	83 c4 04	 add	 esp, 4
  000ce	68 00 00 00 00	 push	 OFFSET FLAT:$SG15643
  000d3	e8 00 00 00 00	 call	 _DbgPrint
  000d8	83 c4 04	 add	 esp, 4

; 118  :        status = NDIS_STATUS_RESOURCES;       

  000db	c7 45 f8 9a 00
	00 c0		 mov	 DWORD PTR _status$[ebp], -1073741670 ; c000009aH

; 119  :        goto Done;

  000e2	eb 59		 jmp	 SHORT $Done$15646
$L15641:

; 120  :        break;       
; 121  :       }       
; 122  : 
; 123  :     pAdapt->pIPAddrArray->ulArrayStr = ulArrStr;      // Save structure size.                                                                                                                                             

  000e4	8b 55 08	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  000e7	8b 82 e0 02 00
	00		 mov	 eax, DWORD PTR [edx+736]
  000ed	8b 4d fc	 mov	 ecx, DWORD PTR _ulArrStr$[ebp]
  000f0	89 08		 mov	 DWORD PTR [eax], ecx

; 124  :                                                                                                                                              
; 125  :     if (0!=ulElems)                                   // Non-zero number of array elements?                                                                                                                                             

  000f2	83 7d 0c 00	 cmp	 DWORD PTR _ulElems$[ebp], 0
  000f6	74 2b		 je	 SHORT $L15648

; 126  :       {
; 127  :        NdisMoveMemory(                                // Copy supplied array.
; 128  :                       &pAdapt->pIPAddrArray->IPAddrArray,
; 129  :                       pInArr,
; 130  :                       FIELD_OFFSET(PassthruIPAddrArray, IPAddrArray) +
; 131  :                         (pInArr->NumberElements*sizeof(pInArr->IPAddrArray))
; 132  :                      );

  000f8	8b 55 10	 mov	 edx, DWORD PTR _pInArr$[ebp]
  000fb	8b 02		 mov	 eax, DWORD PTR [edx]
  000fd	8d 0c 85 04 00
	00 00		 lea	 ecx, DWORD PTR [eax*4+4]
  00104	8b 75 10	 mov	 esi, DWORD PTR _pInArr$[ebp]
  00107	8b 55 08	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  0010a	8b ba e0 02 00
	00		 mov	 edi, DWORD PTR [edx+736]
  00110	83 c7 04	 add	 edi, 4
  00113	8b c1		 mov	 eax, ecx
  00115	c1 e9 02	 shr	 ecx, 2
  00118	f3 a5		 rep movsd
  0011a	8b c8		 mov	 ecx, eax
  0011c	83 e1 03	 and	 ecx, 3
  0011f	f3 a4		 rep movsb

; 133  : 
; 134  : //     ULONG i;
; 135  : //     for (i = 0; i < pAdapt->pIPAddrArray->IPAddrArray.NumberElements; i ++)
; 136  : //       {
; 137  : //        PULONG pI = ((PULONG)&pAdapt->pIPAddrArray->IPAddrArray.IPAddrArray) + i;
; 138  : //        PUCHAR pC = (PUCHAR)pI;
; 139  : //        DBGPRINT(("IP address = %03d.%03d.%03d.%03d\n", *pC, *(pC+1), *(pC+2), *(pC+3)));
; 140  : //       }
; 141  :       }
; 142  :     else                                                                                                                                             

  00121	eb 10		 jmp	 SHORT $L15628
$L15648:

; 143  :       pAdapt->pIPAddrArray->                          // Set default IP-address array.                                                                                                                                             
; 144  :                 IPAddrArray.NumberElements = 0;

  00123	8b 4d 08	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  00126	8b 91 e0 02 00
	00		 mov	 edx, DWORD PTR [ecx+736]
  0012c	c7 42 04 00 00
	00 00		 mov	 DWORD PTR [edx+4], 0
$L15628:

; 145  :                                                                                                                                              
; 146  :    } while(0);                                                                                                                               

  00133	33 c0		 xor	 eax, eax
  00135	85 c0		 test	 eax, eax
  00137	0f 85 1f ff ff
	ff		 jne	 $L15627
$Done$15646:

; 147  :                                                                                                                                              
; 148  : Done:                                                                                                                                             
; 149  :  NdisReleaseReadWriteLock(                            // Release lock.                                                                           
; 150  :                           &pAdapt->IPAddrArrLock,
; 151  :                           &saveLockState
; 152  :                          );

  0013d	8d 4d f4	 lea	 ecx, DWORD PTR _saveLockState$[ebp]
  00140	51		 push	 ecx
  00141	8b 55 08	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  00144	81 c2 d0 00 00
	00		 add	 edx, 208		; 000000d0H
  0014a	52		 push	 edx
  0014b	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisReleaseReadWriteLock@8

; 153  : 
; 154  :  return status;

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

; 155  : }

  00154	5f		 pop	 edi
  00155	5e		 pop	 esi
  00156	8b e5		 mov	 esp, ebp
  00158	5d		 pop	 ebp
  00159	c2 0c 00	 ret	 12			; 0000000cH
_PassthruWMISetAddrArray@12 ENDP
_TEXT	ENDS
END

⌨️ 快捷键说明

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