MiniportSend

NDIS_STATUS 

  MiniportSend(

    IN NDIS_HANDLE  MiniportAdapterContext,

    IN PNDIS_PACKET  Packet,

    IN UINT  Flags

    );

MiniportSend´Â ¸¸¾à µå¶óÀ̹ö°¡ MiniportSendPackets, MiniportWanSend, ȤÀº MiniportCoSendPackets ÇÔ¼ö¸¦ °¡ÁöÁö ¾Ê´Â´Ù¸éÀº ÇÊ¿äÇÑ ÇÔ¼öÀÌ´Ù. MiniportSend´Â ³×Æ®¿öÅ©À» °ÉÃÄ ÇÁ·ÎÅäÄÝ Á¦°ø ÆÐŶÀ» Àü¼ÛÇÑ´Ù.

¸Å°³º¯¼ö

MiniportAdapterContext
µå¶óÀ̹ö°¡ MiniportInitialize¿¡ ÀÇÇØ ¼³Á¤µÈ NIC ´ç »óŸ¦ À¯ÁöÇÏ´Â ¹Ì´ÏÆ÷Æ® ÇÒ´ç ÄÁÅØ½ºÆ® ¿µ¿ª¿¡ ´ëÇÑ Çڵ鸦 ÁöÁ¤ÇÑ´Ù.

Packet
Àü¼ÛµÉ µ¥ÀÌÅ͸¦ ÁöÁ¤ÇÏ´Â ÆÐŶ µð½ºÅ©¸³Å͸¦ °¡¸®Å²´Ù.

Flags
ÇÁ·ÎÅäÄÝ¿¡ ÀÇÇØ ¼³Á¤µÇ´Â ÆÐŶ Ç÷¡±×µéÀ» ÁöÁ¤ÇÑ´Ù.

¸®Åϰª

MiniportSend´Â ´ÙÀ½°ú °°Àº ¾î¶² °ªÀ» ¸®ÅÏÇÒ ¼ö ÀÖ´Ù:

NDIS_STATUS_SUCCESS
µå¶óÀ̹ö´Â (ȤÀº NIC) Àü¼ÛÀ» À§ÇÑ ÆÐŶ µ¥ÀÌÅ͸¦ ¼ö¶ôÇϰí, NDIS°¡ ÇÇ·ÎÅäÄÝ¿¡°Ô ¸®ÅÏÇÒ ÆÐŶÀ» MiniportSend´Â ¸®ÅÏÇÑ´Ù.

NDIS_STATUS_PENDING
µå¶óÀ̹ö°¡ NdisMSendComplete¿¡ ´ëÇÑ È£Ãâ·Î ºñµ¿±âÀûÀ¸·Î ÆÐŶÀ» ¿Ï¼ºÇÒ °ÍÀÌ´Ù.

NDIS_STATUS_RESOURCES
µå¶óÀ̹ö(ȤÀº NIC)Àº ÇöÀç ÁÖ¾îÁø ÆÐŶÀ» ó¸®Çϱâ À§ÇØ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ÀÚ¿øÀÌ ºÒÃæºÐÇÏ´Ù¸éÀº NDIS´Â µå¶óÀ̹ö°¡ ´ÙÀ½ NdisMSendResourcesAvailable ȤÀº NdisMSendComplete¸¦ È£ÃâÇÒ ¶§ ´Ù½Ã Á¦ÃâÀ» À§ÇØ º¸³»±â ÆÐŶÀ» Å¥¿¡ ÀúÀåÇØ¾ß ÇÑ´Ù.

¸¸¾à ºñÁ÷·ÄÈ­µÈ ¹Ì´ÏÆ÷Æ®´Â MiniportSend ÇÔ¼ö·ÎºÎÅÍ NDIS_STATUS_RESOURCES¸¦ ¸®ÅÏÇÑ´Ù¸éÀº, NDIS´Â ¿¡·¯ »óÅ·ΠÇÁ·ÎÅäÄÝ¿¡ ÁÖ¾îÁø ÆÐŶÀ» µÇµ¹·Á ¸®ÅÏÇÑ´Ù.

NDIS_STATUS_NO_CABLE
NICÀÌ ³×Æ®¿öÅ© ÄÉÀ̺íÀÌ NICÀ¸·ÎºÎÅÍ ¿¬°áÀÌ ¾ÈµÇ¾ú±â ¶§¹®¿¡ º¸³»±â ¿¬»êÀ» ½ÇÆÐÇÑ´Ù.

