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

📄 miniport.cod

📁 James Antognini和Tom Divine提供的PASSTHRU的编成实例。
💻 COD
📖 第 1 页 / 共 5 页
字号:
  00158	e9 dc 00 00 00	 jmp	 $L16176
$L16172:

; 564  :                 {
; 565  : //........................................            // ja, 02.10.2003.
; 566  : 
; 567  : //DBGPRINT(("MPSendPackets():  In packet stacking\n"));
; 568  : 
; 569  :                     Status = FilterPacket(            // See if packet to be dropped.
; 570  :                                           pAdapt,
; 571  :                                           Packet,
; 572  :                                           NULL,
; 573  :                                           TRUE,       // Send action.
; 574  :                                           &bDecision
; 575  :                                          );

  0015d	8d 45 eb	 lea	 eax, DWORD PTR _bDecision$16159[ebp]
  00160	50		 push	 eax
  00161	6a 01		 push	 1
  00163	6a 00		 push	 0
  00165	8b 4d e0	 mov	 ecx, DWORD PTR _Packet$16160[ebp]
  00168	51		 push	 ecx
  00169	8b 55 fc	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  0016c	52		 push	 edx
  0016d	e8 00 00 00 00	 call	 _FilterPacket@20
  00172	89 45 f0	 mov	 DWORD PTR _Status$[ebp], eax

; 576  : 
; 577  :                     if (
; 578  :                         NDIS_STATUS_SUCCESS==Status   // Everything OK?
; 579  :                           &&
; 580  :                         TRUE==bDecision               // Packet to be dropped?
; 581  :                        )

  00175	83 7d f0 00	 cmp	 DWORD PTR _Status$[ebp], 0
  00179	75 2e		 jne	 SHORT $L16180
  0017b	0f b6 45 eb	 movzx	 eax, BYTE PTR _bDecision$16159[ebp]
  0017f	83 f8 01	 cmp	 eax, 1
  00182	75 25		 jne	 SHORT $L16180

; 582  :                       {
; 583  :                        // Bump dropped-packet count.
; 584  :                        NdisInterlockedIncrement(&pAdapt->PassThruStats.MPSendPktsDropped);

  00184	8b 4d fc	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  00187	81 c1 f8 02 00
	00		 add	 ecx, 760		; 000002f8H
  0018d	51		 push	 ecx
  0018e	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisInterlockedIncrement@4

; 585  : 
; 586  :                        NdisReleaseSpinLock(&pAdapt->Lock);

  00194	8b 55 fc	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  00197	81 c2 98 00 00
	00		 add	 edx, 152		; 00000098H
  0019d	52		 push	 edx
  0019e	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisReleaseSpinLock@4

; 587  : 
; 588  :                        break;                         // Leave 'do' group, without sending down packet.  (Packet completion indicated after group.)

  001a4	e9 30 03 00 00	 jmp	 $L16148
$L16180:

; 589  :                       }
; 590  : 
; 591  : //........................................            // ja, 02.10.2003.
; 592  :              
; 593  :                     pAdapt->OutstandingSends++;

  001a9	8b 45 fc	 mov	 eax, DWORD PTR _pAdapt$[ebp]
  001ac	8b 88 cc 00 00
	00		 mov	 ecx, DWORD PTR [eax+204]
  001b2	83 c1 01	 add	 ecx, 1
  001b5	8b 55 fc	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  001b8	89 8a cc 00 00
	00		 mov	 DWORD PTR [edx+204], ecx

; 594  :                     NdisReleaseSpinLock(&pAdapt->Lock);

  001be	8b 45 fc	 mov	 eax, DWORD PTR _pAdapt$[ebp]
  001c1	05 98 00 00 00	 add	 eax, 152		; 00000098H
  001c6	50		 push	 eax
  001c7	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisReleaseSpinLock@4

; 595  :                 
; 596  :                     NdisSend(&Status,
; 597  :                               pAdapt->BindingHandle,
; 598  :                               Packet);

  001cd	8b 4d e0	 mov	 ecx, DWORD PTR _Packet$16160[ebp]
  001d0	51		 push	 ecx
  001d1	8b 55 fc	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  001d4	8b 42 04	 mov	 eax, DWORD PTR [edx+4]
  001d7	50		 push	 eax
  001d8	8d 4d f0	 lea	 ecx, DWORD PTR _Status$[ebp]
  001db	51		 push	 ecx
  001dc	e8 00 00 00 00	 call	 _NdisSend@12

; 599  :         
; 600  :                     if (Status != NDIS_STATUS_PENDING)

  001e1	81 7d f0 03 01
	00 00		 cmp	 DWORD PTR _Status$[ebp], 259 ; 00000103H
  001e8	74 4f		 je	 SHORT $L16176

; 601  :                     {
; 602  :                         NdisMSendComplete(ADAPT_MINIPORT_HANDLE(pAdapt),
; 603  :                                             Packet,
; 604  :                                             Status);

  001ea	8b 55 f0	 mov	 edx, DWORD PTR _Status$[ebp]
  001ed	52		 push	 edx
  001ee	8b 45 e0	 mov	 eax, DWORD PTR _Packet$16160[ebp]
  001f1	50		 push	 eax
  001f2	8b 4d fc	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  001f5	8b 51 08	 mov	 edx, DWORD PTR [ecx+8]
  001f8	52		 push	 edx
  001f9	8b 45 fc	 mov	 eax, DWORD PTR _pAdapt$[ebp]
  001fc	8b 48 08	 mov	 ecx, DWORD PTR [eax+8]
  001ff	ff 91 ec 00 00
	00		 call	 DWORD PTR [ecx+236]

; 605  :                    
; 606  :                         ADAPT_DECR_PENDING_SENDS(pAdapt);

  00205	8b 55 fc	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  00208	81 c2 98 00 00
	00		 add	 edx, 152		; 00000098H
  0020e	52		 push	 edx
  0020f	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisAcquireSpinLock@4
  00215	8b 45 fc	 mov	 eax, DWORD PTR _pAdapt$[ebp]
  00218	8b 88 cc 00 00
	00		 mov	 ecx, DWORD PTR [eax+204]
  0021e	83 e9 01	 sub	 ecx, 1
  00221	8b 55 fc	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  00224	89 8a cc 00 00
	00		 mov	 DWORD PTR [edx+204], ecx
  0022a	8b 45 fc	 mov	 eax, DWORD PTR _pAdapt$[ebp]
  0022d	05 98 00 00 00	 add	 eax, 152		; 00000098H
  00232	50		 push	 eax
  00233	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisReleaseSpinLock@4
$L16176:

; 607  :                     }
; 608  :                 }
; 609  :                 continue;                             // Skip to bottom of 'for' loop.  ja, 04.10.2003.

  00239	e9 3e fe ff ff	 jmp	 $L16157
