NdisSendPackets

VOID

  NdisSendPackets(

    IN NDIS_HANDLE  NdisBindingHandle,

    IN PPNDIS_PACKET  PacketArray,

    IN UINT  NumberOfPackets

    );

NdisSendPackets ÇÔ¼ö´Â ÇϺÎÀÇ µå¶óÀ̹ö·Î °¡´ÉÇÏ´Ù¸é OOB Á¤º¸¿Í ¿¬°üµÈ ´ÙÁ߯ÐŶ º¸³»±â ¸®Äù½ºÆ®¸¦ ¾Ë¸°´Ù.

¸Å°³º¯¼ö

NdisBindingHandle
Ÿ°Ù NICÀ» È®ÀÎÇϰųª È£ÃâÀÚ°¡ ¹ÙÀεùÇÑ ´ÙÀ½ ÇÏÀ§ µå¶óÀ̹öÀÇ °¡»ó ¾î´ðÅ͸¦ È®ÀÎÇÏ´Â NdisOpenAdapter ÇÔ¼ö¿¡ ÀÇÇØ¼­ ¸®ÅÏµÈ ÇÚµéÀ» ¼­¼úÇÑ´Ù. ÇϺÎÀÇ µå¶óÀ̹ö°¡ ¿¬°áÁöÇâ ¹Ì´ÏÆ÷Æ®¶ó¸é ÇÁ·ÎÅäÄÝÀº NdisSend ÇÔ¼öº¸´Ù´Â NdisCoSendPackets ÇÔ¼ö¸¦ È£ÃâÇØ¾ßÇÑ´Ù.

PacketArray
ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÇ ¹è¿­À» °¡¸®Å²´Ù. ¹è¿­¾È¿¡ °¢°¢ÀÇ ÆÐŶ µð½ºÅ©¸³ÅÍ´Â ÇϺÎÀÇ NIC µå¶óÀ̹ö°¡ ³×Æ®¿÷ »óÀ¸·Î Àü¼ÛÇØ¾ßÇÏ´Â µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ ¸ÅÇÎÇÑ Ã¼ÀÎÈ­µÈ ¹öÆÛ µð½ºÅ©¸³Å͸¦ °®´Â´Ù. ¶ÇÇÑ °¢°¢ÀÇ ÆÐŶ µð½ºÅ©¸³ÅÍ´Â ¿¬°üµÈ NDIS_PACKET_OOB_DATA ºí·°À» °®´Â´Ù. È£ÃâÀÚ´Â ÇϺÎÀÇ µå¶óÀ̹ö¿Í ¿¬°üµÈ ÆÐŶ ¿ì¼±±Ç°ú °°Àº ¹Ìµð¾ö ƯÁ¤ OOB Á¤º¸¿Í ŸÀÓ½ºÅÆÇÁ¸¦ ÀÌ¹Ì ¼³Á¤Çß´Ù.

NumberOfPackets
ÆÐŶ ¹è¿­¾È¿¡ Æ÷ÀÎÅ͸¦ ¼­¼úÇÑ´Ù.

ÁÖ¼®

ÁÖ¾îÁø ¹è¿­¿¡ °¢°¢ÀÇ ¿ä¼Ò´Â NDIS_PACKET ŸÀÔÀÇ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ´Ù. ±×¸®°í °¢°¢ÀÇ ÆÐŶ µð½ºÅ©¸³ÅÍ´Â ¿¬°üµÈ NDIS_PACKET_OOB_DATA ºí·°¾È¿¡ È£ÃâÀÚ ¼³Á¤ TimeToSend¿Í MediaSpecificInformation ±×¸®°í MediaSpecificSize °ªµéÀ» °¡Áú ¼ö ÀÖ´Ù. È£ÃâÀÚ´Â NdisAllocatePacket ÇÔ¼ö¸¦ °®°í °¢°¢ÀÇ ±×·¯ÇÑ ÆÐŶ µð½ºÅ©¸³Å͸¦ ÇÒ´çÇØ¾ßÇÑ´Ù.

