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À» ½ÇÇàÇÑ´Ù.
|