$L16185:

; 610  :             }
; 611  :         }
; 612  : #endif
; 613  :         do 
; 614  :         {
; 615  : 
; 616  :             NdisAcquireSpinLock(&pAdapt->Lock);

  0023e	8b 4d fc	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  00241	81 c1 98 00 00
	00		 add	 ecx, 152		; 00000098H
  00247	51		 push	 ecx
  00248	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisAcquireSpinLock@4

; 617  :             //
; 618  :             // If the below miniport is going to low power state, stop sending down any packet.
; 619  :             //
; 620  :             if (pAdapt->PTDeviceState > NdisDeviceStateD0)

  0024e	8b 55 fc	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  00251	83 ba a4 00 00
	00 01		 cmp	 DWORD PTR [edx+164], 1
  00258	7e 1b		 jle	 SHORT $L16188

; 621  :             {
; 622  :                 NdisReleaseSpinLock(&pAdapt->Lock);

  0025a	8b 45 fc	 mov	 eax, DWORD PTR _pAdapt$[ebp]
  0025d	05 98 00 00 00	 add	 eax, 152		; 00000098H
  00262	50		 push	 eax
  00263	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisReleaseSpinLock@4

; 623  :                 Status = NDIS_STATUS_FAILURE;

  00269	c7 45 f0 01 00
	00 c0		 mov	 DWORD PTR _Status$[ebp], -1073741823 ; c0000001H

; 624  :                 break;

  00270	e9 3b 02 00 00	 jmp	 $L16187
$L16188:

; 625  :             }
; 626  : //........................................            // ja, 02.10.2003.
; 627  : 
; 628  :             Status = FilterPacket(                    // See if packet to be dropped.
; 629  :                                   pAdapt,
; 630  :                                   Packet,
; 631  :                                   NULL,
; 632  :                                   TRUE,               // Send action.
; 633  :                                   &bDecision
; 634  :                                  );

  00275	8d 4d eb	 lea	 ecx, DWORD PTR _bDecision$16159[ebp]
  00278	51		 push	 ecx
  00279	6a 01		 push	 1
  0027b	6a 00		 push	 0
  0027d	8b 55 e0	 mov	 edx, DWORD PTR _Packet$16160[ebp]
  00280	52		 push	 edx
  00281	8b 45 fc	 mov	 eax, DWORD PTR _pAdapt$[ebp]
  00284	50		 push	 eax
  00285	e8 00 00 00 00	 call	 _FilterPacket@20
  0028a	89 45 f0	 mov	 DWORD PTR _Status$[ebp], eax

; 635  : 
; 636  :             if (
; 637  :                 NDIS_STATUS_SUCCESS==Status           // Everything OK?
; 638  :                   &&
; 639  :                 TRUE==bDecision                       // Packet to be dropped?
; 640  :                )

  0028d	83 7d f0 00	 cmp	 DWORD PTR _Status$[ebp], 0
  00291	75 2d		 jne	 SHORT $L16194
  00293	0f b6 4d eb	 movzx	 ecx, BYTE PTR _bDecision$16159[ebp]
  00297	83 f9 01	 cmp	 ecx, 1
  0029a	75 24		 jne	 SHORT $L16194

; 641  :               {
; 642  : // DBGPRINT(("MPSendPackets():  Dropping packet\n"));
; 643  :                // Bump dropped-packet count.
; 644  :                NdisInterlockedIncrement(&pAdapt->PassThruStats.MPSendPktsDropped);

  0029c	8b 55 fc	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  0029f	81 c2 f8 02 00
	00		 add	 edx, 760		; 000002f8H
  002a5	52		 push	 edx
  002a6	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisInterlockedIncrement@4

; 645  : 
; 646  :                NdisReleaseSpinLock(&pAdapt->Lock);

  002ac	8b 45 fc	 mov	 eax, DWORD PTR _pAdapt$[ebp]
  002af	05 98 00 00 00	 add	 eax, 152		; 00000098H
  002b4	50		 push	 eax
  002b5	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisReleaseSpinLock@4

; 647  : 
; 648  :                break;                                 // Leave 'do' group, without sending down packet.  (Packet completion indicated after group.)

  002bb	e9 f0 01 00 00	 jmp	 $L16187
$L16194:

; 649  :               }
; 650  : //........................................            // ja, 02.10.2003.
; 651  :              
; 652  :             pAdapt->OutstandingSends++;

  002c0	8b 4d fc	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  002c3	8b 91 cc 00 00
	00		 mov	 edx, DWORD PTR [ecx+204]
  002c9	83 c2 01	 add	 edx, 1
  002cc	8b 45 fc	 mov	 eax, DWORD PTR _pAdapt$[ebp]
  002cf	89 90 cc 00 00
	00		 mov	 DWORD PTR [eax+204], edx

; 653  :             NdisReleaseSpinLock(&pAdapt->Lock);

  002d5	8b 4d fc	 mov	 ecx, DWORD PTR _pAdapt$[ebp]
  002d8	81 c1 98 00 00
	00		 add	 ecx, 152		; 00000098H
  002de	51		 push	 ecx
  002df	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisReleaseSpinLock@4

; 654  :             
; 655  :             NdisAllocatePacket(&Status,
; 656  :                                &MyPacket,
; 657  :                                pAdapt->SendPacketPoolHandle);

  002e5	8b 55 fc	 mov	 edx, DWORD PTR _pAdapt$[ebp]
  002e8	8b 42 0c	 mov	 eax, DWORD PTR [edx+12]
  002eb	50		 push	 eax
  002ec	8d 4d e4	 lea	 ecx, DWORD PTR _MyPacket$16161[ebp]
  002ef	51		 push	 ecx
  002f0	8d 55 f0	 lea	 edx, DWORD PTR _Status$[ebp]
  002f3	52		 push	 edx
  002f4	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisAllocatePacket@12

; 658  : 
; 659  :             if (Status == NDIS_STATUS_SUCCESS)

  002fa	83 7d f0 00	 cmp	 DWORD PTR _Status$[ebp], 0
  002fe	0f 85 6d 01 00
	00		 jne	 $L16197

; 660  :             {
; 661  :                 PSEND_RSVD        SendRsvd;
; 662  : 
; 663  :                 SendRsvd = (PSEND_RSVD)(MyPacket->ProtocolReserved);

  00304	8b 45 e4	 mov	 eax, DWORD PTR _MyPacket$16161[ebp]
  00307	83 c0 38	 add	 eax, 56			; 00000038H
  0030a	89 45 d4	 mov	 DWORD PTR _SendRsvd$16198[ebp], eax

; 664  :                 SendRsvd->OriginalPkt = Packet;

  0030d	8b 4d d4	 mov	 ecx, DWORD PTR _SendRsvd$16198[ebp]
  00310	8b 55 e0	 mov	 edx, DWORD PTR _Packet$16160[ebp]
  00313	89 11		 mov	 DWORD PTR [ecx], edx

; 665  : 
; 666  :                 MyPacket->Private.Flags = NdisGetPacketFlags(Packet);

  00315	8b 45 e4	 mov	 eax, DWORD PTR _MyPacket$16161[ebp]
  00318	8b 4d e0	 mov	 ecx, DWORD PTR _Packet$16160[ebp]
  0031b	8b 51 18	 mov	 edx, DWORD PTR [ecx+24]
  0031e	89 50 18	 mov	 DWORD PTR [eax+24], edx

; 667  : 
; 668  :                 MyPacket->Private.Head = Packet->Private.Head;

  00321	8b 45 e4	 mov	 eax, DWORD PTR _MyPacket$16161[ebp]
  00324	8b 4d e0	 mov	 ecx, DWORD PTR _Packet$16160[ebp]
  00327	8b 51 08	 mov	 edx, DWORD PTR [ecx+8]
  0032a	89 50 08	 mov	 DWORD PTR [eax+8], edx

; 669  :                 MyPacket->Private.Tail = Packet->Private.Tail;

  0032d	8b 45 e4	 mov	 eax, DWORD PTR _MyPacket$16161[ebp]
  00330	8b 4d e0	 mov	 ecx, DWORD PTR _Packet$16160[ebp]
  00333	8b 51 0c	 mov	 edx, DWORD PTR [ecx+12]
  00336	89 50 0c	 mov	 DWORD PTR [eax+12], edx

; 670  : #ifdef WIN9X
; 671  :                 //
; 672  :                 // Work around the fact that NDIS does not initialize this
; 673  :                 // to FALSE on Win9x.
; 674  :                 //
; 675  :                 MyPacket->Private.ValidCounts = FALSE;
; 676  : #endif // WIN9X
; 677  : 
; 678  :                 //
; 679  :                 // Copy the OOB data from the original packet to the new
; 680  :                 // packet.
; 681  :                 //
; 682  :                 NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(MyPacket),
; 683  :                             NDIS_OOB_DATA_FROM_PACKET(Packet),
; 684  :                             sizeof(NDIS_PACKET_OOB_DATA));

  00339	8b 45 e0	 mov	 eax, DWORD PTR _Packet$16160[ebp]
  0033c	0f b7 48 1e	 movzx	 ecx, WORD PTR [eax+30]
  00340	8b 75 e0	 mov	 esi, DWORD PTR _Packet$16160[ebp]
  00343	03 f1		 add	 esi, ecx
  00345	8b 55 e4	 mov	 edx, DWORD PTR _MyPacket$16161[ebp]
  00348	0f b7 42 1e	 movzx	 eax, WORD PTR [edx+30]
  0034c	8b 7d e4	 mov	 edi, DWORD PTR _MyPacket$16161[ebp]
  0034f	03 f8		 add	 edi, eax
  00351	b9 08 00 00 00	 mov	 ecx, 8
  00356	f3 a5		 rep movsd

; 685  :                 //
; 686  :                 // Copy relevant parts of the per packet info into the new packet
; 687  :                 //
; 688  : #ifndef WIN9X
; 689  :                 NdisIMCopySendPerPacketInfo(MyPacket, Packet);

  00358	8b 4d e0	 mov	 ecx, DWORD PTR _Packet$16160[ebp]
  0035b	51		 push	 ecx
  0035c	8b 55 e4	 mov	 edx, DWORD PTR _MyPacket$16161[ebp]
  0035f	52		 push	 edx
  00360	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__NdisIMCopySendPerPacketInfo@8

; 690  : #endif
; 691  : 
; 692  :    

⌨️ 快捷键说明

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