ÇÁ·ÎÅäÄÝÀº NdisSendPackets ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO¸¦ °¡Áö°í º¸³»±â ¸®Äù½ºÆ®¸¦ ¼öÇàÇÏ´Â OOB Á¤º¸¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ°í NDIS_SET_PACKET_TIME_TO_SEND¸¦ °¡Áö°í ÀÌ Å¸ÀÓ½ºÅÆÇÁ¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ÇϺÎÀÇ µå¶óÀ̹ö´Â À̿ʹ ¹Ý´ë·Î NDIS_GET_PACKET_XXX ¸ÅÅ©·Î¸¦ °¡Áö°í ÀÌ Á¤º¸µéÀ» ¾òÀ» ¼ö ÀÖ´Ù.

ÇÊ¿äÇÏ´Ù¸é ÇÁ·ÎÅäÄÝÀº ÇϺÎÀÇ µå¶óÀ̹ö¸¦ À§Çؼ­ Á¤º¸¸¦ °¡Áö°í ÆÐŶ µð½ºÅ©¸³ÅÍÀÇ Ç÷¡±×¸¦ ¼³Á¤Çϱâ À§Çؼ­ NdisSetPacketFlags ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.

¸¸¾à ÇϺÎÀÇ µå¶óÀ̹ö°¡ MiniportSendPackets Çڵ鷯¸¦ ÀͽºÆ÷Æ®ÇÏÁö ¾Ê´Â´Ù¸é NDIS ¶óÀ̺귯¸®´Â µå¶óÀ̹öÀÇ MiniportSend ÇÔ¼ö·Î Á¦°øµÈ ÆÐŶ ¹è¿­ÀÇ °¢°¢ÀÇ ÆÐŶÀ» À§Çؼ­ ÇϳªÀÇ È£ÃâÀ» ¼ø¼­ÀûÀ¸·Î ÇÑ´Ù. NDIS´Â ÆÐŶÀÌ Á¦°øµÈ ¹è¿­¿¡ µµÂøÇßÀ» ¶§ °°Àº ¼ø¼­·Î ÇϺΠµå¶óÀ̹öÀÇ MiniportSend ÇÔ¼ö·Î °¢°¢ÀÇ ÆÐŶÀ» Àü´ÞÇÑ´Ù.

NDIS´Â ÆÐŶÀÌ NdisSendPackets ÇÔ¼ö·Î Àü´ÞµÆÀ» ¶§ °°Àº ¼ø¼­·Î ÇϺΠµå¶óÀ̹öÀÇ MiniportSendPackets ÇÔ¼ö·Î ÆÐŶ ¹è¿­À» Á¦ÃâÇÑ´Ù. ÇÏÁö¸¸ ÇϺÎÀÇ Á÷·ÄÈ­µÈ ¹Ì´ÏÆ÷Æ®´Â ÇϳªÀÇ ¹è¿­ ¿ä¼Ò¸¦ À§Çؼ­ OOB µ¥ÀÌŸ ºí·°¾È¿¡ NDIS_STATUS_RESOURCES¸¦ ¼³Á¤ÇϹǷνá NDIS·Î µé¾î¿À´Â ¹è¿­¾ÈÀ¸·Î ÆÐŶÀÇ ¸ðÀ½À» ¸®ÅÏÇÒ ¼ö ÀÖ´Ù. ÀÌ·² ¶§ NDIS´Â ³ªÁß¿¡ MiniportSendPackets ÇÔ¼ö·ÎÀÇ ÀçÁ¦ÃâÀ» À§Çؼ­ ¹è¿­¾È¿¡ ÆÐŶÀ» Å¥¿¡ ÀúÀåÇÑ´Ù.

Á÷·ÄÈ­µÈ ¹Ì´ÏÆ÷Æ®¿¡¼­ NDIS´Â Ç×»ó NdisSend³ª NdisSendPackets ÇÔ¼öÈ£Ãâ·Î Àü´ÞµÇµç ¾ÈµÇµç ÇÁ·ÎÅäÄÝ °áÁ¤ º¸³»±â ÆÐŶÀÇ ¼ø¼­¸¦ ÁöŲ´Ù. ±×¸®°í FIFO ¼ø¼­·Î ÇϺÎÀÇ µå¶óÀ̹ö·Î ³Ñ¾î°¬´ÂÁö¸¦ È®ÀÎÇÑ´Ù. ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö°¡ ÆÐŶ µð½ºÅ©¸³ÅÍ Æ÷ÀÎÅÍÀÇ ¹è¿­À» °¡Áö°í NdisSendPackets ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ÇÁ·ÎÅäÄÝÀº ÆÐŶÀÌ ³×Æ®¿÷ »óÀ¸·Î º¸³»Á³À» ¶§ °°Àº ¼ø¼­·Î Æ÷ÀÎÅÍÀÇ ¹è¿­ÀÌ ¼³Á¤µÆ´ÂÁö¸¦ È®½ÇÈ÷ ÇØ¾ßÇÑ´Ù.

