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 ¿¡¼ µ¿ÀÛÇÑ´Ù.
|