ProtocolSendComplete

VOID

  ProtocolSendComplete(

      IN NDIS_HANDLE  ProtocolBindingContext,

      IN PNDIS_PACKET  Packet,

      IN NDIS_STATUS Status

      );

ProtocolSendCompleteÇÔ¼ö´Â NDIS_STATUS_PENDINGÀ» ¸®ÅÏÇÑ NdisSendȤÀº NdisSendPackets¿¡°Ô³Ñ°ÜÁØ ÀÌÀüÀÇ ÇÁ·ÎÅäÄÝÀÌ ½ÃÀÛÇÑ º¸³»±âÀÇ ¿¬»êÀ» ¿Ï·áÇÏ´Â ÇʼöÀûÀÎ µå¶óÀ̹öÇÔ¼öÀÌ´Ù.

NdisSendPacketsÇÔ¼ö(NdisSendÇÔ¼ö)°¡ ¾Æ´Ñ NdisCoSendPackets¸¦ È£ÃâÇÏ´Â ¿¬°áÁöÇâ ÇÁ·ÎÅäÄÝÀº ProtocolSendCompleteÇÔ¼öº¸´Ù´Â fully functional ProtocolCoSendCompleteÇÔ¼ö¸¦ °¡Á®¾ß¸¸ÇÑ´Ù.

¸Å°³º¯¼ö

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

Packet
¿Ï·áµÈº¸³»±â¿¡´ëÇÑ ÇÁ·ÎÅäÄÝÁ¦°ø ÆÐŶµð½ºÅ©¸³ÅÍÀÇ Æ÷ÀÎÅÍ

Status
º¸³»±â¿¬»êÀÇ ÃÖÁ¾»óŸ¦ ÁöÁ¤ÇÑ´Ù.

ÁÖ¼®

ProtocolSendCompleteÇÔ¼ö´Â ¿Ï·áµÈ Àü¼Û¿¬»ê¿¡´ëÇØ Â÷ÈÄ¿¬»êÀÌ ÇÊ¿äÇѰÍÀ» ¼öÇàÇÑ´Ù. ³×Æ®¿÷»óÀ¸·Î µ¥ÀÌŸ¸¦ º¸³»¶ó°í ÇÁ·ÎÅäÄÝ¿¡°Ô ¿äûÇÑ Å¬¶óÀÌ¾ðÆ®¿¡°Ô ¾Ë¸®´Â °Í°ú °°Àº °Í.

º¸³»±â¿¬»êÀÇ Á¾·á´Â ÀϹÝÀûÀ¸·Î ÇÏÀ§´Ðµå¶óÀ̹ö°¡ ½ÇÁ¦·Î ÁÖ¾îÁø ÆÐŶÀ» ³×Æ®¿÷»çÀ¸·Î º¸³½°ÍÀ» ¾Ï½ÃÇÑ´Ù. ±×·¯³ª, ¼ÒÀ§ ÀÎÅÚ¸®Á¯Æ®ÇÑ NICÀÇ µå¶óÀ̹ö´Â ³ÝÆÖŶÀ» ´ÐÀ¸·Î º¸³»ÀÚ¸¶ÀÚ º¸³»±â¿Ï·á·Î °£ÁÖÇÑ´Ù. ÇÏÀ§µå¶óÀ̹öÀÇ NdisMSendComplete ȤÀº NdisMWanSendCompleteÇÔ¼öÀÇ È£ÃâÀº NDIS·Î ÇÏ¿©±Ý ProtocolSendCompleteÇÔ¼öÀÇ È£ÃâÀ» ¾ß±â½ÃŲ´Ù.

ProtocolSendCompleteÇÔ¼ö°¡ È£ÃâµÆÀ»¶§, µå¶óÀ̹ö´Â ´ÙÀ½°ú °°Àº ÇÁ·ÎÅäÄÝ ÇÒ´ç ¸®¼Ò½ºµéÀÇ ¼ÒÀ¯±ÇÀ» ´Ù½Ã ¾ò´Â´Ù:

  • ÆÐŶÀÇ ÆÐŶµð½ºÅ©¸³ÅÍ
  • ³ÝÆÐŶµ¥ÀÌŸ¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ ¸ÊÇÏ´Â ÆÐŶµð½ºÅ©¸³ÅÍ¿¡ üÀÎµÈ ¹öÆÛµð½ºÅ©¸³ÅÍ¿Í ÀÌ·± µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ ¸ÊµÈ ÇÁ·ÎÅäÄÝ ÇÒ´ç ¹öÆÛµé
  • ÆÐŶµð½ºÅ©¸³ÅÍ¿Í °ü°èµÈ OOBºí·°
  • OOBºí·°ÀÇ MediaSpecificInformation¿¡ ÁöÁ¤µÈ ÇÁ·ÎÅäÄÝÇÒ´ç ¹öÆÛ