NDIS_STATUS_FAILURE
ÁÖ¾îÁø ÆÐŶÀÌ NIC¿¡°Ô À¯È¿ÇÏÁö ¾Ê°Å³ª Çã¶ôÇÒ ¼ö ¾ø´Ù. MiniportSend´Â ¸¸¾à Àû´çÇÏ°Ô ½ÇÆÐ¸¦ ¼³¸íÇÏ´Â NDIS_STATUS_XXX °ªÀÌ ¾ø´Ù¸éÀº NDIS_STATUS_FAILURE·Î ¸®ÅÏÇØ¾ß ÇÑ´Ù. Preferably, MiniportSend´Â ½ÇÆÐÀÇ Æ¯Á¤ ÀÌÀ¯¸¦ ÀεðÄÉÀÌÆ®ÇÏ´Â NDIS_STATUS_XXX °ªÀ» ¸®ÅÏÇØ¾ß ÇÑ´Ù.

ÁÖ¼®

¸¸¾à µå¶óÀ̹ö°¡ ÃʱâÈ­ÇÒ ¶§ MiniportSend¿Í MiniportSendPackets µÑ ´Ù¸¦ µî·ÏÇÑ´Ù¸éÀº, MiniportSend ÇÔ¼ö´Â °áÄÚ NDIS¿¡ ÀÇÇØ È£ÃâµÇÁö ¾Ê´Â´Ù.

MiniportSend´Â ¾ÈÀüÇÏ°Ô ÆÐŶ°ú ÁÖ¾îÁø ÆÐŶÀÌ ¿Ï¼ºµÉ ¶§±îÁö ÆÐŶ¿¡ ¿¬°áµÈ ¸ðµç ¹öÆÛ µð½ºÅ©¸³Å͵鿡 Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ¸¸¾à MiniportSend°¡ NDIS_STATUS_PENDING°ú´Â ´Ù¸¥ ȤÀº Á÷·ÄÈ­µÈ µå¶óÀ̹öÀÇ NDIS_STATUS_RESOURCES·Î »óŰ¡ ¸®ÅϵȴٸéÀº, ¿ä±¸´Â ¿Ï¼ºÀÌ °í·ÁµÇ¾îÁö°í ÆÐŶ µð½ºÅ©¸³ÅÍÀÇ ¼ÒÀ¯±Ç°ú ÆÐŶ°ú °ü·ÃµÈ ¸ðµç ¸Þ¸ð¸®´Â ÇÒ´çÇÑ ÇÁ·ÎÅäÄÝ·Î ¹Ù²ï´Ù.(reverts to)

¸¸¾à ºñÁ÷·ÄÈ­µÈ µå¶óÀ̹öÀÇ MiniportSend ÇÔ¼ö°¡ NDIS_STATUS_RESOURCES¸¦ ¸®ÅÏÇÑ´Ù¸éÀº, ¿ä±¸´Â ¶ÇÇÑ ¿Ï¼ºÀ¸·Î ¿©°ÜÁø´Ù. ±×·¯ÇÑ ºñ Á÷·ÄÈ­µÈ µå¶óÀ̹öÀÇ MiniportSend ÇÔ¼ö´Â ¸¸¾à µå¶óÀ̹ö°¡ ÇöÀç ±×°ÍÀ» Àü¼ÛÇϱâ À§ÇØ ºÒÃæºÐÇÑ ÀÚ¿øÀ» °¡Áö°í ÀÖ°í ÆÐŶÀÌ À¯È¿ÇÏ´Ù¸éÀº ³»ºÎÀûÀ¸·Î ÁÖ¾îÁø ÆÐŶÀ» Å¥¿¡ ÀúÀåÇØ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ È¯°æ¾Æ·¡¿¡¼­, MiniportSend´Â Å¥¿¡ ÀúÀåµÈ ÆÐŶÀ» À§ÇØ NDIS_STATUS_PENDINGÀ» ¸®ÅÏÇØ¾ß ÇÏ°í °è¼ÓÇØ¼­ ÆÐŶÀ» Àü¼ÛµÇ¾îÁú ¶§ NdisMSendComplete È£ÃâÇØ¾ß ÇÑ´Ù. ºñÁ÷·ÄÈ­µÈ ¹Ì´ÏÆ÷Æ®´Â NdisMSendResourcesAvailable¸¦ È£ÃâÇÒ ¼ö ¾ø´Ù.

MiniportSend°¡ NDIS_STATUS_PENDINGÀ» ¸®ÅÏÇÑ´Ù¸éÀº, µå¶óÀ̹ö´Â °è¼ÓÇØ¼­ NdisMSendComplete¸¦ È£ÃâÇÔÀ¸·Î½á ¿ä±¸ÀÇ ¿Ï¼ºÀ» ½ÅÈ£È­ÇØ¾ß ÇÑ´Ù. MiniportSend°¡ NDIS_STATUS_RESOURCES°¡ ¸®ÅÏÇÒ ¶§, NDIS ¶óÀ̺귯¸®´Â ¸¸¾à µå¶óÀ̹ö°¡ Á÷·ÄÈ­µÇ¾îÁø´Ù¸éÀº, NDIS_STATUS_PENDINGÀ¸·Î ÇÁ·ÎÅäÄÝ¿¡ ´ëÇÑ ÀÌ·¯ÇÑ »óŸ¦ ¹Ý¿µÇÑ´Ù.