NdisSendPackets ÇÔ¼öÀÇ È£ÃâÀÚ´Â ProtocolSendComplete ÇÔ¼ö°¡ ¿Ï·á»óŸ¦ °¡Áö°í È£ÃâµÆÀ» ¶§ ±×·¯ÇÑ ¹è¿­ÀÇ °¢°¢ÀÇ ÆÐŶ¿¡ ´ëÇØ¼­ ¸®ÅÏµÈ »óŸ¦ Å×½ºÆ®ÇؾßÇÑ´Ù. NDIS°¡ ÇÁ·ÎÅäÄÝ Àü¼Û¿¡ ÀÇÇØ¼­ °áÁ¤µÈ FIFO ¼ø¼­·Î Àü¼ÛÀ» À§ÇÑ ÆÐŶÀ» Á¦ÃâÇÏ´Â µ¿¾È¿¡ ÇϺÎÀÇ µå¶óÀ̹ö´Â ´ÚÄ¡´Â ´ë·Î ±×·¯ÇÑ º¸³»±âµéÀ» ¿Ï·áÇÑ´Ù.

ÇϺÎÀÇ µå¶óÀ̹ö°¡ ºñÁ÷·ÄÈ­µÈ ¹Ì´ÏÆ÷Æ®¶ó¸é µé¾î¿À´Â ¸ðµç º¸³»±â ÆÐŶÀ» ¹Þ¾Æµé¿©¾ßÇϰí ÇÊ¿äÇÏ´Ù¸é ±×µéÀ» ³»ºÎÀûÀ¸·Î Å¥¿¡ ÀúÀåÇØ¾ßÇÑ´Ù. ºñÁ÷·ÄÈ­µÈ ¹Ì´ÏÆ÷Æ®´Â ÆÐŶ µð½ºÅ©¸³Å͵éÀÌ ³»ºÎÅ¥¿¡ ÀúÀåµÇ´Â µ¿¾È¿¡ ¹ÙÀεùµÈ ÇÁ·ÎÅäÄÝÀÌ NdisSendPackets ÇÔ¼ö·Î Á¦ÃâÇÏ´Â ÇÁ·ÎÅäÄÝ °áÁ¤ ¼ø¼­¸¦ °®´Â ÆÐŶ µð½ºÅ©¸³Å͸¦ À¯ÁöÇØ¾ßÇÑ´Ù. Ç×»ó ºñÁ÷·ÄÈ­µÈ µå¶óÀ̹ö´Â º¸³»±â¸¦ ºñµ¿±âÀûÀ¸·Î ¿Ï·áÇÑ´Ù. °á°úÀûÀ¸·Î ºñÁ÷·ÄÈ­µÈ ¹Ì´ÏÆ÷Æ®¿Í ¹ÙÀεùµÈ ÇÁ·ÎÅäÄÝÀº ±×µéÀÇ ProtocolSendComplete ÇÔ¼ö·Î Àü´ÞµÇ´Â Status °ªÀ» ¸®Äù½ºÆ®µÈ º¸³»±âÀÇ ¸¶Áö¸· »óÅ °ªÀ¸·Î ¼³Á¤ÇؾßÇÑ´Ù.

ÇÁ·ÎÅäÄÝÀº NdisSendPackets ÇÔ¼ö¸¦ È£ÃâÇÏÀÚ¸¶ÀÚ ´ÙÀ½ÀÇ ¼ÒÀ¯±ÇÀ» ¾çµµÇÑ´Ù:

  • PacketArray¿¡ ¸ðµç ÆÐŶ µð½ºÅ©¸³ÅÍ
  • ±×·¯ÇÑ ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ üÀÎÈ­µÈ ¹öÆÛ µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ¼­ ¸ÊµÈ ¸ðµç ¹öÆÛµé
  • OOB µ¥ÀÌŸ ºí·°¾È¿¡ ¸í½ÃµÈ ¹Ìµð¾ö ƯÁ¤ ¹öÆÛ¸¦ Æ÷ÇÔÇÏ´Â ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í ¿¬°üµÈ ¸ðµç OOB µ¥ÀÌŸ ºí·°
