📄 wmirtns.cod
字号:
; 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 + -