Á÷·ÄÈ­µÈ µå¶óÀ̹ö°¡ NDIS_STATUS_RESOURCES·Î ÆÐŶÀ» ¸®ÅÏÇÒ ¶§, MiniportSend ÇÔ¼ö¿¡ Á¦ÃâµÈ ´ÙÀ½ ÆÐŶÀº NDIS ¿¡°Ô ¸®ÅÏµÈ °°Àº ÆÐŶÀÌ´Ù. °á°úÀûÀ¸·Î, MiniportSend´Â ¸¸¾à µå¶óÀ̹ö°¡ ÇöÀç ±× Á¤º¸¸¦ ÀúÀåÇϱâ À§ÇØ ÃæºÐÇÑ ÀÚ¿øµéÀ» °¡Áö°í ÀÖ´Ù¸éÀº ±×·¯ÇÑ ¸®ÅÏµÈ ÆÐŶ¿¡ ´ëÇØ Á¤º¸¸¦ º¸À¯ÇÏ°Ô ÇÔÀ¸·Î½á ÃÖÀûÈ­ÇÒ ¼ö ÀÖ´Ù. NDIS´Â MiniportSend°¡ Á÷·ÄÈ­µÈ µå¶óÀ̹ö°¡ óÀ½ ¹ß»ý¿¡¼­, NdisMSendResourcesAvailable ȤÀº NdisMSendComplete¸¦ È£ÃâÇÏÀÚ¸¶ÀÚ ±×·¯ÇÑ ÆÐŶÀ» ¹Þ¾ÆµéÀÌ´Â Áغñ°¡ µÇÀÖ´Ù°í ÃßÃøÇÑ´Ù.

°¢ ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö´Â ¾Æ·¡ µå¶óÀ̹öÀÇ MiniportSend ÇÔ¼ö¿¡ ÀÇÇØ NICÀ¸·Î Àü´ÞµÇ¾îÁö±â À§ÇØ ¼³Á¤µÈ NdisSend¿¡ ÆÐŶ µð½ºÅ©¸³Å͵éÀ» Àü´ÞÇØ¾ß ÇÑ´Ù. Áï, ÇÁ·ÎÅäÄÝÀº ÇÁ·ÎÅäÄÝÀÌ ¹ÙÀεåµÇ¾îÁö´Â ¹Ì´ÏÆ÷Æ®¿¡ ÀÇÇØ ¼±ÅõǾîÁö´Â ¹Ìµð¾ö ŸÀÔ¿¡ Åä´ë·Î ¿ä±¸µÇ¾îÁö´Â °ÍÀÌ ¹«¾ùÀÎÁö¸¦ °áÁ¤Çϴ åÀÓÀ» Áø´Ù. ±×·¯³ª ÇÁ·ÎÅäÄÝÀº MiniportSend°¡ ¸¸¾à ¹Ìµð¾öÀÌ Àü¼ÛÇÒ °Íµé¿¡ ´ëÇØ ÃÖ¼Ò ±æÀÌ ¿ä±¸¸¦ ÇÑ´Ù¸éÀº pad ÇØ¾ß µÇ´Â ¼±ÅÃµÈ ¹Ìµð¾öÀ» À§ÇØ ÃÖ¼Òº¸´Ù ÀÛ°Ô ¿¬°áµÈ ¹öÆÛ µð½ºÅ©¸³Å͵鿡 ÀÇÇØ ¸ÊµÈ net ÆÐŶµéÀ» Á¦°øÇÒ ¼ö ÀÖ´Ù.

³ôÀº °èÃþ ÇÁ·ÎÅäÄݰú ¾Æ·¡ °èÃþ NIC µå¶óÀ̹ö»ó¿¡ ÀÖ´Â ¾î¶² NDIS intermediate µå¶óÀ̹ö´Â ¾î¶² ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö·Î¼­ ¾Æ·¡ ¹Ì´ÏÆ÷Æ®¿Í ¼±ÅÃµÈ ¹Ìµð¾ö¿¡ ¿ä±¸µé¿¡ µû¶ó ÆÐŶµéÀ» ¼³Á¤Çϱâ À§ÇØ °°Àº Ã¥ÀÓÀ» °¡Áø´Ù. ±×·¯ÇÑ ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö´Â ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö¿¡ ÀÇÇØ ÇÒ´çµÈ fresh ÆÐŶ µð½ºÅ©¸³Åͳ»¿¡¼­ °¢ µé¾î¿À´Â º¸³»±â ÆÐŶÀ» repackage¸¦ ÇØ¾ß ÇÑ´Ù.

