TDI_RECEIVE
Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®°¡ TDI_RECEIVE ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡°Ô ¼º¸³µÈ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°á»ó¿¡¼ Á¤»óÀûÀ̰ųª ½Å¼ÓÇÑ TSDU¸¦ ÀεðÄÉÀÌÆ®Çϵµ·Ï ¿ä±¸ÇÑ´Ù.
IRP
IrpSp·Î½á ´ÙÀ½ÀÇ ¸®½ºÆ®¿¡ º¸¿©Áö´Â IRP¾È¿¡ ÀÚ½ÅÀÇ I/O ½ºÅà ·ÎÄÉÀ̼ǿ¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¾ò±â À§Çؼ ÁÖ¾îÁø Irp¸¦ °¡Áö°í Æ®·£½ºÆ÷Æ®´Â IoGetCurrentIrpStackLocation ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. IRP¿¡ ´ëÇÑ Æ÷ÀÎÅÍ´Â Irp·Î½á ´ÙÀ½ÀÇ ¸®½ºÆ®¿¡ º¸¿©Áø´Ù. ÀÌ ¸®Äù½ºÆ®¿Í ¿¬°üµÈ IRP ¸â¹ö´Â ´ÙÀ½°ú °°´Ù:
- Irp->IoStatus.Status
- ¼ö½Å ¸®Äù½ºÆ®ÀÇ ¸¶Áö¸· »óŸ¦ ¼¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â IRP¸¦ ¿Ï·áÇϱâ Àü¿¡ ´ÙÀ½ Áß ÇϳªÀÇ °ªÀ¸·Î ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù:
STATUS_PENDING
STATUS_INSUFFICIENT_RESOURCES
STATUS_INVALID_CONNECTION
STATUS_BUFFER_OVERFLOW
- Irp->IoStatus.Information
- Æ®·£½ºÆ÷Æ®°¡ È£ÃâÀÚ Á¦°ø ¹öÆÛ·Î ¸®ÅÏÇÏ´Â ¸®½ÃºêµÈ µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼¼úÇÑ´Ù.
- IrpSp->MajorFunction
- IRP_MJ_INTERNAL_DEVICE_CONTROLÀ» ¼¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ TDI_XXX ¸®Äù½ºÆ®¿¡¼¸¸ ´Ù·ç´Â TdiDispatchInternalDeviceControl ·çƾÀ» ÀͽºÆ÷Æ®ÇÑ´Ù¸é ÀÌ ¸â¹ö¸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù.
- IrpSp->MinorFunction
- TDI_RECEIVE¸¦ ¼¼úÇÑ´Ù.
- IrpSp->FileObject
- ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ±¸ÇöÇÏ´Â ¿¸° ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù. Æ®·£½ºÆ÷Æ®´Â ÀÌ ¿¬°á¿¡¼ À¯ÁöÇÏ´Â »óŸ¦ Á¢±ÙÇϱâ À§Çؼ FsContext¿Í °¡´ÉÇÏ´Ù¸é FsContext2 Çʵ带 »ç¿ëÇÑ´Ù.
ÀÌ Å¬¶óÀÌ¾ðÆ®´Â ÀÌ ¿¬°á ¿£µåÆ÷ÀÎÆ®»ó¿¡¼ ¿ø°ÝÁö¿ÍÀÇ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀ» ÀÌ¹Ì ¼º¸³½ÃÄ×´Ù.
- IrpSp->Parameters
- ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÏ´Â TDI_REQUEST_KERNEL_RECEIVE ±¸Á¶Ã¼¸¦ °¡¸®Å²´Ù:
struct _TDI_REQUEST_KERNEL_RECEIVE {
ULONG ReceiveLength;
ULONG ReceiveFlags;
} TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE;
Æ®·£½ºÆ÷Æ®´Â ´ÙÀ½°ú °°ÀÌ ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹ö¸¦ »ç¿ëÇÑ´Ù:
- ReceiveLength
- Irp->MdlAddress¿¡ ¸ÊµÈ È£ÃâÀÚ Á¦°ø ¹öÆÛÀÇ ¹ÙÀÌÆ® »çÀÌÁ ¼¼úÇÑ´Ù.
- ReceiveFlags
- ³ªÁß¿¡ ¼¼ú(ÁÖ¼®À» ºÁ¶ó)µÇµíÀÌ ÀÌ Å¬¶óÀÌ¾ðÆ®°¡ ¸®Äù½ºÆ®ÇÏ´Â ¸®½ººê ŸÀÔÀ» ¼¼úÇÑ´Ù.
- Irp->MdlAddress
- ¸®½ÃºêµÈ µ¥ÀÌŸ¸¦ ¸®ÅÏÇÏ´Â Æ®·£½ºÆ÷Æ®ÀÇ È£ÃâÀÚ Á¦°ø ¹öÆÛ¸¦ ¸ÅÇÎÇϴ üÀο¡¼ °¡´ÉÇÏ´Ù¸é óÀ½ MDLÀ» °¡¸®Å²´Ù.
ÁÖ¼®
Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ IRP¸¦ ¼³Á¤Çϱâ À§Çؼ TdiBuildReceive ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ Ŭ¶óÀÌ¾ðÆ®´Â ÀÚ½ÅÀÌ ¿öÇÏ´Â ¸®½ººê ŸÀÔÀ» ¼¼úÇÒ ¼ö ÀÖ´Ù. Æ®·£½ºÆ÷Æ®´Â ReceiveFlags ¸â¹ö¿¡ IrpSp->Parameters¿¡¼ ÀÌ Á¤º¸¸¦ ã´Â´Ù. ÀԷ¿¡¼ ReceiveFlags´Â ´ÙÀ¸ÀÇ Ç÷¡±×µéÀÇ °áÇÕ(OR ¿¬»ê)À¸·Î ¼³Á¤µÉ ¼ö ÀÖ°í 0ÀÌ µÉ ¼öµµ ÀÖ´Ù:
- TDI_RECEIVE_NORMAL
- Æ®·£½ºÆ÷Æ®´Â ÀÌ Å¬¶óÀÌ¾ðÆ®·Î Á¤»óÀûÀÎ TSDU¸¦ ¸®ÅÏÇØ¾ßÇÑ´Ù.
- TDI_RECEIVE_EXPEDITED
- Æ®·£½ºÆ÷Æ®´Â ÀÌ Å¬¶óÀÌ¾ðÆ®·Î ½Å¼ÓÇÑ TSDU¸¦ ¸®ÅÏÇØ¾ßÇÑ´Ù.
- TDI_RECEIVE_PEEK
- Æ®·£½ºÆ÷Æ®´Â ºÎºÐÀûÀÎ TSDU¸¸À̶ó ÇÒÁö¶óµµ ³»ºÎÀûÀ¸·Î Çѹø¿¡ ÀÌ Å¬¶óÀÌ¾ðÆ®·Î ¹öÆÛȵǴ »ç¿ë°¡´ÉÇÑ ¸®½Ãºê µ¥ÀÌŸ¸¦ ¸®ÅÏÇØ¾ßÇÑ´Ù.
ReceiveFlags´Â Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ½ÂÀεǴ Á¤»óÀûÀ̰ųª ½Å¼ÓÇÑ µ¥ÀÌŸÀÇ ÀԷ¿¡¼ 0À̰ųª TDI_RECEIVE_NORMAL°ú TDI_RECEIVE_EXPEDITED¸¦ °¡Áö°í ¼³Á¤µÈ´Ù. ÀÌ Ç÷¡±× Áß¿¡ Çϳª¸¸ ¼³Á¤µÈ´Ù¸é Æ®·£½ºÆ÷Æ®´Â ¸®Äù½ºÆ®µÈ TSDUÀÇ Å¸ÀÔ¸¸À» ¸®ÅÏÇÑ´Ù. ¸¸¾à TDI_RECEIVE_PEEK°¡ ¼³Á¤µÇ¸é Æ®·£½ºÆ÷Æ®´Â ÀÌ Å¬¶óÀÌ¾ðÆ®·ÎºÎÅÍ TSDUÀÇ ³ª¸ÓÁö¿¡ ´ëÇÑ ¼øÂ÷ÀûÀÌ ¸®½Ãºê ¸®Äù½ºÆ®¸¦ ±â´Ù¸®´Â ³»ºÎÀÇ ¹öÆÛ¾È¿¡ µ¥ÀÌŸ¸¦ À¯ÁöÇÏ°í ³»ºÎÀûÀ¸·Î ¹öÆÛÈµÈ ¸®½Ãºê µ¥ÀÌŸ¸¦ ¸®ÅÏÇØ¾ßÇÑ´Ù. TCP/IP¿Í SPX/IPX °°Àº ¸î¸î Æ®·£½ºÆ÷Æ®´Â µ¥ÀÌŸ¸¦ ³»ºÎÀûÀ¸·Î ¹öÆÛÈÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª À©µµ¿ìÁî ¼ÒÄÏ ¾îÇø®ÄÉÀ̼ǰú °°Àº Æ®·£½ºÆ÷Æ® Ŭ¶óÀÌ¾ðÆ®´Â ½Ã½ºÅÛ AFD µå¶óÀ̹ö·ÎºÎÅÍ ¹öÆÛȵÇÁö ¾ÊÀº Æ®·£½ºÆ÷Æ®¿¡ ´ëÇÑ ¹öÆÛÈ Áö¿øÀ» ¾ò´Â´Ù.
ÀüÇüÀûÀ¸·Î Æ®·£½ºÆ÷Æ®´Â ¿ø°ÝÁö·ÎºÎÅÍ ·¹ÄÚµå ³¡ÀÇ ÀεðÄÉÀ̼ÇÀ» ¹Þ°Å³ª ¸®½Ãºê ¹öÆÛ°¡ ä¿öÁú ¶§±îÁö Á¤»óÀûÀÎ µ¥ÀÌŸ¸¦ ¹Þ´Â´Ù. ±×·¯³ª Æ®·£½ºÆ÷Æ®°¡ Á¤»óÀûÀÎ µ¥ÀÌŸ³ª µµÂøÇÏ´Â ½Å¼ÓÇÑ µ¥ÀÌŸ¸¦ ¹Þ°í ÀÖ´Ù¸é Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¹öÆÛ¾ÈÀ¸·Î ÀÌ¹Ì Àü¼ÛµÈ Á¤»óÀûÀÎ µ¥ÀÌŸ¸¦ °¡Áö°í ±×¿¡ ´ëÇØ¼ Áï½Ã IRP¸¦ ¿Ï·áÇϹǷνá Á¤»óÀûÀÎ ¸®½Ãºê ¿¬»êÀ» Ŭ¸®¾îÇØ¾ßÇÑ´Ù. ±×¸®°í³ª¼ Æ®·£½ºÆ÷Æ®´Â ½Å¼ÓÇÑ µ¥ÀÌŸ¿¡ ´ëÇØ¼ Ŭ¶óÀ̾ðÆ®ÀÇ ¸®½Ãºê ¸®Äù½ºÆ®¸¦ ¸¸Á·½ÃÄѾßÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ Ŭ¶óÀÌ¾ðÆ®·Î ¸ðµç ½Å¼ÓÇÑ µ¥ÀÌŸ¸¦ ÀεðÄÉÀÌÆ®ÇßÀ» ¶§ Æ®·£½ºÆ÷Æ®´Â ´ÙÀ½ÀÇ ¸®½Ãºê ¸®Äù½ºÆ®°¡ ±× Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ¼ Á¦½ÃµÆÀ» ¶§ Á¤»óÀûÀÎ ¸®½ººê ÀεðÄÉÀ̼ÇÀ» ´Ù½Ã ½ÃÀÛÇÑ´Ù.
Ŭ¶óÀÌ¾ðÆ®°¡ ÁÖ¾îÁø ¿¬°á ¿£µåÆ÷ÀÎÆ®¿¡¼ÀÇ ¸®½Ãºê¿¡ ´ëÇØ¼ ClientEventReceive, ClientEventReceiveExpedited, ClientEventChainedReceive, ±×¸®°í ClientEventChainedReceiveExpedited Çڵ鷯¸¦ µî·ÏÇß´Ù¸é Æ®·£½ºÆ÷Æ®´Â ¸®½Ãºê IRP¸¦ ¸¸Á·½Ãų ¶§±îÁö ClientEvent(Chained)Receive(Expedited) ·çƾÀ¸·Î ¸®½Ãºê ÀεðÄÉÀ̼ÇÀ» ¸ØÃá´Ù.
Ŭ¶óÀÌ¾ðÆ®°¡ ClientEventReceive³ª ClientEventReceiveExpedited ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ Æ®·£½ºÆ÷Æ®´Â Àüü TSDU°¡ ¾Æ´Ï¶ó¸é ¼øÂ÷ÀûÀÎ TDI_RECEIVE¿¡ ´ëÇØ¼ Ŭ¶óÀÌ¾ðÆ®°¡ ReceiveFlags¸¦ ¼³Á¤Çϱâ À§Çؼ »ç¿ëÇÒ ¼ö ÀÖ´Â ÀεðÄÉÀÌÆ®µÇ´Â ¸®½Ãºê À̺¥Æ®ÀÇ Á¤º¸¸¦ Á¦°øÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â OR ¿¬»êµÈ ÇϳªÀÌ»óÀÇ ´ÙÀ½ Ç÷¡±×µéÀ» °¡Áö°í ClientEventReceive(Expedited)·Î ReceiveFlags ¸Å°³º¯¼ö¸¦ ¼³Á¤ÇϹǷνá Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ÀÌ Á¤º¸¸¦ Á¦°øÇÑ´Ù:
- TDI_RECEIVE_NORMAL
- Æ®·£½ºÆ÷Æ®´Â ¿ø°ÝÁö·ÎºÎÅÍ Á¤»óÀûÀÎ TSDU¸¦ ¸®½ÃºêÁßÀÌ´Ù.
- TDI_RECEIVE_EXPEDITED
- Æ®·£½ºÆ÷Æ®´Â ¿ø°ÝÁö·ÎºÎÅÍ ½Å¼ÓÇÑ TSDU¸¦ ¸®½ÃºêÁßÀÌ´Ù.
- TDI_RECEIVE_ENTIRE_MESSAGE
- ÀÌ Ç÷¡±×°¡ ¼³Á¤µÇ¸é Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇÑ ¼ö½Å¿¡ ´ëÇØ¼ »ç¿ëÇÒ ¼ö ÀÖ´Â Àüü TSDU¸¦ ÀÌ¹Ì °¡Áö°í ÀÖ´Ù. ÀÌ Ç÷¡±×°¡ ¼³Á¤µÉ ¶§ ClientEventReceive ÇÔ¼ö´Â ³»ºÎÀÇ ¹öÆÛ¾ÈÀ¸·Î Àüü ³Ý ÆÐŶÀ» º¹»çÇϰÔÇϰí ÇÊ¿äÇÑ Ã³¸®¸¦ ´ÙÀ½À¸·Î Áö¿¬ÇÏ¹Ç·Î½á ¸®½ÃºêµÈ µ¥ÀÌŸÀÇ Ã³¸®¾øÀÌ ÅëÁ¦¸¦ ¸®ÅÏÇÑ´Ù.
ÀÌ Ç÷¡±×°¡ Ŭ¸®¾î¸¦ À¯ÁöÇÑ´Ù¸é ±×°ÍÀº TSDUÀÇ Ã³À½ ºÎºÐ¸¸ÀÌ ÇöÀç Æ®·£½ºÆ÷Æ®¿¡°Ô »ç¿ë°¡´ÉÇÏ´Ù´Â °ÍÀ» ¾Ë¸®±â À§Çؼ (»ç¿ëµÇÁö ¾ÊÁö¸¸ ¸®°Å½Ã ÇÁ·ÎÅäÄÝ¿¡ ÀÇÇØ¼ ¼³Á¤µÇ´Â)TDI_RECEIVE_PARTIAL Ç÷¡±×¸¦ ¼³Á¤ÇÏ´Â °Í°ú °°´Ù.
- TDI_RECEIVE_COPY_LOOKAHEAD
- Æ®·£½ºÆ÷Æ®´Â ÇϺÎÀÇ NIC µå¶óÀ̹ö·ÎºÎÅÍ ÀεðÄÉÀ̼ÇÀ» À§Çؼ lookahead ¹öÆÛ¸¸À» ¸®½ÃºêÇß´Ù. ±×·¡¼ Æ®·£½ºÆ÷Æ®°¡ ÀÌ ¸Å°³º¯¼ö¸¦ °¡Áö°í ClientEventReceive(Expedited) ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ BytesIndicatedº¸´Ù ÀÛÀº ¹«¾ð°¡·Î BytesAvailableÀ» ¼³Á¤ÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®´Â ³»ºÎÀÇ ¹öÆÛ¾ÈÀ¸·Î BytesAvailableÀ» º¹»çÇØ¾ßÇϰí(TdiCopyLookaheadData ÇÔ¼ö¸¦ ºÁ¶ó) ±×ÈÄ¿¡ TSDU¾È¿¡ À¯ÁöÇÏ´Â µ¥ÀÌŸ¸¦ ¾ò±â À§Çؼ ÇϳªÀÌ»óÀÇ ¸®½Ãºê ¸®Äù½ºÆ®¸¦ Á¦ÃâÇÑ´Ù.
- TDI_RECEIVE_PEEK
- Æ®·£½ºÆ÷Æ®´Â ³»ºÎÀûÀ¸·Î ¸î¸î ¸®½Ãºê µ¥ÀÌŸ¸¦ ¹öÆÛÈÇßÁö¸¸¾ÆÁ÷ Àüü TSDU´Â ¾Æ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®´Â TDI_RECEIVE_COPY_LOOKAHEAD°¡ ¼³Á¤µÈ °ÍÀ¸·Î À¯»çÇÑ ¹æ¹ýÀ¸·Î ±×·¯ÇÑ ÀεðÄÉÀ̼ÇÀ» ó¸®ÇÑ´Ù.
- TDI_RECEIVE_TRUNCATED
- Æ®·£½ºÆ÷Æ®´Â ³¡ÀÌ À߸° TSDU¸¦ ¹Þ¾Ò´Ù.
- TDI_RECEIVE_FRAGMENT
- Æ®·£½ºÆ÷Æ®´Â ´ÜÆíÈµÈ TSDU¸¦ ¹Þ¾Ò´Ù.
- TDI_RECEIVE_AT_DISPATCH_LEVEL
- Æ®·£½ºÆ÷Æ®´Â IRQL DISPATCH_LEVEL¿¡¼ TSDU¸¦ ¸®½ÃºêÇß´Ù. ÀÌ Ç÷¡±×´Â Ŭ¶óÀÌ¾ðÆ®°¡ ¸®½Ãºê ÀεðÄÉÀ̼ǿ¡¼ ó¸®Áß¿¡ È£ÃâÇÒ ¼ö ÀÖ´Â Áö¿ø ·çƾÀÇ ÁýÇÕÀ» Á¦ÇÑÇÑ´Ù. ¿¹¸¦µé¾î Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ ¸®½Ãºê ÀεðÄÉÀ̼ÇÀÇ ÄÁÅØ½ºÆ®¿¡¼ IRQL PASSIVE_LEVEL¿¡¼¸¸ È£ÃâµÉ ¼ö ÀÖ´Â TdiBuildInternalDeviceControlIrp ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾Ê´Â´Ù.
Æ®·£½ºÆ÷Æ®°¡ TDI_RECEIVE_NORMALÀ» °¡Áö°í TDI_RECEIVE_ENTIRE_MESSAGE¸¦ OR ¿¬»êÇϰí ClientEventChainedReceive Çڵ鷯¸¦ È£ÃâÇÒ ¶§ Ŭ¶óÀÌ¾ðÆ®´Â ÀÔ·Â TsduDescriptor¸¦ °¡Áö°í TdiReturnChainedReceives ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§±îÁö ÇϺΠNICÀÇ ¸®½Ãºê ¹öÆÛ¾È¿¡ Àüü TSDU·ÎÀÇ Á÷Á¢ Àбâ Àü¿ë Á¢±ÙÀ» ¾ò´Â´Ù. ±×·¯ÇÑ ÀεðÄÉÀ̼ǿ¡ ´ëÇØ¼ Ŭ¶óÀÌ¾ðÆ®´Â TDI_RECEIVE ¸®Äù½ºÆ®¸¦ Á¦½ÃÇÒ Çʿ䰡 ¾ø´Ù. °á°úÀûÀ¸·Î ±×·¯ÇÑ Æ®·£½ºÆ÷Æ®´Â ÇϺÎÀÇ NDIS ¹Ì´ÏÆ÷Æ®¿¡¼ Á÷Á¢ Ŭ¶óÀÌ¾ðÆ®·Î ´ÙÀ½°ú °°Àº ClientEventChainedReceive ÇÔ¼ö·ÎÀÇ ÃÖ¼Ò °úºÎÇÏÀÇ ¸Å°³º¯¼ö ¼³Á¤¸¸À» °¡Áö°í ¸®½Ãºê ÀεðÄÉÀ̼ÇÀ» Àü´ÞÇÑ´Ù:
- Æ®·£½ºÆ÷Æ®´Â ClientEventChainedReceive ÇÔ¼ö·Î Àü´ÞµÈ TsduDescriptor·Î½á Æ®·£½ºÆ÷Æ® ½ºÅÃÀÇ ¹Ø¿¡¼ ProtocolReceivePacket ÇÔ¼ö·Î ÀԷµǴ NDIS_PACKET ŸÀÔ µð½ºÅ©¸³Å͸¦ »ç¿ëÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ ¸®½Ãºê ÀεðÄÉÀ̼ÇÀ» Àü´ÞÇÏ´Â °¢°¢ÀÇ Å¬¶óÀÌ¾ðÆ®¿¡ ´ëÇØ¼ Æ®·£½ºÆ÷Æ®´Â ProtocolReceivePacket ÇÔ¼ö¿¡ ÀÇÇØ¼ ¸®ÅÏµÈ °ªÀ» 1·Î ´Ã¸°´Ù.
- Æ®·£½ºÆ÷Æ®´Â NdisGetFirstBufferFromPacket ÇÔ¼ö¸¦ È£ÃâÇϹǷνá ÇϺÎÀÇ NDIS ¹Ì´ÏÆ÷Æ®¿¡ ÀÇÇØ¼ Á¦°øµÈ ÆÐŶ µð½ºÅ©¸³ÅͷκÎÅÍ ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ ¾ò´Â´Ù. Æ®·£½ºÆ÷Æ®´Â ClientEventChainedReceive ÇÔ¼ö¿¡ ´ëÇØ¼ Tsdu·Î½á ü¿ÞµÈ ÀÌ NDIS_BUFFER ŸÀÔ(MDL ŸÀÔ°ú °°´Ù.)¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù.
- ÇϺÎÀÇ NDIS ¹Ì´ÏÆ÷Æ®¿¡ ÀÇÇØ¼ ÀεðÄÉÀÌÆ®µÈ ¸®½Ãºê µ¥ÀÌŸÀÇ Àüü ¹üÀ§·ÎºÎÅÍ Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®¿¡°Ô °ü½ÉÀÖ´Â ¼ºê¹üÀ§¸¦ ¼±ÅÃÇÑ´Ù. µå¶óÀ̹ö´Â ClientEventChainedReceive ÇÔ¼ö¿¡ ´ëÇÑ StartingOffset°ú ReceiveLength·Î½á ÀÌ ¼ºê¹üÀ§¸¦ »ç¿ëÇÑ´Ù.
À¯»çÇÑ ¹æ¹ýÀ¸·Î ±×·¯ÇÑ TDI Æ®·£½ºÆ÷Æ®´Â TDI_RECEIVE_ENTIRE_MESSAGE°¡ ÀÔ·Â RequestFlags¿¡¼ TDI_RECEIVE_EXPEDITED¸¦ °¡Áö°í OR ¿¬»êµÉ ¶§ Àüü TSDU·ÎÀÇ Á÷Á¢Àбâ Àü¿ëÁ¢±ÙÀ» ClientEventChainedReceiveExpedited ÇÔ¼ö¿¡°Ô ÁØ´Ù.
ClientEventChainedReceive(Expedited) Çڵ鷯·Î ÀεðÄÉÀÌÆ®µÈ TSDU¿¡ ´ëÇØ¼ Ŭ¶óÀÌ¾ðÆ®´Â ¸®½Ãºê ÀεðÄÉÀ̼ǿ¡ ´ëÇÑ ¸ðµç ¹Ì´ÏÆ÷Æ® ÇÒ´ç ÀÚ¿øÀÇ ÅëÁ¦¸¦ Ŭ¶óÀÌ¾ðÆ®°¡ TsduDescriptor¸¦ °¡Áö°í TdiReturnChainedReceives ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§±îÁö À¯ÁöÇÑ´Ù. ÀεðÄÉÀ̼ÇÀ» ¹ÞÀº °¢°¢ÀÇ Å¬¶óÀÌ¾ðÆ®°¡ TdiReturnChainedReceives ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ NDIS ¶óÀ̺귯¸®´Â Æ®·£½ºÆ÷Æ® ½ºÅÃÀÇ ¹Ø¿¡¼ ProtocolReceivePacket ÇÔ¼ö¿¡ ÀÇÇØ¼ ¸®ÅÏµÈ °ªÀ¸·Î ¼³Á¤µÈ ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇØ¼ À¯ÁöÇÏ´Â Ä«¿îÅ͸¦ ÁÙÀδÙ. ÀεðÄÉÀ̼ÇÀ» ¹ÞÀº ¸ðµç Ŭ¶óÀÌ¾ðÆ®°¡ TdiReturnChainedReceives ÇÔ¼ö¸¦ È£ÃâÇßÀ» ¶§ NDIS´Â À̵é ÀÚ¿øÀ» ÇÒ´çÇÑ NDIS ¹Ì´ÏÆ÷Æ®·Î ±× ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ¼ ¼¼úµÈ ¸ðµç ÀÚ¿øÀÇ ÅëÁ¦¸¦ ¸®ÅÏÇÑ´Ù.
±×·¯ÇÑ Æ®·£½ºÆ÷Æ®°¡ ÇϺÎÀÇ NDIS ¹Ì´ÏÆ÷Æ®¿¡ ÀÇÇØ¼ ÇàÇØÁø Àüü ÆÐŶ ÀεðÄÉÀ̼ÇÀ» °¡Áö°í ProtocolReceive ÇÔ¼ö¸¦ È£ÃâÇßÀ» ¶§ TDI Æ®·£½ºÆ÷Æ®´Â ÀεðÄÉÀ̼ÇÀ» °¡Áö°í µî·ÏµÈ ClientEventChainedReceive³ª ClientEventChainedReceiveExpedited Çڵ鷯¸¦ È£ÃâÇÏÁö ¸»¾Æ¾ßÇÑ´Ù. ´ë½Å¿¡ TDI Æ®·£½ºÆ÷Æ®´Â Æ®·£½ºÆ÷Æ® ÇÒ´ç ¹öÆÛ¾ÈÀ¸·Î Ŭ¶óÀÌ¾ðÆ®¸¦ À§Çؼ ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌŸ¸¦ º¹»çÇØ¾ßÇÑ´Ù. ±×¸®°í ClientEventReceive(Expedited) Çڵ鷯¸¦ È£ÃâÇØ¾ßÇÑ´Ù. Æ®·£½ºÆ÷Æ® ½ºÅÃÀÇ ¹Ø¿¡¼ ProtocolReceive ÇÔ¼ö·ÎÀÇ NDIS È£ÃâÀº ÇϺÎÀÇ NIC ¹Ì´ÏÆ÷Æ®°¡ ÀεðÄÉÀÌÆ®µÇ´Â ¸®½Ãºê µ¥ÀÌŸ¸¦ º¹»çÇϰųª, ±×¸®°í ¹Ì´ÏÆ÷Æ®°¡ NICÀÇ ¸®½Ãºê ¹öÆÛ°ø°£¿¡¼ ª±â ¶§¹®¿¡ °¡´ÉÇÑ ÇÑ »¡¸® ÆÐŶ µð½ºÅ©¸³Å͸¦ ¸®ÅÏÇϵµ·Ï ¸ðµç »óÀ§ ·¹º§ ³×Æ®¿÷ µå¶óÀ̹ö¿¡°Ô ±â´ëÇÑ´Ù´Â °ÍÀ» ¾Ï½ÃÇÑ´Ù.
|