ProtocolTransferDataComplete

VOID

  ProtocolTransferDataComplete(

      IN NDIS_HANDLE  ProtocolBindingContext,

      IN PNDIS_PACKET  Packet,

      IN NDIS_STATUS  Status,

      IN UINT  BytesTransferred

      );

ProtocolTransferDataComplete ÇÔ¼ö´Â ¸¸¾à ÇÁ·ÎÅäÄÝÀÌ NdisMIndicateReceivePacket ÇÔ¼ö·Î full-packet ¼ö½ÅµéÀ» ÀεðÄÉÀÌÆ®ÇÏÁö ¾Ê´Â ¾Æ·¡ ºñ¿¬°áÁöÇâ NIC µå¶óÀ̹ö¿Í ±× ÀÚü°¡ ¹ÙÀεåµÈ´Ù¸é ÇÊ¿äÇÑ µå¶óÀ̹ö ÇÔ¼öÀÌ´Ù. ProtocolTransferDataComplete ÇÔ¼ö´Â NdisTransferData ÇÔ¼ö°¡ NDIS_STATUS_PENDINGÀ» ¸®ÅÏÇϱâ À§ÇÑ ÇÁ·ÎÅäÄÝ ÃʱâÈ­µÈ Àü¼Û µ¥ÀÌÅÍ ¿ä±¸ÀÇ Ã³¸®¸¦ ¿Ï¼ºÇÑ´Ù.

¹èŸÀûÀ¸·Î(exclusively) ¿¬°á ÁöÇâ ÇÁ·ÎÅäÄݵéÀº ¾î¶°ÇÑ ProtocolTransferDataComplete ÇÔ¼ö¸¦ È£ÃâÇÒ Çʿ䰡 ¾ø´Ù.

¸Å°³º¯¼ö

ProtocolBindingContext
ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö°¡ ¹ÙÀÎ´ç ·±Å¸ÀÓ »óŸ¦ À¯ÁöÇÏ´Â ÇÁ·ÎÅäÄÝ ÇÒ´ç ÄÁÅØ½ºÆ® ¿µ¿ª¿¡ ´ëÇÑ ÇÚµéÀ» ÁöÁ¤ÇÑ´Ù. µå¶óÀ̹ö´Â NdisOpenAdapter ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ÀÌ·¯ÇÑ ÇÚµéÀ» Á¦°øÇÑ´Ù.

Packet
µå¶óÀ̹ö´Â ¿ø·¡ NdisTransferData·Î Àü´ÞÇÏ´Â ÇÁ·ÎÅäÄÝ ÇÒ´ç ÆÐŶ µð½ºÅ©¸³Å͸¦ °¡¸®Å²´Ù.

Status
Àü¼Û µ¥ÀÌÅÍ ¿¬»êÀÇ ¸¶Áö¸· »óŸ¦ ÁöÁ¤ÇÑ´Ù.

BytesTransferred
NIC µå¶óÀ̹ö°¡ PacketÀÎ ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ üÀÎÈ­µÈ ¹öÆÛ µð½ºÅ©¸³Å͵鿡 ÀÇÇØ ¸ÊµÈ ¹öÆÛµé·Î Àü¼ÛÇÏ´Â µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ÁöÁ¤ÇÑ´Ù. ÇÁ·ÎÅäÄÝÀº ÀÌ·¯ÇÑ °ªÀ» »ç¿ëÇÏ¿© ¹Ì´ÏÆ÷Æ®°¡ ¿ø·¡ ÀεðÄÉÀÌÆ®µÈ ³×Æ®¿öÅ© ÆÐŶÀ» À§ÇÑ ¿ä±¸µÈ µ¥ÀÌÅ͸¦ Á¦°øÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÑ´Ù.

ÁÖ¼®

ProtocolTransferDataComplete ÇÔ¼ö´Â NdisTransferData ÇÔ¼ö°¡ Á¦¾î¸¦ ¸®ÅÏÇϱâ Àü¿¡ È£ÃâµÉ ¼ö ÀÖ´Ù. ¸¸¾à À̰ÍÀÌ ¹ß»ýÇÑ´Ù¸é, ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö´Â NdisTransferData ÇÔ¼ö°¡ Status¸¦ ¸®ÅÏÇÏ´Â »óÅ Äڵ带 Á¶»çÇϱâ À§ÇÑ ±âȸ°¡ ¾ø´Ù. ÇÁ·ÎÅäÄÝÀº PacketÀ¸·Î ÁÖ¾îÁø ÆÐŶ µð½ºÅ©¸³ÅÍ´Â ProtocolTransferDataComplete ÇÔ¼ö°¡ È£ÃâµÉ ¶§±îÁö Áö¿¬µÈ´Ù´Â °ÍÀ» ÃßÃøÇØ¾ß ÇÑ´Ù.

¾Æ·¡ NIC µå¶óÀ̹ö´Â NdisTransferDataComplete ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§, NDIS´Â ProtocolTransferDataComplete ÇÔ¼ö¿¡ ´ëÇÑ ¹Ì´ÏÆ÷Æ® Á¦°ø Packet Æ÷ÀÎÅÍ¿Í Status °ªÀ» Æ÷¿öµåÇÑ´Ù. À̰ÍÀÌ ÀϾ ¶§, ÇÁ·ÎÅäÄÝÀº NdisTransferData ÇÔ¼ö¿¡ ´ëÇÑ ¼±Çà È£ÃâÀ» À§ÇØ ÇÒ´çÇÑ ÀÚ¿øµéÀÇ ¼ÒÀ¯±ÇÀ» ´Ù½Ã ¾ò´Â´Ù. ProtocolTransferDataComplete ÇÔ¼ö°¡ ÇÁ·ÎÅäÄÝÀÌ ProtocolReceive ÇÔ¼ö°¡ ÀÀ´äÇÏ´Â ÀεðÄÉÀ̼ǿ¡¼­ º¹»çÇÑ µ¥ÀÌÅÍ·Î PacketÀÎ ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇØ üÀÎÈ­ÇÑ ¹öÆÛµé³»¿¡ ¹Ì´ÏÆ÷Æ® ÇÒ´ç µ¥ÀÌÅ͸¦ ÈÄó¸®ÇÒ ¼ö ÀÖ´Ù. ±×¸®°í³ª¼­ ProtocolTransferDataComplete ÇÔ¼ö´Â ¼ö½ÅµÈ ³×Æ®¿öÅ© µ¥ÀÌÅÍÀÇ °ü½ÉÀִ Ŭ¶óÀÌ¾ðÆ®µéÀ» ÁÖÁöÇÒ ¼ö ÀÖ´Ù.

ProtocolTransferDataComplete ÇÔ¼ö´Â ¶ÇÇÑ ÇÁ·ÎÅäÄÝÀÌ NdisTransferData ÇÔ¼ö¿¡ ´ëÇÑ È£Ãâ·Î ÇÒ´çÇÑ ÀÚ¿øµéÀ» ÇØÁ¦ÇÒ ¼ö ÀÖ°í NdisTransferData ÇÔ¼ö¿¡ ´ëÇÑ °è¼ÓÀûÀΠȣÃâ¿¡¼­ Àç»ç¿ëÀ» À§ÇÑ ÆÐŶ µð½ºÅ©¸³Å͵é°ú ¸®ÅÏµÈ ¹öÆÛ¸¦ ÁغñÇÒ ¼ö ÀÖ´Ù. ÀϹÝÀûÀÎ ±ÔÄ¢¿¡¼­, ±×·¯ÇÑ ÀÚ¿øµéÀ» Àç»ç¿ëÇÏ´Â °ÍÀº ¸¸¾à ÇÁ·ÎÅäÄÝÀÌ Àü¿¡ ³ôÀº I/O¿ä±¸ÀÇ ½Ã±â¿¡ ó¸®Çϱâ À§ÇØ Ãß°¡ÀûÀÎ ÀÌ·¯ÇÑ ÀÚ¿øµéÀ» ÇÒ´çÇÑ´Ù¸é ³·Àº ³×Æ®¿öÅ© Æ®·¡ÇÈ ½Ã±â¿¡ °¡´ÉÇÑ Á¦¿ÜÇØ ±×µéÀ» ÇØÁ¦ÇÏ´Â °Íº¸´Ù ´õ ÁÁÀº ÆÛÆ÷¸Õ½º¸¦ ³º´Â´Ù.

Àç»ç¿ëÀ» À§ÇØ ¹öÆÛ¿Í ÆÐŶ µð½ºÅ©¸³Å͵éÀ» ÁغñÇϱâ À§ÇØ, ProtocolTransferDataComplete ÇÔ¼ö´Â ÀÌ·¯ÇÑ °¡À̵å¶óÀεéÀ» µû¶ó¾ß ÇÑ´Ù.

  • Ç×»ó ProtocolTransferDataComplete ÇÔ¼ö´Â Packet¿¡¼­ µð½ºÅ©¸³ÅÍ·Î NdisReinitializePacket ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ¹öÆÛ µð½ºÅ©¸³ÅÍ Æ÷ÀÎÅ͵éÀ» ÀúÀåÇϱâ À§ÇØ ÇÊ¿äÇÑ ¸¸Å­ NdisUnchainBufferAtXxx ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

    ±×·¸Áö ¾ÊÀ¸¸é, NdisReinitializePacket ÇÔ¼ö´Â ÇÁ·ÎÅäÄÝÀÌ ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ üÀÎÈ­µÈ ¹öÆÛ µð½ºÅ©¸³Å͵鿡 ´ëÇÑ Æ÷ÀÎÅ͵éÀ» ȸº¹ÇÒ ¼ö ¾ø°Ô Çϱâ À§ÇØ NULL·Î ¹öÆÛÀÇ Çìµå üÀÎÀ» ¼³Á¤ÇÑ´Ù. È¿À²ÀûÀ¸·Î, ÇÁ·ÎÅäÄÝÀº ÇÁ·ÎÅäÄÝÀÌ NdisAllocateBuffer ÇÔ¼ö·Î ÇÒ´çÇÑ ¹öÆÛ µð½ºÅ©¸³Å͵éÀÇ ÁýÇÕÀ» ÀÐ°í °¡´ÉÇÑ ¸¶Âù°¡Áö·Î ÀÌ·¯ÇÑ µð½ºÅ©¸³Å͵鿡 ÀÇÇØ ¸ÊµÈ ÇÁ·ÎÅäÄÝ ÇÒ´ç ¹öÆÛµé¿¡ ´ëÇÑ Á¢±ÙÀ» ÀҴ´Ù.

  • ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇÑ Æ÷ÀÎÅÍ·Î NdisZeroMemory ÇÔ¼ö¸¦ °áÄÚ È£ÃâÇÏÁö ¾Ê´Â´Ù. ±× ´ë½Å¿¡ NdisReinitialize ÇÔ¼ö¸¦ »ç¿ëÇ϶ó.

    ±×·¸Áö ¾ÊÀ¸¸é, NdisZeroMemory ÇÔ¼ö´Â ¿¬¼ÓÀûÀÎ µ¥ÀÌÅÍ Àü¼Ûµé°ú º¸³»±âµéÀ» ÁöÁ¤Çϱâ À§ÇØ ±×°ÍÀ» »ç¿ëÇÒ ¼ö ¾ø°Ô ¸¸µé¸é¼­ NdisAllocatePacket ÇÔ¼ö·Î ÇÒ´çÇÏ´Â ÆÐŶ µð½ºÅ©¸³Å͸¦ ÆÄ±«ÇÑ´Ù.

µðÆúÆ®·Î, ProtocolTransferDataComplete ÇÔ¼ö´Â arbitrary ¾²·¹µå ÄÁÅØ½ºÆ® ³»¿¡¼­ IRQL DISPATCH_LEVEL¿¡¼­ ½ÇÇàÇÑ´Ù.