ProtocolReceive
NDIS_STATUS
ProtocolReceive(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize
);
|
ProtocolReceive ÇÔ¼ö´Â ±×µé ÀÚ½ÅÀÌ ºñ¿¬°á ÁöÇâ NIC µå¶óÀ̹öµé¿¡ ¹ÙÀεåÇÑ NDIS ÇÁ·ÎÅäÄݵ鿡¼ ÇÊ¿äÇÑ µå¶óÀ̹ö ÇÔ¼öÀÌ´Ù. ProtocolReceive ÇÔ¼ö´Â ¼ö½ÅµÈ ³×Æ®¿öÅ© ÆÐŶÀÌ ÇÁ·ÎÅäÄÝ Å¬¶óÀÌ¾ðÆ®µé¿¡ °ü½ÉÀÌ ÀÖ´ÂÁö¸¦ °áÁ¤ÇÏ°í ¸¸¾à ±×·¸´Ù¸é, ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌÅ͸¦ º¹»çÇÏ°í °¡´ÉÇÑ ÀεðÄÉÀÌÆ®µÈ ÆÐŶÀÇ ³ª¸ÓÁö¸¦ °Ë»öÇϱâ À§ÇØ NdisTransferData ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
¸Å°³º¯¼ö
- ProtocolBindingContext
- ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö´Â ¹ÙÀεù´ç ·±Å¸ÀÔ »óŸ¦ À¯ÁöÇϱâ À§ÇØ ÇÁ·ÎÅäÄÝ ÇÒ´ç ÄÁÅØ½ºÆ® ¿µ¿ª¿¡ ´ëÇÑ ÇÚµéÀ» ÁöÁ¤ÇÑ´Ù. µå¶óÀ̹ö´Â NdisOpenAdapter ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ÀÌ·¯ÇÑ ÇÚµéÀ» Á¦°øÇÑ´Ù.
- MacReceiveContext
- ¾Æ·¡ NIC µå¶óÀ̹ö´Â ³×Æ®¿öÅ©À¸·ÎºÎÅÍ ¼ö½ÅµÈ ÆÐŶ°ú °ü·ÃÇÑ ÄÁÅØ½ºÆ® ÇÚµéÀ» ÁöÁ¤ÇÑ´Ù. ÀÌ·¯ÇÑ ÇÚµéÀº NdisTransferData ÇÔ¼ö¿¡ ÇÊ¿äÇÑ ¸Å°³º¯¼ö¿Í ÀεðÄÉÀ̼ÇÀ» ÇÏ´Â ¾Æ·¡ µå¶óÀ̹ö¿¡ ÀÇÇØ »ç¿ëÀÌ ¿¹¾àµÈ ÇÁ·ÎÅäÄÝ¿¡°Ô ºÒºÐ¸íÇÏ´Ù.
- HeaderBuffer
- ¹öÆÛÈµÈ ÆÐŶ Çì´õ¸¦ Æ÷ÇÔÇÏ´Â ¹üÀ§ÀÇ º£À̽º °¡»ó ÁÖ¼Ò¸¦ °¡¸®Å²´Ù. ÁÖ¼Ò´Â ProtocolReceive ÇÔ¼ö¿¡ ´ëÇÑ Çö È£Ãâ³»¿¡ ´ÜÁö À¯È¿ÇÏ´Ù.
- HeaderBufferSize
- ÆÐŶ Çì´õ¿¡¼ ¹ÙÀÌÆ® ¼öµéÀ» ÁöÁ¤ÇÑ´Ù.
- LookAheadBuffer
- ¹öÆÛÈµÈ ³×Æ®¿öÅ© ÆÐŶ µ¥ÀÌÅÍÀÇ LookaheadBufferSize ¹ÙÀÌÆ®µéÀ» Æ÷ÇÔÇÏ´Â º£À̽º °¡»ó ÁÖ¼ÒÀÇ ¹üÀ§¸¦ °¡¸®Å²´Ù. ÀÌ·¯ÇÑ ÁÖ¼Ò´Â ´ÜÁö ProtocolReceive¿¡ ´ëÇÑ Çö È£Ãâ ³»¿¡¼¸¸ À¯È¿ÇÏ´Ù.
- LookaheadBufferSize
- lookahead ¹öÆÛ³» ³×Æ®¿öÅ© ÆÐŶ µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ® ¼öµéÀ» ÁöÁ¤ÇÑ´Ù.
ÀεðÄÉÀÌÆ® ÇÏ´Â µå¶óÀ̹ö´Â ÀÌ·¯ÇÑ ¼ö°¡ Àû¾îµµ OID_GEN_CURRENT_LOOKAHEAD·Î NdisRequest ÇÔ¼ö¿¡ ´ëÇÑ ÇÁ·ÎÅäÄÝÀÇ ¼±Çà È£ÃâÀ» À§ÇØ ¸®ÅÏÇÑ Å©±âº¸´Ù Ä¿¾ß Çϰí ȤÀº Àû¾îµµ ÆÐŶÀÇ Å©±âº¸´Ù ÀÛ¾Æ¾ß ÇÏ´Â °ÍÀ» È®½ÇÈ÷ ÇØ¾ß ÇÑ´Ù.
¸¸¾à PacketSize°¡ ÁÖ¾îÁø LooaheadBufferSizeº¸´Ù À۰ųª °°´Ù¸é, lookahead ¹öÆÛ´Â ¿ÏÀüÇÑ ÆÐŶÀ» Æ÷ÇÔÇÑ´Ù. ¸¸¾à ¾Æ·¡ µå¶óÀ̹ö°¡ NdisMIndicateReceivePacket ÇÔ¼ö·Î ÀεðÄÉÀ̼ÇÀ» ÇÑ´Ù¸é, lookahead ¹öÆÛ´Â Ç×»ó full network ÆÐŶÀ» Æ÷ÇÔÇÑ´Ù.
- PacketSize
- ³×Æ®¿öÅ© ÆÐŶ µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ® Å©±âÀ» ÁöÁ¤ÇÑ´Ù. ÆÐŶÀÇ ±æÀÌ´Â Çì´õÀÇ ±æÀ̸¦ Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù.
ProtocolReceive ÇÔ¼ö´Â ÇÁ·ÎÅäÄÝÀº ÁÖ¾îÁø LookaheadBufferSize ·Î ÀÌ·¯ÇÑ ¸Å°³º¯¼öµéÀ» ºñ±³ÇÔÀ¸·Î½á NdisTransferData ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÒÁö¸¦ °áÁ¤ÇÑ´Ù.
¸®Åϰª
ProtocolReceive ÇÔ¼ö´Â ´ÙÀ½°ú °°Àº °ªµé Áß Çϳª¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù.
- NDIS_STATUS_NOT_ACCEPTED
- ÇÁ·ÎÅäÄÝÀº ÀεðÄÉÀÌÆ®µÈ ÆÐŶÀ» À§ÇØ »ç¿ëÀ» ÇÏÁö ¾Ê°í Áï, ÀεðÄÉÀÌÆ®µÈ ³×Æ®¿öÅ© µ¥ÀÌÅÍ¿¡¼ °ü½ÉÀÖ´Â Çö Ŭ¶óÀÌ¾ðÆ®µéÀº ¾ø´Ù.
°ÅÀýµÈ ÆÐŶµéÀ» À§ÇØ ºü¸£°Ô ÀÌ·¯ÇÑ »óŸ¦ ¸®ÅÏÇÏ´Â °ÍÀº ÇÁ·ÎÅäÄÝÀ» À§ÇØ ±×¸®°í ÀüüÀûÀ¸·Î ½Ã½ºÅÛÀ» À§ÇØ °¡Àå »óÀ§ °¡´ÉÇÑ ³×Æ®¿öÅ© I/O throughput¿¡ ´õ ³ôÀº ÆÛÆ÷¸Õ½º¸¦ ³º´Â´Ù.
- NDIS_STATUS_SUCCESS
- ProtocolReceive ÇÔ¼ö´Â Çì´õ Á¤º¸¸¦ ó¸®ÇÏ°í ÆÐŶÀ» ¼ö¶ôÇÑ´Ù. Áï, Çì´õ ±×¸®°í lookahead ¹öÆÛµé·ÎºÎÅÍ ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌÅ͸¦ º¹»çÇÏ°í °¡´ÉÇÑ ¸¸¾à full ³×Æ®¿öÅ© ÆÐŶº¸´Ù ÀÛÀº °ªÀÌ ÀεðÄÉÀÌÆ®µÈ´Ù¸é ³²¾ÆÀÖ´Â µ¥ÀÌÅ͸¦ °Ë»öÇϱâ À§ÇØ NdisTransferData ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
ÁÖ¼®
NDIS´Â ¾Æ·¡ ºñ¿¬°áÁöÇâ NIC ¹Ì´ÏÆ÷Æ® À§¿¡ ¹ÙÀ̵åµÈ ¾î¶² ¼öÀÇ ÇÁ·ÎÅäÄÝ µå¶óÀ̹öµéÀ» À§ÇØ µ¿µîÇÑ ÆÐŶ Á¢±ÙÀ» Á¦°øÇÑ´Ù. NDIS´Â ProtocolReceive ÇÔ¼ö´Â ¹ÙÀεåµÈ ÇÁ·ÎÅäÄݵéÀº °è¼ÓÀûÀÎ ÆÐŶµéÀ» À§ÇÑ ÀεðÄÉÀ̼ǵéÀ» ¼ö½ÅÇÏ´Â ¼ø¼¸¦ ÃÖÀûÈÇϱâ À§ÇØ ¸®ÅÏÇÑ »óŸ¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¹Ì´ÏÆ÷Æ®´Â ÇÊÅÍ Æ¯Á¤ NdisM..IndicateReceive ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§, NDIS´Â ¹ÙÀ̵åµÈ ÇÁ·ÎÅäÄݵéÀÇ ProtocolReceive ÇÔ¼öµéÀ» È£ÃâÇÑ´Ù. NdisM..IndicateReceive ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâÀº ³×Æ®¿öÅ© ÆÐŶ Áï ¸î¸î ÃʱâÈ lookahead ºÎºÐÀº ¹ÙÀεåµÈ ÇÁ·ÎÅäÄÝ¿¡ ÀÇÇÑ inspectionÀ» À§ÇØ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀεðÄÉÀÌÆ®ÇÑ´Ù. °¢ ProtocolReceive ÇÔ¼ö´Â À̹ø¿¡´Â ÆÐŶ Çì´õ¿Í µ¥ÀÌÅ͸¦ ¼±ÅÃÀûÀ¸·Î Á¶»çÇϰí ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¸¸Å Çì´õ¿Í µ¥ÀÌÅ͸¦ º¹»çÇϰí NIC µå¶óÀ̹ö¿¡°Ô ¸¸¾à ÇÁ·ÎÅäÄÝÀÌ ÆÐŶÀ» ¼ö¶ôÇÑ´Ù¸é ÇÁ·ÎÅäÄÝ ÇÒ´ç ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ üÀÎÈµÈ ÇÁ·ÎÅäÄÝ Á¦°ø ¹öÆÛ¿¡ ¾î¶² ³²¾ÆÀÖ´Â µ¥ÀÌÅ͸¦ º¹»çÇϱâ À§ÇØ ¸í·ÉÇϱâ À§ÇØ NdisTransferData ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ProtocolReceive ÇÔ¼ö´Â ¼ö½Å ÀεðÄÉÀÌ¼Ç´ç ´ÜÁö Çѹø NdisTransferData ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.
Á÷·ÄÈµÈ ¹Ì´ÏÆ÷Æ®´Â ÆÐŶ ¹è¿·ÎºÎÅÍ NdisMIndicateReceivePacket ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡, ¹è¿¿¡¼ ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í °ü·ÃµÈ ´ë¿ª¿Ü ºí·°ÀÇ Status ¸â¹ö¸¦ NDIS_STATUS_RESOURCES·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº ¶ÇÇÑ NDIS¿¡°Ô ±×·¯ÇÑ ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ ÁöÁ¤µÈ ³×Æ®¿öÅ© ÆÐŶ Çì´õ¿Í µ¥ÀÌÅÍ·Î ±×¸®°í ÀεðÄÉÀÌÆ®µÈ ÆÐŶ ¹è¿¿¡¼ ¸ðµç ¿¬¼ÓÀûÀÎ µð½ºÅ©¸³Å͵鿡 ÁöÁ¤µÈ ¼ö½ÅµÈ ³×Æ®¿öÅ© ÆÐŶµé·Î ¹ÙÀεåµÈ ÇÁ·ÎÅäÄݵéÀÇ ProtocolReceive ÇÔ¼öµéÀ» È£ÃâÇϵµ·Ï ÇÑ´Ù. °¢ ProtocolReceive ÇÔ¼ö´Â ÁÖ¾îÁø ÆÐŶ Çì´õ¿Í µ¥ÀÌÅ͸¦ Á¶»çÇÏ°í °¢°¢ ¼±ÅÃÀûÀ¸·Î ÀεðÄÉÀÌÆ®µÈ ³×Æ®¿öÅ© ÆÐŶ µ¥ÀÌÅ͸¦ º¹»çÇÑ´Ù.
¸¸¾à ¾Æ·¡ ¹Ì´ÏÆ÷Æ®´Â ÀεðÄÉÀÌÆ®ÇÑ ¼ö½Åµé·Î ´ë¿ª¿Ü Á¤º¸¸¦ Á¦°øÇÑ´Ù¸é, ProtocolReceive ÇÔ¼ö´Â °¢ ±×·¯ÇÑ ÆÐŶÀ» À§ÇØ ´ë¿ª¿Ü Á¤º¸¸¦ °Ë»öÇϱâ À§ÇØ NdisGetReceivedPacket NDIS_GET_ORIGINAL_PACKETÀ» È£ÃâÇÒ ¼ö ÀÖ´Ù. ±×·¯ÇÑ ¾Æ·¡ ¹Ì´ÏÆ÷Æ®´Â Ç×»ó full-packet ¼ö½ÅµéÀ» ÀεðÄÉÀÌÆ®Çϱ⠶§¹®¿¡, ProtocolReceive ÇÔ¼ö´Â °áÄÚ NdisMIndicateReceivePacket ÇÔ¼ö·Î ÀεðÄÉÀÌÆ®µÈ ÆÐŶÀ» À§ÇØ NdisTransferData ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
NDIS´Â NdisM..IndicateReceive ȤÀº NdisMIndicateReceivePacket ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâµéÀÌ ¹ß»ýÇÏ´Â °Í ó·³ °è¼ÓÇØ¼ ProtocolReceive ÇÔ¼öµéÀ» È£ÃâÇÏÁö¸¸, ºÐ¸®µÈ È£ÃâµéÀ» »ç¿ëÇÏ¿© ¹ÙÀεåµÈ ÇÁ·ÎÅäÄݵ鿡 ÆÐŶÀ» ÀεðÄÉÀÌÆ®ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¸ðµç ÇÁ·ÎÅäÄÝÀº NDIS ȤÀº ¾Æ·¡ NIC ¹Ì´ÏÆ÷Æ®°¡ ÆÐŶµéÀÌ Àü¼ÛµÇ´Â ³×Æ®¿öÅ©À» °ÉÃÄ ¾î¶² Á¦¾î¸¦ °¡ÁöÁö ¾Ê¾ÒÀ» Àֱ⠶§¹®¿¡ ¼ø¼ÈµÇÁö ¾ÊÀº ¼ö½ÅµÈ ÆÐŶµéÀ» ´Ù·ê ¼ö ÀÖ°Ô ÇØ¾ß ÇÑ´Ù.
µå¶óÀ̹ö °³¹ßÀÚ´Â ÇÁ·ÎÅäÄÝÀÌ ÇÊÅÍ Æ¯Á¤ NdisM..IndicateReceive ÇÔ¼öµéÀ» È£ÃâÇÏ´Â ¾Æ·¡ µå¶óÀ̹öµé·ÎºÎÅÍ Ãß°¡ÀûÀÎ µé¾î¿À´Â ÆÐŶµéÀ» ÀÒÁö ¾Ê±â À§ÇØ ProtocolReceive ÇÔ¼ö¿¡¼ º¸³»´Â ½Ã°£À» ÃÖ¼ÒÈÇØ¾ß ÇÑ´Ù. ProtocolReceive ÇÔ¼ö´Â µé¾î¿À´Â ÆÐŶÀ» °ÅÀýÇØ¾ß Çϰųª ºü¸£°Ô Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇØ °ü½ÉÀÌ ÀÖ´Â °Íó·³ ÆÐŶÀ» ÀνÄÇØ¾ß ÇÑ´Ù. ¸¸¾à ÆÐŶÀ» ¼ö¶ôÇÑ´Ù¸é, ProtocolReceive ÇÔ¼ö´Â ºü¸£°Ô ÆÐŶ µ¥ÀÌÅ͸¦ ³õÀ» Àå¼Ò¸¦ ¹ß°ßÇØ¾ß ÇÏ°í µ¥ÀÌÅ͸¦ º¹»çÇØ¾ß ÇÑ´Ù. ProtocolReceive ÇÔ¼ö°¡ ¸®ÅÏÇÏÀÚ¸¶ÀÚ, ½Ã°£ Á¦ÇÑÀÌ ½É°¢ÇÏÁö ¾Ê¾ÒÀ» ¶§, Çѹø ȤÀº ±× ÀÌ»óÀÇ NdisM..IndicateReceive ÇÔ¼ö·Î ÀεðÄÉÀ̼ǵéÀ» ÇÏ´Â ¾î¶² ¾Æ·¡ ¹Ì´ÏÆ÷Æ®´Â ÀÀ´äÇÏ´Â NdisM..IndicateReceiveComplete ÇÔ¼ö¸¦ È£ÃâÇÒ °ÍÀÌ´Ù. ÇÁ·ÎÅäÄÝ µå¶óÀ̹öÀÇ ProtocolReceiveComplete ÇÔ¼ö´Â ±×¸®°í³ª¼ ¿ø·¡ ÀεðÄÉÀ̼ǵéÀ» À§ÇÑ ¾î¶² ÇÊ¿äÇÑ Àü󸮸¦ ÇàÇÑ´Ù.
¾Æ·¡ µå¶óÀ̹ö´Â NIC¿¡¼ ¼ö½ÅµÈ ÆÐŶ µ¥ÀÌÅͷκÎÅÍ ¾î¶² Çì´õµé°ú Æ®·¹ÀÏ·¯µéÀ» Á¦°ÅÇÏÁö ¾Ê°Å³ª ¾î¶² ¼ö½ÅµÈ ÆÐµùÀ» Á¦°ÅÇÏÁö ¾Ê´Â´Ù. ´Ù¸¥ ¸»·Î, ÆÐŶÀº µ¥ÀÌÅÍÀÇ ÆÐµù°ú ÇÁ·ÎÅäÄݵ鿡 ÀεðÄÉÀÌÆ®µÈ ±æÀ̸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù. ProtocolReceive ÇÔ¼ö´Â ±×·¯ÇÑ ÆÐµùÀ» °¨ÁöÇÏ°í ¹«½ÃÇÒ Ã¥ÀÓÀÌ ÀÖ´Ù.
ProtocolReceive ÇÔ¼ö¿¡ Àü´ÞµÈ HeaderBuffer¿Í LookAheadBuffer ÀÎ ¹öÆÛµéÀº Àбâ Àü¿ëÀÌ°í ´ÜÁö ProtocolReceive ÇÔ¼ö°¡ Á¦¾î¸¦ ¸®ÅÏÇϱâ Àü±îÁö¸¸ À¯È¿ÇÏ´Ù. ProtocolReceive ÇÔ¼ö´Â µå¶óÀ̹ö°¡ ÇÁ·ÎÅäÄÝ ÇÒ´ç ÀúÀå°ø°£¿¡ ÇÊ¿äÇÑ ¸ðµç ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌÅ͸¦ º¹»çÇØ¾ß ÇÑ´Ù. À©µµ¿ìÁî ÀÌõ ÇÁ·ÎÅäÄÝÀº Á÷Á¢ ÀεðÄÉÀ̼ÇÀ» º¹»çÇÒ ¼ö ÀÖ´ÂÁö´Â OID_GEN_MAC_OPTIONS Äõ¸®¸¦ À§ÇØ ¸®ÅÏµÈ NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA Ç÷¡±×¿¡ ÀÇÁ¸ÇÑ´Ù. ¸¸¾à ÀÌ·¯ÇÑ Ç÷¡±×°¡ ¼³Á¤µÈ´Ù¸é, ProtocolReceive ÇÔ¼ö´Â ÀÚ½ÅÀÇ ÀúÀå °ø°£¿¡ ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌÅ͸¦ º¹»çÇϱâ À§ÇØ NdisMoveMemory ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, TdiCopyLookaheadData ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·¯³ª, À©µµ¿ìÁî ÀÌõ ÇÁ·ÎÅäÄÝÀº ¸¸¾à ¾Æ·¡ µå¶óÀ̹ö°¡ NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA Ç÷¡±×¸¦ ¼³Á¤ÇÑ´Ù¸é TdiCopyLookaheadData ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.
µðÆúÆ®·Î, ProtocolReceive ÇÔ¼ö´Â arbitrary ¾²·¹µå ÄÁÅØ½ºÆ®³»¿¡¼ IRQL DISPATCH_LEVEL¿¡¼ ½ÇÇàÇÑ´Ù.
|