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 ºí·°¾È¿¡ ÇϺÎÀÇ µå¶óÀ̹ö¿Í °ü°è°¡ ÀÖ´Ù.

Á÷·ÄÈ­µÈ ÇϺÎÀÇ µå¶óÀ̹ö°¡ À¯È¿ÇÑ º¸³»±â ÆÐŶÀ» Àü¼ÛÇϱâ À§Çؼ­ ÀÚ¿øÀÌ ºÎÁ·ÇÒ ¶§ ´ÙÀ½Áß Çϳª¸¦ ÇÒ ¼ö ÀÖ´Ù:

  1. MiniportSend ÇÔ¼ö´Â ³»ºÎÅ¥¿¡ ÆÐŶÀ» »ðÀÔÇÒ ¼ö ÀÖ°í NDIS_STATUS_PENDINGÀ» ¸®ÅÏÇÑ´Ù.

    ÀÚ¿øÀÌ »ç¿ëµÉ ¼ö ÀÖÀ» ¶§±îÁö µå¶óÀ̹ö´Â Å¥¿¡ ÀúÀåµÈ ÆÐŶÀ» À¯ÁöÇϰí À¯»ç½Ã¿¡ ÆÐŶÀ» º¸³½´Ù.

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