📄 miniport.cod
字号:
0027e 8b 55 0c mov edx, DWORD PTR _Packet$[ebp]
00281 0f b7 42 1e movzx eax, WORD PTR [edx+30]
00285 8b 4d 0c mov ecx, DWORD PTR _Packet$[ebp]
00288 8b 54 01 18 mov edx, DWORD PTR [ecx+eax+24]
0028c 89 55 ec mov DWORD PTR _MediaSpecificInfo$[ebp], edx
0028f 8b 45 0c mov eax, DWORD PTR _Packet$[ebp]
00292 0f b7 48 1e movzx ecx, WORD PTR [eax+30]
00296 8b 55 0c mov edx, DWORD PTR _Packet$[ebp]
00299 8b 44 0a 14 mov eax, DWORD PTR [edx+ecx+20]
0029d 89 45 f8 mov DWORD PTR _MediaSpecificInfoSize$[ebp], eax
$L16126:
; 438 :
; 439 : if (MediaSpecificInfo || MediaSpecificInfoSize)
002a0 83 7d ec 00 cmp DWORD PTR _MediaSpecificInfo$[ebp], 0
002a4 75 06 jne SHORT $L16132
002a6 83 7d f8 00 cmp DWORD PTR _MediaSpecificInfoSize$[ebp], 0
002aa 74 43 je SHORT $L16131
$L16132:
; 440 : {
; 441 : NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(MyPacket,
; 442 : MediaSpecificInfo,
; 443 : MediaSpecificInfoSize);
002ac 8b 4d f0 mov ecx, DWORD PTR _MyPacket$[ebp]
002af 0f b6 51 1d movzx edx, BYTE PTR [ecx+29]
002b3 81 e2 80 00 00
00 and edx, 128 ; 00000080H
002b9 85 d2 test edx, edx
002bb 74 32 je SHORT $L16131
002bd 8b 45 f0 mov eax, DWORD PTR _MyPacket$[ebp]
002c0 0f b6 48 1d movzx ecx, BYTE PTR [eax+29]
002c4 83 c9 40 or ecx, 64 ; 00000040H
002c7 8b 55 f0 mov edx, DWORD PTR _MyPacket$[ebp]
002ca 88 4a 1d mov BYTE PTR [edx+29], cl
002cd 8b 45 f0 mov eax, DWORD PTR _MyPacket$[ebp]
002d0 0f b7 48 1e movzx ecx, WORD PTR [eax+30]
002d4 8b 55 f0 mov edx, DWORD PTR _MyPacket$[ebp]
002d7 8b 45 ec mov eax, DWORD PTR _MediaSpecificInfo$[ebp]
002da 89 44 0a 18 mov DWORD PTR [edx+ecx+24], eax
002de 8b 4d f0 mov ecx, DWORD PTR _MyPacket$[ebp]
002e1 0f b7 51 1e movzx edx, WORD PTR [ecx+30]
002e5 8b 45 f0 mov eax, DWORD PTR _MyPacket$[ebp]
002e8 8b 4d f8 mov ecx, DWORD PTR _MediaSpecificInfoSize$[ebp]
002eb 89 4c 10 14 mov DWORD PTR [eax+edx+20], ecx
$L16131:
; 444 : }
; 445 :
; 446 : NdisSend(&Status,
; 447 : pAdapt->BindingHandle,
; 448 : MyPacket);
002ef 8b 55 f0 mov edx, DWORD PTR _MyPacket$[ebp]
002f2 52 push edx
002f3 8b 45 fc mov eax, DWORD PTR _pAdapt$[ebp]
002f6 8b 48 04 mov ecx, DWORD PTR [eax+4]
002f9 51 push ecx
002fa 8d 55 f4 lea edx, DWORD PTR _Status$[ebp]
002fd 52 push edx
002fe e8 00 00 00 00 call _NdisSend@12
; 449 :
; 450 :
; 451 : if (Status != NDIS_STATUS_PENDING)
00303 81 7d f4 03 01
00 00 cmp DWORD PTR _Status$[ebp], 259 ; 00000103H
0030a 74 4c je SHORT $L16140
; 452 : {
; 453 : #ifndef WIN9X
; 454 : NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
0030c 8b 45 f0 mov eax, DWORD PTR _MyPacket$[ebp]
0030f 50 push eax
00310 8b 4d 0c mov ecx, DWORD PTR _Packet$[ebp]
00313 51 push ecx
00314 ff 15 00 00 00
00 call DWORD PTR __imp__NdisIMCopySendCompletePerPacketInfo@8
; 455 : #endif
; 456 : NdisFreePacket(MyPacket);
0031a 8b 55 f0 mov edx, DWORD PTR _MyPacket$[ebp]
0031d 52 push edx
0031e ff 15 00 00 00
00 call DWORD PTR __imp__NdisFreePacket@4
; 457 : ADAPT_DECR_PENDING_SENDS(pAdapt);
00324 8b 45 fc mov eax, DWORD PTR _pAdapt$[ebp]
00327 05 98 00 00 00 add eax, 152 ; 00000098H
0032c 50 push eax
0032d ff 15 00 00 00
00 call DWORD PTR __imp__NdisAcquireSpinLock@4
00333 8b 4d fc mov ecx, DWORD PTR _pAdapt$[ebp]
00336 8b 91 cc 00 00
00 mov edx, DWORD PTR [ecx+204]
0033c 83 ea 01 sub edx, 1
0033f 8b 45 fc mov eax, DWORD PTR _pAdapt$[ebp]
00342 89 90 cc 00 00
00 mov DWORD PTR [eax+204], edx
00348 8b 4d fc mov ecx, DWORD PTR _pAdapt$[ebp]
0034b 81 c1 98 00 00
00 add ecx, 152 ; 00000098H
00351 51 push ecx
00352 ff 15 00 00 00
00 call DWORD PTR __imp__NdisReleaseSpinLock@4
$L16140:
; 458 : }
; 459 : }
; 460 : else
00358 eb 34 jmp SHORT $L16141
$L16115:
; 461 : {
; 462 : ADAPT_DECR_PENDING_SENDS(pAdapt);
0035a 8b 55 fc mov edx, DWORD PTR _pAdapt$[ebp]
0035d 81 c2 98 00 00
00 add edx, 152 ; 00000098H
00363 52 push edx
00364 ff 15 00 00 00
00 call DWORD PTR __imp__NdisAcquireSpinLock@4
0036a 8b 45 fc mov eax, DWORD PTR _pAdapt$[ebp]
0036d 8b 88 cc 00 00
00 mov ecx, DWORD PTR [eax+204]
00373 83 e9 01 sub ecx, 1
00376 8b 55 fc mov edx, DWORD PTR _pAdapt$[ebp]
00379 89 8a cc 00 00
00 mov DWORD PTR [edx+204], ecx
0037f 8b 45 fc mov eax, DWORD PTR _pAdapt$[ebp]
00382 05 98 00 00 00 add eax, 152 ; 00000098H
00387 50 push eax
00388 ff 15 00 00 00
00 call DWORD PTR __imp__NdisReleaseSpinLock@4
$L16141:
; 463 : //
; 464 : // We are out of packets. Silently drop it. Alternatively we can deal with it:
; 465 : // - By keeping separate send and receive pools
; 466 : // - Dynamically allocate more pools as needed and free them when not needed
; 467 : //
; 468 : }
; 469 :
; 470 : return(Status);
0038e 8b 45 f4 mov eax, DWORD PTR _Status$[ebp]
$L16087:
; 471 : }
00391 5f pop edi
00392 5e pop esi
00393 8b e5 mov esp, ebp
00395 5d pop ebp
00396 c2 0c 00 ret 12 ; 0000000cH
_MPSend@12 ENDP
_TEXT ENDS
PUBLIC _MPSendPackets@12
EXTRN _FilterPacket@20:NEAR
EXTRN __imp__NdisInterlockedIncrement@4:NEAR
; COMDAT _MPSendPackets@12
_TEXT SEGMENT
$SG16170 DB 'g:\pcadev\ndisim\passthruex\part2\james\james\sys\minipo'
DB 'rt.c', 00H
ORG $+3
$SG16171 DB 'pStack', 00H
; Function compile flags: /Odt
tv88 = -48
_SendRsvd$16198 = -44
_Remaining$16167 = -37
_pStack$16166 = -36
_Packet$16160 = -32
_MyPacket$16161 = -28
_bDecision$16159 = -21
_MediaSpecificInfo$ = -20
_Status$ = -16
_MediaSpecificInfoSize$ = -12
_i$ = -8
_pAdapt$ = -4
_MiniportAdapterContext$ = 8
_PacketArray$ = 12
_NumberOfPackets$ = 16
_MPSendPackets@12 PROC NEAR ; COMDAT
; 498 : {
00047 55 push ebp
00048 8b ec mov ebp, esp
0004a 83 ec 30 sub esp, 48 ; 00000030H
0004d 56 push esi
0004e 57 push edi
; 499 : PADAPT pAdapt = (PADAPT)MiniportAdapterContext;
0004f 8b 45 08 mov eax, DWORD PTR _MiniportAdapterContext$[ebp]
00052 89 45 fc mov DWORD PTR _pAdapt$[ebp], eax
; 500 : NDIS_STATUS Status;
; 501 : UINT i;
; 502 : PVOID MediaSpecificInfo = NULL;
00055 c7 45 ec 00 00
00 00 mov DWORD PTR _MediaSpecificInfo$[ebp], 0
; 503 : UINT MediaSpecificInfoSize = 0;
0005c c7 45 f4 00 00
00 00 mov DWORD PTR _MediaSpecificInfoSize$[ebp], 0
; 504 :
; 505 : // Bump entry count. ja, 02.10.2003.
; 506 :
; 507 : NdisInterlockedIncrement(&pAdapt->PassThruStats.MPSendPktsSeen);
00063 8b 4d fc mov ecx, DWORD PTR _pAdapt$[ebp]
00066 81 c1 f4 02 00
00 add ecx, 756 ; 000002f4H
0006c 51 push ecx
0006d ff 15 00 00 00
00 call DWORD PTR __imp__NdisInterlockedIncrement@4
; 508 :
; 509 : // DBGPRINT(("MPSendPackets: pAdapt = 0x%08x, MPSendPktsCt = %d\n", pAdapt, pAdapt->PassThruStats.MPSendPktsSeen));
; 510 :
; 511 : for (i = 0; i < NumberOfPackets; i++)
00073 c7 45 f8 00 00
00 00 mov DWORD PTR _i$[ebp], 0
0007a eb 09 jmp SHORT $L16156
$L16157:
0007c 8b 55 f8 mov edx, DWORD PTR _i$[ebp]
0007f 83 c2 01 add edx, 1
00082 89 55 f8 mov DWORD PTR _i$[ebp], edx
$L16156:
00085 8b 45 f8 mov eax, DWORD PTR _i$[ebp]
00088 3b 45 10 cmp eax, DWORD PTR _NumberOfPackets$[ebp]
0008b 0f 83 48 04 00
00 jae $L16148
; 512 : {
; 513 : BOOLEAN bDecision; // ja, 02.10.2003
; 514 : PNDIS_PACKET Packet, MyPacket;
; 515 :
; 516 : Packet = PacketArray[i];
00091 8b 4d f8 mov ecx, DWORD PTR _i$[ebp]
00094 8b 55 0c mov edx, DWORD PTR _PacketArray$[ebp]
00097 8b 04 8a mov eax, DWORD PTR [edx+ecx*4]
0009a 89 45 e0 mov DWORD PTR _Packet$16160[ebp], eax
; 517 :
; 518 : //
; 519 : // The driver should fail the send if the virtual miniport is in low
; 520 : // power state
; 521 : //
; 522 : if (pAdapt->MPDeviceState > NdisDeviceStateD0)
0009d 8b 4d fc mov ecx, DWORD PTR _pAdapt$[ebp]
000a0 83 b9 a0 00 00
00 01 cmp DWORD PTR [ecx+160], 1
000a7 7e 1e jle SHORT $L16162
; 523 : {
; 524 : NdisMSendComplete(ADAPT_MINIPORT_HANDLE(pAdapt),
; 525 : Packet,
; 526 : NDIS_STATUS_FAILURE);
000a9 68 01 00 00 c0 push -1073741823 ; c0000001H
000ae 8b 55 e0 mov edx, DWORD PTR _Packet$16160[ebp]
000b1 52 push edx
000b2 8b 45 fc mov eax, DWORD PTR _pAdapt$[ebp]
000b5 8b 48 08 mov ecx, DWORD PTR [eax+8]
000b8 51 push ecx
000b9 8b 55 fc mov edx, DWORD PTR _pAdapt$[ebp]
000bc 8b 42 08 mov eax, DWORD PTR [edx+8]
000bf ff 90 ec 00 00
00 call DWORD PTR [eax+236]
; 527 : continue;
000c5 eb b5 jmp SHORT $L16157
$L16162:
; 528 : }
; 529 :
; 530 : #ifdef NDIS51
; 531 :
; 532 : //
; 533 : // Use NDIS 5.1 packet stacking:
; 534 : //
; 535 : {
; 536 : PNDIS_PACKET_STACK pStack;
; 537 : BOOLEAN Remaining;
; 538 :
; 539 : //
; 540 : // Packet stacks: Check if we can use the same packet for sending down.
; 541 : //
; 542 : pStack = NdisIMGetCurrentPacketStack(Packet, &Remaining);
000c7 8d 4d db lea ecx, DWORD PTR _Remaining$16167[ebp]
000ca 51 push ecx
000cb 8b 55 e0 mov edx, DWORD PTR _Packet$16160[ebp]
000ce 52 push edx
000cf ff 15 00 00 00
00 call DWORD PTR __imp__NdisIMGetCurrentPacketStack@8
000d5 89 45 dc mov DWORD PTR _pStack$16166[ebp], eax
; 543 : if (Remaining)
000d8 0f b6 45 db movzx eax, BYTE PTR _Remaining$16167[ebp]
000dc 85 c0 test eax, eax
000de 0f 84 5a 01 00
00 je $L16185
; 544 : {
; 545 : //
; 546 : // We can reuse "Packet".
; 547 : //
; 548 : // NOTE: if we needed to keep per-packet information in packets
; 549 : // sent down, we can use pStack->IMReserved[].
; 550 : //
; 551 : ASSERT(pStack);
000e4 83 7d dc 00 cmp DWORD PTR _pStack$16166[ebp], 0
000e8 75 20 jne SHORT $L16596
000ea 6a 00 push 0
000ec 68 27 02 00 00 push 551 ; 00000227H
000f1 68 00 00 00 00 push OFFSET FLAT:$SG16170
000f6 68 00 00 00 00 push OFFSET FLAT:$SG16171
000fb ff 15 00 00 00
00 call DWORD PTR __imp__RtlAssert@16
00101 c7 45 d0 00 00
00 00 mov DWORD PTR tv88[ebp], 0
00108 eb 07 jmp SHORT $L16597
$L16596:
0010a c7 45 d0 01 00
00 00 mov DWORD PTR tv88[ebp], 1
$L16597:
; 552 : //
; 553 : // If the below miniport is going to low power state, stop sending down any packet.
; 554 : //
; 555 : NdisAcquireSpinLock(&pAdapt->Lock);
00111 8b 4d fc mov ecx, DWORD PTR _pAdapt$[ebp]
00114 81 c1 98 00 00
00 add ecx, 152 ; 00000098H
0011a 51 push ecx
0011b ff 15 00 00 00
00 call DWORD PTR __imp__NdisAcquireSpinLock@4
; 556 : if (pAdapt->PTDeviceState > NdisDeviceStateD0)
00121 8b 55 fc mov edx, DWORD PTR _pAdapt$[ebp]
00124 83 ba a4 00 00
00 01 cmp DWORD PTR [edx+164], 1
0012b 7e 30 jle SHORT $L16172
; 557 : {
; 558 : NdisReleaseSpinLock(&pAdapt->Lock);
0012d 8b 45 fc mov eax, DWORD PTR _pAdapt$[ebp]
00130 05 98 00 00 00 add eax, 152 ; 00000098H
00135 50 push eax
00136 ff 15 00 00 00
00 call DWORD PTR __imp__NdisReleaseSpinLock@4
; 559 : NdisMSendComplete(ADAPT_MINIPORT_HANDLE(pAdapt),
; 560 : Packet,
; 561 : NDIS_STATUS_FAILURE);
0013c 68 01 00 00 c0 push -1073741823 ; c0000001H
00141 8b 4d e0 mov ecx, DWORD PTR _Packet$16160[ebp]
00144 51 push ecx
00145 8b 55 fc mov edx, DWORD PTR _pAdapt$[ebp]
00148 8b 42 08 mov eax, DWORD PTR [edx+8]
0014b 50 push eax
0014c 8b 4d fc mov ecx, DWORD PTR _pAdapt$[ebp]
0014f 8b 51 08 mov edx, DWORD PTR [ecx+8]
00152 ff 92 ec 00 00
00 call DWORD PTR [edx+236]
; 562 : }
; 563 : else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -