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¿¡¼ ½ÇÇàÇÑ´Ù.
|