°á°úÀûÀ¸·Î, ProtocolSendCompleteÇÔ¼ö´Â ÀÌ·±¸®¼Ò½ºµéÀ» ÇØÁ¦Çϰųª ȤÀº NdisSendPackets ȤÀº NdisSend ÀÇ Â÷ÈÄÈ£Ãâ¿¡¼­ÀÇ Àç»ó¿ëÀ» À§ÇØ ¸®¼Ò½ºµéÀ» ÁغñÇÑ´Ù. ÀϹÝÀûÀÎ ·ê·Î½á, ±×·± ¸®¼Ò½ºµéÀÇ Àç»ç¿ëÀº ÇÁ·ÎÅäÄÝÀÌ Àü¿¡ ÇÒ´çÇÑ ³ôÀº I/O¿ä±¸¸¦ ´Ù·ç±âÀ§ÇØ ¸®¼Ò½ºµéÀÇ À׿©ºÐÀ» ÇÒ´çÇÒ¶§ ³·Àº ³×Æ®¿÷ Æ®·¡ÇȽñ⿡¼­¸¦ Á¦¿ÜÇϰí ÇØÁ¦Çϴ°ͺ¸´Ù ´õÁÁÀº ÆÛÆ÷¸Õ½º¸¦ º¸ÀδÙ.

Àç»ç¿ëÀ» À§ÇÑ ¹öÆÛ¿Í ÆÐŶµð½ºÅ©¸³ÅÍÀÇ Áغñ¸¦ À§ÇØ,ProtocolSendCompleteÇÔ¼ö´Â ´ÙÀ½°ú °°Àº ³»¿ëÀ» µû¶ó¾ß ÇÑ´Ù:

  • ProtocolSendCompleteÇÔ¼ö°¡ ÆÐŶÀÇ µð½ºÅ©¸³ÅÍ·Î NdisReinitializePacketÇÔ¼ö¸¦ È£ÃâÇϱâÀü¿¡ ¹öÆÛµð½ºÅ©¸³ÅÍÆ÷ÀÎÅ͵éÀ» ÀúÀåÇÒ Çʿ䰡 ÀÖÀ»¶§¸¶´Ù Ç×»ó NdisUnchainBufferAtXxxÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

    ±×·¸Áö ¾ÊÀ¸¸é, NdisReinitializePacketÇÔ¼ö´Â ¹öÆÛÀÇ Çìµå¸¦ ³Î·Î ¼³Á¤ÇÏ¿© ÇÁ·ÎÅäÄÝÀº ÆÐŶµð½ºÅ©¸³ÅÍ¿Í Ã¼ÀÎµÈ ¹öÆÛµð½ºÅ©¸³Å͵éÀÇ Æ÷ÀÎÅ͵éÀ» ȸº¹ ÇÒ ¼ö ¾ø´Ù. ÇÁ·ÎÅäÄÝÀÌ Å¬¶óÀÌ¾ðÆ®°¡ Á¦°øÇÑ ¹öÆÛ¸¦ ¸ÊÇÎÇÏ´Â MDL(S)À» Àоî¹ö¸®°Å³ª ÇÁ·ÎÅäÄÝÀÌ NdisAllocateBuffer·Î ÇÒ´çÇÑ ¹öÆÛµð½ºÅ©¸³ÅÍÀÇ ¼³Á¤À» Àоî¹ö¸°´Ù.

  • NDIS_OOB_DATA_FROM_PACKETÀÇÇØ ¸®ÅÏµÈ Æ÷ÀÎÅ͸¦ °ü·ÃµÈOOBµ¥ÀÌŸ ºí·°À» Ŭ¸®¾îÇϱâÀ§ÇØ NdisZeroMemoryÇÔ¼ö¿¡°Ô ³Ñ±ä´Ù.ÆÐŶÆ÷ÀÎÅͰ¡ ¾Æ´Ï°í. NDIS_OOB_DATA_FROM_PACKETÀº ÇÁ·ÎÅäÄÝÀÌ NdisAllocatePacketÇÔ¼ö·Î ÇÒ´çÇÑ ÆÐŶµð½ºÅ©¸³Å͸¦ Á¦°ÅÇÑ´Ù. ÁöÁ¤µÈ ´ÙÀ½ º¸³»±â¿¡´ëÇØ »ç¿ëÇÒ¼ö ¾ø°Ô ¸¸µé¸é¼­.

    OOBºí·°ÀÇ Å¬¸®¾î¿¡´ëÇÑ ¾çÀÚÅÃÀϷμ­, ÇÁ·ÎÅäÄÝÀº ÇÁ·ÎÅäÄÝÀÌ ÀϹÝÀûÀ¸·Î ÀûÀýÇÑNDIS_SET_PACKET_XXX¸ÞÅ©·Î·Î º¸³»±â¿¡ ´ëÇÑ ¼³Á¤À» ÇßÀ»¶§ÀÇ ¸â¹öµé¸¸À» ÀçÃʱâÈ­ÇÒ ¼ö ÀÖ´Ù.

