NdisSend
VOID
NdisSend(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE NdisBindingHandle,
IN PNDIS_PACKET Packet
);
|
NdisSend ÇÔ¼ö´Â ÇϺÎÀÇ µå¶óÀ̹ö¿¡°Ô º¸³»±â ¸®Äù½ºÆ®¸¦ ¾Ë¸°´Ù.
¸Å°³º¯¼ö
- Status
- ÀÌ ÇÔ¼öÀÇ ¸®ÅÏ¿¡¼ ¼³Á¤µÈ È£ÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù. ÇϺÎÀÇ µå¶óÀ̹ö´Â ¾î¶² NDIS_STATUS_XXX°¡ ¸®ÅϵǴÂÁö¸¦ °áÁ¤ÇÏÁö¸¸ º¸Åë ´ÙÀ½ °ªÁß¿¡ ÇϳªÀÌ´Ù:
- NDIS_STATUS_SUCCESS
- ÁÖ¾îÁø ÆÐŶÀÌ ³×Æ®¿÷ »óÀ¸·Î Àü¼ÛµÇ°í ÀÖ´Ù.
- NDIS_STATUS_PENDING
- ¸®Äù½ºÆ®°¡ ºñµ¿±âÀûÀ¸·Î 󸮵ǰí ÀÖ´Ù. ±×¸®°í È£ÃâÀÚÀÇ ProtocolSendComplete ÇÔ¼ö´Â ±×°ÍÀÌ ¿Ï·áµÉ ¶§ È£ÃâµÈ´Ù.
- NDIS_STATUS_INVALID_PACKET
- ¸®Äù½ºÆ®µÈ Àü¼ÛÀÇ »çÀÌÁî°¡ NIC¿¡°Ô ³Ê¹« Å©´Ù°Å³ª NICÀÌ µå¶óÀ̹ö·Î À߸øµÈ ÆÐŶ Àü¼ÛÀ» ¾Ë·È´Ù.
- NDIS_STATUS_CLOSING
- ÇϺÎÀÇ µå¶óÀ̹ö°¡ ´ÝÈù´Ù.
- NDIS_STATUS_RESET_IN_PROGRESS
- ÇϺÎÀÇ µå¶óÀ̹ö°¡ NICÀ» ÇöÀç ¸®¼ÂÇϰí ÀÖ´Â ÁßÀÌ´Ù. È£ÃâÀÚÀÇ ProtocolStatus ÇÔ¼ö´Â ¸®¼ÂÀÌ ÁøÇàÁßÀÓÀ» ¾Ë¸®±â À§Çؼ NDIS_STATUS_RESET_START¸¦ °¡Áö°í È£ÃâµÈ´Ù.
- NDIS_STATUS_FAILURE
- ÀÌ °ªÀº º¸Åë ºñƯÁ¤ ±âº»°ªÀÌ´Ù. ÇϺÎÀÇ µå¶óÀ̹ö°¡ ¸®Äù½ºÆ® ½ÇÆÐ¿¡ ´ëÇÑ Æ¯Á¤ NDIS_STATUS_XXX°¡ ¾øÀ» ¶§ ¸®ÅϵȴÙ.
Àü¼Û¿¬»ê µ¿¾È¿¡ ¹ß»ýµÇ´Â ÀåÄ¡ I/O ¿¡·¯¿¡ ´ëÇØ¼ ¸®ÅÏµÈ Æ¯Á¤ NDIS_STATUS_XXX´Â NICÀÇ Æ¯Â¡°ú NIC µå¶óÀ̹ö °³¹ßÀÚÀÇ °áÁ¤¿¡ ÀÇÁ¸ÇÑ´Ù. ¿¹¸¦µé¾î ¹Ì´ÏÆ÷Æ®´Â NICÀÌ ÀÌ »óŸ¦ µå¶óÀ̹ö·Î ¾Ë¸°´Ù¸é NDIS_STATUS_NO_CABLEÀ» ¸®ÅÏÇÑ´Ù.
- NdisBindingHandle
- Ÿ°Ù NICÀ» È®ÀÎÇϰųª È£ÃâÀÚ°¡ ¹ÙÀεùÇÑ ´ÙÀ½ ÇÏÀ§ µå¶óÀ̹öÀÇ °¡»ó ¾î´ðÅ͸¦ È®ÀÎÇÏ´ÂNdisOpenAdapter ÇÔ¼ö¿¡ ÀÇÇØ¼ ¸®ÅÏµÈ ÇÚµéÀ» ¼¼úÇÑ´Ù. ¸¸¾à ÇϺÎÀÇ µå¶óÀ̹ö°¡ ¿¬°áÁöÇâ ¹Ì´ÏÆ÷Æ®¶ó¸é ÇÁ·ÎÅäÄÝÀº NdisSend ÇÔ¼öº¸´Ù´Â NdisCoSendPackets ÇÔ¼ö¸¦ È£ÃâÇØ¾ßÇÑ´Ù.
- Packet
- ÇϺÎÀÇ NIC µå¶óÀ̹ö°¡ ³×Æ®¿÷ »óÀ¸·Î Àü¼ÛÇØ¾ßÇÏ´Â µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ ¸ÅÇÎÇÑ Ã¼ÀÎÈµÈ ¹öÆÛ µð½ºÅ©¸³Å͸¦ °¡Áö°í NdisAllocatePacket ÇÔ¼ö·Î ÇÒ´çµÈ È£ÃâÀÚ Á¦°ø ÆÐŶ µð½ºÅ©¸³Å͸¦ °¡¸®Å²´Ù.
ÁÖ¼®
NdisSend ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö´Â ÇÁ·ÎÅäÄÝÀÌ ÇÒ´çÇÑ ÆÐŶ µð½ºÅ©¸³ÅÍÀÇ ÇÁ¶óÀ̺ø Çì´õ(NDIS¿¡ ÀÇÇÑ »ç¿ëÀ» À§Çؼ ¿¹¾àµÊ)¿¡ Ç÷¡±×¸¦ ¼³Á¤Çϱâ À§Çؼ NdisSetPacketFlags ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. ÀÌ Ç÷¡±×µéÀº ÆÐŶ µ¥ÀÌŸ¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â ¸®Äù½ºÆ®µÈ º¸³»±â ¿¬»ê¿¡ ´ëÇØ¼ È£ÃâÀÚ °áÁ¤ Á¤º¸¸¦ ¼¼úÇÑ´Ù. ÇϺΠNIC µå¶óÀ̹öÀÇ MiniportSend ÇÔ¼ö´Â ÀÔ·Â ¸Å°³º¯¼ö·Î½á º¸³»±â Ç÷¡±×¸¦ ¾ò´Â´Ù. ÆÐŶ Ç÷¡±× ºñÆ®ÀÇ Àǹ̴ ¹Ìµð¾ö ƯÁ¤À̰í Çù·ÂÇÏ´Â µå¶óÀ̹öÀÇ ½Ö¿¡ ÀÇÇØ¼ Á¤ÀǵȴÙ.
±×·¯³ª ±×·¯ÇÑ Çù·ÂÇÏ´Â µå¶óÀ̹öÀÇ ½ÖÀº ÆÐŶ Ç÷¡±×°¡ Àü´ÞÇÒ ¼ö ÀÖ´Â °Íº¸´Ù ´õ ¸¹Àº Á¤º¸¿Í Åë½ÅÇϱâ À§Çؼ °¢°¡ÀÇ ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í ¿¬°üµÈ NDIS_PACKET_OOB_DATA ºí·°À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. NdisSend ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ÇÁ·ÎÅäÄÝÀº OOB Á¤º¸¸¦ ¼³Á¤Çϱâ À§Çؼ NDIS_SET_PACKET_TIME_TO_SEND¿Í NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO ¸ÅÅ©·Î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×°ÍÀº ÇÁ·ÎÅäÄÝ ÇÒ´ç ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í ¿¬°üµÈ NDIS_PACKET_OOB_DATA ºí·°¾È¿¡ ÇϺÎÀÇ µå¶óÀ̹ö¿Í °ü°è°¡ ÀÖ´Ù.
Á÷·ÄÈµÈ ÇϺÎÀÇ µå¶óÀ̹ö°¡ À¯È¿ÇÑ º¸³»±â ÆÐŶÀ» Àü¼ÛÇϱâ À§Çؼ ÀÚ¿øÀÌ ºÎÁ·ÇÒ ¶§ ´ÙÀ½Áß Çϳª¸¦ ÇÒ ¼ö ÀÖ´Ù:
- MiniportSend ÇÔ¼ö´Â ³»ºÎÅ¥¿¡ ÆÐŶÀ» »ðÀÔÇÒ ¼ö ÀÖ°í NDIS_STATUS_PENDINGÀ» ¸®ÅÏÇÑ´Ù.
ÀÚ¿øÀÌ »ç¿ëµÉ ¼ö ÀÖÀ» ¶§±îÁö µå¶óÀ̹ö´Â Å¥¿¡ ÀúÀåµÈ ÆÐŶÀ» À¯ÁöÇϰí À¯»ç½Ã¿¡ ÆÐŶÀ» º¸³½´Ù.
- MiniportSend ÇÔ¼ö´Â ´ÜÁö NDIS_STATUS_RESOURCES¸¦ °¡Áö°í ÅëÁ¦¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù.
NDIS ¶óÀ̺귯¸®´Â Á÷·ÄÈµÈ ¹Ì´ÏÆ÷Æ®·Î ´Ù½Ã Á¦ÃâÇϱâ À§Çؼ ³»ºÎÅ¥¾È¿¡ ±×·¯ÇÑ ¸®ÅÏµÈ ÆÐŶÀ» À¯ÁöÇÑ´Ù. ¹Ì´ÏÆ÷Æ®´Â NdisMSendResourcesAvailable ÇÔ¼ö³ª NdisMSendComplete ÇÔ¼ö¸¦ È£ÃâÇÏ¹Ç·Î½á ³ªÁß¿¡ º¸³»±â ÆÐŶÀ» ¹Þ¾ÆµéÀÏ Áغñ°¡ µÆÀ½À» ¾Ë¸± ¼ö ÀÖ´Ù.
NdisSend ÇÔ¼ö´Â È£ÃâÀÚ¿¡°Ô NDIS_STATUS_PENDINGÀ» ¸®ÅÏÇÑ´Ù. ±×¸®°í µå¶óÀ̹öÀÇ ProtocolSendComplete ÇÔ¼ö´Â ÆÐŶ Àü¼ÛÀÌ ¿Ï·áµÆÀ» ¶§ È£ÃâµÈ´Ù. ÇϺÎÀÇ µå¶óÀ̹ö°¡ ºñÁ÷·Äȵȴٸé NdisSend ÇÔ¼öÀÇ È£Ãâ·Î Àü´ÞµÈ ¸ðµç ÆÐŶÀº ÇϺÎÀÇ ºñÁ÷·ÄÈµÈ ¹Ì´ÏÆ÷Æ®°¡ º¸³»±â ¿¬»êÀ» ¿Ï·áÇßÀ» ¶§ È£ÃâÀÚÀÇ ProtocolSendComplete ÇÔ¼ö·Î ¸®ÅϵȴÙ.
ÇÁ·ÎÅäÄÝÀÌ NdisSend ÇÔ¼ö¸¦ È£ÃâÇÏÀÚ¸¶ÀÚ ÇÁ·ÎÅäÄÝÀº ÆÐŶ¿¡ üÀÎÈµÈ ¹öÆÛ µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ¼ ¸ÊµÈ ¸ðµç ¹öÆÛÀÇ Packet¿¡ ´ëÇÑ ÆÐŶ µð½ºÅ©¸³ÅÍÀÇ ¼ÒÀ¯±ÇÀ» ¾çµµÇÑ´Ù. ±×¸®°í ÆÐŶ µð½ºÅ©¸³Å͸¦ °¡Áö°í Á¦°øµÈ ¾î¶² OOB Á¤º¸ÀÇ Packet¿¡ ´ëÇÑ ÆÐŶ µð½ºÅ©¸³ÅÍÀÇ ¼ÒÀ¯±ÇÀ» ¾çµµÇÑ´Ù. ÇÁ·ÎÅäÄÝÀº ÆÐŶÀÌ NDIS_STATUS_PENDING ÀÌ¿ÜÀÇ ´Ù¸¥ »óŸ¦ °¡Áö°í ¿Ï·áµÆÀ» ¶§ ±×¸®°í ProtocolSendComplete ÇÔ¼ö°¡ È£ÃâµÆÀ» ¶§ ÀÌ ÀÚ¿øµéÀÇ ¼ÒÀ¯±ÇÀ» ´Ù½Ã ¾ò´Â´Ù,
ÀÌ·± ÀÏÀÌ ¹ß»ýµÇ¸é ÇÁ·ÎÅäÄÝÀº NdisUnchainBufferAtXxx ÇÔ¼ö È£Ãâ·Î ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ üÀÎÈµÈ ¹öÆÛ µð½ºÅ©¸³Å͸¦ ÀúÀåÇÑ ÈÄ¿¡ Àç»ç¿ëÀ» À§ÇÑ ÆÐŶÀ» ÁغñÇϱâ À§Çؼ NdisReinitializePacket ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. ±×·¯ÇÑ ÆÐŶ µð½ºÅ©¸³Å͸¦ Àç»ç¿ëÇÏ´Â °ÍÀº NdisFreePacket ÇÔ¼ö¸¦ °¡Áö°í µå¶óÀ̹ö ÇÒ´ç ÆÐŶ Ç®·Î ÆÐŶÀ» ¸®ÅÏÇÏ°í ³ªÁß¿¡ ¶Ç´Ù¸¥ º¸³»±â¸¦ À§Çؼ ÀçÇÒ´çÇÏ´Â °Íº¸´Ù ´õ ÁÁÀº ÆÛÆ÷¸Õ½º¸¦ ³º´Â´Ù.
NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö´Â NdisSend (ȤÀº NdisSendPackets) ÇÔ¼ö¸¦ °¡Áø ÇϺÎÀÇ ¹Ì´ÏÆ÷Æ®·Î ±×·¯ÇÑ º¸³»±â ÆÐŶÀ» Àü´ÞÇϱâ Àü¿¡ ½Å¼±ÇÑ ÆÐŶ µð½ºÅ©¸³Å;ÈÀ¸·Î »óÀ§ ·¹º§ ÇÁ·ÎÅäÄݷκÎÅÍ µé¾î¿À´Â º¸³»±â¸¦ ´Ù½Ã ÆÐŰÁöÈ ÇØ¾ßÇÑ´Ù.
NdisSend ÇÔ¼öÀÇ È£ÃâÀÚ´Â IRQL <= DISPATCH_LEVEL¿¡¼ ½ÇÇàÇÑ´Ù.
|