MiniportSend´Â ´ÜÁö ÀÚ½ÅÀÇ ¸ñÀûÀ» À§ÇØ NDIS_PACKET ±¸Á¶Ã¼³»¿¡ MiniportReserved¿¡ 8¹ÙÀÌÆ® ¿µ¿ªÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. °á°úÀûÀ¸·Î, º¸³»±â ¿ä±¸µéÀ» ¾Æ·¡ NIC µå¶óÀ̹ö¿¡ º¸³»±â ¿ä±¸µéÀ» Æ÷¿öµåÇÏ´Â NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö´Â ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö°¡ ÆÐŶ pool·ÎºÎÅÍ ÇÒ´çÇÑ fresh ÆÐŶ µð½ºÅ©¸³Å͵鳻¿¡ MiniportSend ÇÔ¼ö¿¡ ´ëÇÑ ÀÔ·ÂÀ¸·Î ÆÐŶµéÀ» repackageÇØ¾ß ÇÏ°í ±×·¡¼­ ¾Æ·¡ ¹Ì´ÏÆ÷Æ®´Â »ç¿ëÇÒ ¼ö ÀÖ´Â MiniportReserved ¿µ¿ªÀ» °¡Áø´Ù.

MiniportSend´Â ¿ä±¸µÈ Àü¼ÛÀÇ ¹ÙÀÌÆ®·Î ÃÑ Å©±â¿Í ÆÐŶ¿¡ ¿¬°áµÈ ¹öÆÛ µð½ºÅ©¸³ÅÍÀÇ ¼ö¿Í °°Àº Á¤º¸¸¦ »Ì±â À§ÇØ NdisQueryPacketÀ» È£ÃâÇÑ´Ù. Àü¼ÛµÉ µ¥ÀÌÅÍ¿¡ Æ÷ÇÔÇÏ´Â °¢ ¹öÆÛµé¿¡ ´ëÇØ Á¤º¸¸¦ »Ì±â À§ÇØ NdisGetFirstBufferFromPacket, NdisQueryBuffer, NdisQueryBufferOffset¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.

Flags ¸Å°³º¯¼öµéÀº ÆÐŶ µ¥ÀÌÅͳ»¿¡ Æ÷ÇÔÇÏÁö ¾Ê´Â º¸³»±â¿¡ ´ëÇØ Á¤º¸¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù. ÇöÀç, ½Ã½ºÅÛ Á¤ÀÇ Ç÷¡±×µéÀÌ ¾øÁö¸¸Àº, ´õ °¡±õ°Ô Ä¿ÇÃµÈ ÇÁ·ÎÅäÄÝ¿Í ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö ½ÖÀº ÀÌ·¯ÇÑ MiniportSend°¡ NdisGetPacketFlags·Î °Ë»öÇÒ ¼ö ÀÖ´Â ¸Å°³º¯¼ö³»¿¡ Á¤º¸¸¦ Àü´ÞÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª, ±×·¯ÇÑ µå¶óÀ̹ö ½ÖÀº °¢ ÆÐŶ µð½ºÅ©·´ÅÍ¿Í °ü·ÃµÈ NDIS_PACKET_OOB_DATA ºí·°³»¿¡¼­ ŸÀÓ½ºÅÆÇÁµé°ú ÆÐŶ ¿ì¼±±Ç°°Àº ´õ ¸¹Àº Á¤º¸¸¦ Åë½ÅÇÒ ¼ö ÀÖ´Ù.

¾Æ·¡ µå¶óÀ̹öÀÇ MiniportQueryInformation ÇÔ¼ö°¡ NDIS_MAC_OPTION_NO_LOOPBACK Ç÷¡±×¸¦ NDIS ¶óÀ̺귯¸®°¡ OID_GEN_MAC_OPTIONS¸¦ Äõ¸®ÇÒ ¶§ ¼³Á¤ÇÑ´Ù¸éÀº, ¹Ì´ÏÆ÷Æ®´Â ¾î¶² ÆÐŶµéÀ» ·çÇÁ¹é ½Ãµµ¸¦ ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. NDIS ¶óÀ̺귯¸®´Â ±×·¯ÇÑ µå¶óÀ̹ö¸¦ À§ÇØ ¼ÒÇÁÆ®¿þ¾î ·çÇÁ¹é Áö¿øÀ» Á¦°øÇÑ´Ù.

MiniportSend´Â ÀÎÅÍ·´Æ®¿¡ ÀÇÇØ ¼±Á¡µÉ ¼ö ÀÖ´Ù.

µðÆúÆ®·Î, MiniportSend´Â IRQL DISPATCH_LEVELÀ» ½ÇÇàÇÑ´Ù.