ProtocolSendCompleteÇÔ¼ö°¡ È£ÃâµÉ¶§±îÁö, ÇÁ·ÎÅäÄÝÀ̽ÃÀÛÇÑ º¸³»±âÀÇ ÇöÀç»óÅ´ ÀϽÃÀûÀÌ´Ù. ÇÁ·ÎÅäÄÝÀº temporarilyÇÏ°Ô NdisSendPackets ȤÀº NdisSendÇÔ¼ö¸¦ È£ÃâÇÒ¶§ ÇÁ·ÎÅäÄÝÀÌ º¸³»±â¿¡ ´ëÇØ¼­ ÇÒ´çÇÑ ¸ðµç ¸®¼Ò½ºµéÀÇ ¼ÒÀ¯±ÇÀ» ÇØÁ¦ÇÑ´Ù. ºñ·Ï ÇÁ·ÎÅäÄÝÀÌ º¸³»±â¿¡´ëÇØ ÇÒ´çÇÑ ÆÐŶµð½ºÅ©¸³ÅÍ·Î OOBÁ¤º¸¸¦ Á¦°øÇÏ´õ¶óµµ.

ºñ·Ï NDIS´Â Ç×»ó ÇÁ·ÎÅäÄÝÁ¦°ø ÆÐŶ¹è¿­À» ÇÏÀ§ ¹Ì´ÏÆ÷Æ®¿¡°Ô ÇÁ·ÎÅäÄÝÀÌ °áÁ¤ÇÑ ¼ø¼­·Î NdisSendPacketsÀÇÈ£Ãâ·Î Á¦°øÇÏÁö¸¸, ÇÏÀ§µå¶óÀ̹ö´Â ÁÖ¾îÁø ÆÐŶÀ» ·£´ý¼ø¼­·Î ¿Ï·áÇÒ ¼ö ÀÖ´Ù. Áï, ¸ðµç ¹ÙÀεùµÈ ÇÁ·ÎÅäÄÝÀº ÇÁ·ÎÅäÄÝÀÌ FIFO¼ø¼­·Î NdisSendPackets ȤÀº NdisSendÇÔ¼ö·Î ³Ñ±â´Â ÆÐŶÀ» Á¦°øÇϱâÀ§ÇØ NDIS¿¡°Ô ÀÇÁ¸ÇÑ´Ù. ±×·¯³ª ÇÁ·ÎÅäÄÝÀÌ °°Àº ¼ø¼­·Î ±×·¯ÇÑ ÆÐŶÀ» °¡Áö°í NdisMSendCompleteÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÇÏÀ§µå¶óÀ̹ö¿¡ ÀÇÁ¸ÇÒ ¼ö ¾ø´Ù.

µðÆúÆ®·Î, ProtocolSendCompleteÇÔ¼ö´Â ÀÚÀ¯Àç·®ÀÇ ½º·¹µå ÄÁÅØ½ºÆ®(in an arbitrary thread context)³»¿¡¼­ DISPATCH_LEVEL ¿¡¼­ µ¿ÀÛÇÑ´Ù.