ÇÁ·ÎÅäÄÝÀº NdisSendPackets ÇÔ¼ö·Î ÁÖ¾îÁø ¹è¿­¾È¿¡ °¢°¢ÀÇ ÆÐŶ µð½ºÅ©¸³Å͸¦ °¡Áö°í ProtocolSendComplete ÇÔ¼ö°¡ È£ÃâµÉ ¶§ À̵é ÀÚ¿øÀÇ ¼ÒÀ¯±ÇÀ» ¾ò´Â´Ù.

ÆÐŶ µð½ºÅ©¸³ÅͰ¡ ProtocolSendComplete ÇÔ¼ö·Î ¸®Å쵃 ¶§ NdisUnchainBufferAtXxx ÇÔ¼ö·ÎÀÇ È£ÃâÀ» °¡Áö°í ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ üÀÎÈ­µÈ ¹öÆÛ µð½ºÅ©¸³Å͸¦ ÀúÀåÇÑ ÈÄ¿¡ Àç»ç¿ëÀ» À§Çؼ­ ÆÐŶÀ» ÁغñÇÏ´Â NdisReinitializePacket ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. ±×·¯ÇÑ ÆÐŶ µð½ºÅ©¸³Å͸¦ Àç»ç¿ëÇÏ´Â °ÍÀº NdisFreePacket ÇÔ¼ö¸¦ °¡Áö°í µå¶óÀ̹ö ÇÒ´ç ÆÐŶ Ç®¿¡ ´ëÇÑ µð½ºÅ©¸³Å͸¦ ¸®ÅÏÇÏ°í ³ªÁß¿¡ ¶Ç´Ù¸¥ º¸³»±â¸¦ À§Çؼ­ ÀÚ¿øÀ» ÀçÇÒ´çÇÏ´Â °Íº¸´Ù ´õ ÁÁÀº ÆÛÆ÷¸Õ½º¸¦ ¾ò´Â´Ù.

ProtocolSendComplete ÇÔ¼ö´Â ¶ÇÇÑ Àç»ç¿ëÀ» À§Çؼ­ ÇÁ·ÎÅäÄÝÀÌ ¾î¶² OOB Á¤º¸¸¦ Á¦°øÇÑ´Ù¸é ÁÖ¾îÁø ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í ¿¬°üµÈ OOB ºí·°À» ÁغñÇÒ ¼ö ÀÖ´Ù. ¼±ÅÃÀûÀ¸·Î ÇÁ·ÎÅäÄÝÀº ¼øÂ÷ÀûÀÎ º¸³»±â¸¦ À§Çؼ­ ÆÐŶ µð½ºÅ©¸³ÅͰ¡ ¼³Á¤µÆÀ» ¶§ »ç¿ëÇÏ´Â ¸â¹öµéÀ» È®½ÇÇÏ°Ô ÀçÃʱâÈ­ÇÒ ¼ö ÀÖ´Ù.

NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö´Â NdisSendPackets (ȤÀº NdisSend) ÇÔ¼ö¸¦ °®´Â ÇϺÎÀÇ ¹Ì´ÏÆ÷Æ®·Î ±×·¯ÇÑ º¸³»±â ¸®Äù½ºÆ®¸¦ Àü´ÞÇϱâ Àü¿¡ ½Å¼±ÇÑ ÆÐŶ µð½ºÅ©¸³Å;ȿ¡ ´õ ³ôÀº ·¹º§ÀÇ ÇÁ·ÎÅäÄݷκÎÅÍ °¢°¢ÀÇ µé¾î¿À´Â º¸³»±âµéÀ» ÀçÆÐŰÁöÈ­ÇØ¾ßÇÑ´Ù.

NdisSendPackets ÇÔ¼öÀÇ È£ÃâÀÚ´Â IRQL <= DISPATCH_LEVEL¿¡¼­ ½ÇÇàÇÑ´Ù.