ClientEventChainedReceiveExpedited

NTSTATUS
   ClientEventChainedReceiveExpedited(
       IN PVOID TdiEventContext,
       IN CONNECTION_CONTEXT ConnectionContext,
       IN ULONG ReceiveFlags,
       IN ULONG ReceiveLength,
       IN ULONG StartingOffset,
       IN PMDL Tsdu,
       IN PVOID TsduDescriptor
       );

ClientEventChainedReceiveExpedited ÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ®°¡ ¼º¸³µÈ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀ» °¡Áö°í ¿ø°ÝÁö·ÎºÎÅÍ µé¾î¿À´Â ½Å¼ÓÇÑ ¸®½Ãºê¿¡ ´ëÇÑ ÀÀ´äÀ¸·Î ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ®°¡ È£ÃâÇÏ´Â À̺¥Æ® Çڵ鷯ÀÌ´Ù.

Ŭ¶óÀÌ¾ðÆ®°¡ NDIS ¹Ì´ÏÆ÷Æ®¿¡ ÀÇÇØ¼­ Æ®·£½ºÆ÷Æ®·Î ÀεðÄÉÀÌÆ®µÈ Àüü TSDU¸¦ Àü´ÞÇϰí Ŭ¶óÀÌ¾ðÆ®°¡ µ¥ÀÌŸ¸¦ ¼­ºñÇÒ ¶§±îÁö ¹öÆÛÈ­µÈ TSDU·ÎÀÇ Á÷Á¢ Àбâ Àü¿ëÁ¢±ÙÀ» ¾òÀ» ¼ö ÀÖÀ» ¶§ Æ®·£½ºÆ÷Æ®´Â ClientEventReceiveExpedited ÇÔ¼öº¸´Ù´Â ÀÌ Çڵ鷯¸¦ È£ÃâÇÑ´Ù.

¸Å°³º¯¼ö

TdiEventContext
ClientEventChainedReceiveExpedited ÇÔ¼ö¸¦ µî·ÏÇϱâ À§Çؼ­ Ŭ¶óÀÌ¾ðÆ®°¡ TdiBuildSetEventHandler ÇÔ¼ö¸¦ °¡Áö°í Àü¿¡ ¼³Á¤ÇÑ IRP¾È¿¡ Á¦°øÇÑ ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù.

ConnectionContext
ÀÌ ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ À§ÇÑ Å¬¶óÀ̾ðÆ®ÀÇ ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù. ClientEventConnect Çڵ鷯°¡ ¿ø°ÝÁö·ÎºÎÅÍ ¿¬°áÁ¦°øÀ» ½ÂÀÎÇϰí ZwCreateFile ÇÔ¼ö¸¦ °¡Áö°í ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ¿­¾úÀ» ´ë Ŭ¶óÀÌ¾ðÆ®´Â Àü¿¡ ÀÌ °ªÀ» ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®·Î Á¦°øÇß´Ù.

ReceiveFlags
´ÙÀ½ Ç÷¡±×µéÀÇ OR ¿¬»êÀ¸·Î½á ¸®½Ãºê ÀεðÄÉÀ̼ÇÀÇ Æ¯Â¡À» ¼­¼úÇÑ´Ù:

TDI_RECEIVE_EXPEDITED
Tsdu¿¡ ¸ÊµÈ ¹öÆÛ´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿ø°ÝÁö·ÎºÎÅÍ ¸®½ÃºêµÈ ½Å¼ÓÇÑ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÑ´Ù. ClientEventChainedReceiveExpedited ÇÔ¼ö°¡ È£ÃâµÉ ¶§ ÀÌ Ç÷¡±×´Â Ç×»ó ¼³Á¤µÈ´Ù.

TDI_RECEIVE_ENTIRE_MESSAGE
Tsdu¿¡ ¸ÊµÈ ¹öÆÛ´Â Àüü TSDU¸¦ Æ÷ÇÔÇϰí Ŭ¶óÀÌ¾ðÆ®´Â ClientEventChainedReceiveExpedited ÇÔ¼ö°¡ STATUS_PENDINGÀ» ¸®ÅÏÇÒ ¶§ ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌŸ¸¦ ¼ÒºñÇÒ ¶§±îÁö ÀÌ ¹öÆÛ·ÎÀÇ Àбâ Àü¿ëÁ¢±ÙÀ» À¯ÁöÇÑ´Ù.

ReceiveLength
Tsdu¿¡ ¸ÊµÈ ¹öÆÛ¾È¿¡ Ŭ¶óÀÌ¾ðÆ® µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼­¼úÇÑ´Ù.

StartingOffset
Tsdu¿¡ ¸ÊµÈ ¹öÆÛ¾È¿¡¼­ Ŭ¶óÀÌ¾ðÆ® µ¥ÀÌŸ°¡ ½ÃÀÛÇÏ´Â ¹ÙÀÌÆ® ¿É¼ÂÀ» ¼­¼úÇÑ´Ù.

Tsdu
¸®½ÃºêµÈ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ ¸ÅÇÎÇϴ üÀÎÈ­µÈ MDLÀÇ Ã³À½ MDLÀ» °¡¸®Å²´Ù.

TsduDescriptor
¸®½ÃºêµÈ TSDU¿¡ ´ëÇÑ µð½ºÅ©¸³Å͸¦ °¡¸®Å²´Ù. ClientEventChainedReceiveExpedited ÇÔ¼ö°¡ ÀÌ ¸®½Ãºê ÀεðÄÉÀ̼ǿ¡ ´ëÇØ¼­ STATUS_PENDINGÀ» ¸®ÅÏÇÑ´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â ¼øÂ÷ÀûÀ¸·Î ÀÌ Æ÷ÀÎÅ͸¦ °¡Áö°í TdiReturnChainedReceives ÇÔ¼ö¸¦ È£ÃâÇØ¾ßÇÑ´Ù. ÀÌ Æ÷ÀÎÅÍ´Â ClientEventChainedReceiveExpedited ÇÔ¼ö°¡ STATUS_PENDINGÀ» ¸®ÅÏÇÑ´Ù¸é TdiReturnChainedReceives ÇÔ¼ö¿¡ ´ëÇÑ ¸Å°³º¯¼ö·Î½á¸¸ÀÌ Å¬¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ¼­ »ç¿ëµÇ´Â ºÒÅõ¸íÇÑ º¯¼ö¿¡ ´ëÇÑ ÇÚµé·Î½á Ãë±ÞµÇ¾î¾ßÇÑ´Ù.

¸®Åϰª

ClientEventChainedReceiveExpedited ÇÔ¼ö´Â ´ÙÀ½Áß Çϳª¸¦ ¸®ÅÏÇÑ´Ù:

STATUS_SUCCESS
Ŭ¶óÀÌ¾ðÆ®°¡ ÁÖ¾îÁø TSDU¾È¿¡ ¸ðµç µ¥ÀÌŸ¸¦ ¼ÒºñÇß°í Áï½Ã ¹öÆÛÀÇ ¼ÒÀ¯±ÇÀ» ¸®ÅÏÇÏ´Â ÁßÀ̶ó°í ÀεðÄÉÀÌÆ®ÇÑ´Ù.

STATUS_PENDING
Ŭ¶óÀÌ¾ðÆ®°¡ ÁÖ¾îÁø TsduDescriptor¸¦ °¡Áö°í TdiReturnChainedReceives ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§±îÁö ÁÖ¾îÁø TSDU¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛÀÇ ¼ÒÀ¯±ÇÀ» À¯ÁöÇϰí ÀÖ´Ù°í ÀεðÄÉÀÌÆ®ÇÑ´Ù.

STATUS_DATA_NOT_ACCEPTED
Ŭ¶óÀÌ¾ðÆ®°¡ TSDU¿Í ¹«°üÇÏ´Ù°í ÀεðÄÉÀÌÆ®ÇÑ´Ù.

ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ ³»ºÎÀûÀ¸·Î ¸®½ÃºêµéÀ» ¹öÆÛÈ­ÇÒ ¶§ Æ®·£½ºÆ÷Æ®°¡ ClientEventChainedReceive(Xxx) Çڵ鷯·Î ÀεðÄÉÀÌÆ®µÈ ¹öÆÛÈ­µÈ µ¥ÀÌŸ¸¦ ¹ö¸®Áö ¾Ê´Â´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â TDI_RECEIVE ¸®Äù½ºÆ®¸¦ °¡Áö°í µ¥ÀÌŸ¸¦ ¾ò´Â´Ù.

ÁÖ¼®

ClientEventChainedReceiveExpedited ÇÔ¼ö·ÎÀÇ È£ÃâÀº ÀÔ·Â StartingOffset°ú ReceiveLength¿¡ ÀÇÇØ¼­ ¼­¼úµÈ ¹öÆÛ¾È¿¡ ¹üÀ§¿¡ ´ëÇØ¼­ ÀεðÄÉÀÌÆ®µÈ TSDU·ÎÀÇ ÀбâÀü¿ëÁ¢±ÙÀ» Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ÁØ´Ù. ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌŸ°¡ Ŭ¶óÀÌ¾ðÆ®¿Í °ü°è°¡ ÀÖ´Ù¸é ClientEventChainedReceiveExpedited ÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ® ÇÒ´ç ³»ºÎ ¹öÆÛ¾ÈÀ¸·Î ÀεðÄÉÀÌÆ®µÈ TSDU µ¥ÀÌŸÀÇ ¹üÀ§¸¦ º¹»çÇϰí Áï½Ã STATUS_SUCCESS¸¦ ¸®ÅÏÇϰųª STATUS_PENDINGÀ» ¸®ÅÏÇÏ¹Ç·Î½á ¹öÆÛÀÇ ÅëÁ¦¸¦ À¯ÁöÇÑ´Ù. STATUS_PENDINGÀ» ¸®ÅÏÇÑ´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â µ¥ÀÌŸ¸¦ ¼ÒºñÇÑ ÈÄ¿¡ ¹öÆÛÀÇ ÅëÁ¦¸¦ ¾çµµÇϱâ À§Çؼ­ ÀÔ·Â TsduDescriptor¸¦ °¡Áö°í ¼øÂ÷ÀûÀ¸·Î TdiReturnChainedReceives ÇÔ¼ö¸¦ È£ÃâÇØ¾ßÇÑ´Ù.

ÀϹÝÀûÀ¸·Î TdiReturnChainedReceives ÇÔ¼ö·ÎÀÇ ±×·¯ÇÑ È£ÃâÀº °¡´ÉÇÑ ÇÑ »¡¸® ¹ß»ýµÇ¾î¾ßÇÑ´Ù. ¿¬ÀåµÈ ±â°£µ¿¾È ClientEventChainedReceiveExpedited ÇÔ¼ú·Î Àü´ÞµÇ´Â ¹öÆÛ¸¦ À¯Áö´Â °ÍÀº ÇϺÎÀÇ µå¶óÀ̹ö¿¡¼­ I/O È¿À²À» °­¿äÇÑ´Ù. ¿Ö³ÄÇÏ¸é ¹öÆÛ¸¦ ÇÒ´çÇÑ NDIS ¹Ì´ÏÆ÷Æ®´Â TdiReturnChainedReceives ÇÔ¼ö°¡ È£ÃâµÉ ¶§±îÁö ¼øÂ÷ÀûÀÎ ¸®½Ãºê ÀεðÄÉÀ̼ÇÀ» °¡Áö°í ÀÌ ÀÚ¿øÀ» ´Ù½Ã »ç¿ëÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.

ClientEventChainedReceiveExpedited ÇÔ¼ö·ÎÀÇ È£ÃâÀÌ Ç×»ó Àüü TSDUÀÇ »ç¿ëÀ» ÀεðÄÉÀÌÆ®Çϱ⠶§¹®¿¡ Ŭ¶óÀÌ¾ðÆ®´Â ´ëÀÀÇÏ´Â ClientEventReceiveExpedited Çڵ鷯°¡ °¡²û Àüü TSDU¸¦ ¾ò¾î¾ßÇÒ ¶§ ±×·¯ÇÑ ÀεðÄÉÀ̼ǿ¡ ´ëÇØ¼­ TDI_RECEIVE ¸®Äù½ºÆ®¸¦ °áÄÚ ¼³Á¤Çؼ­´Â ¾ÈµÈ´Ù. °á±¹ ClientEventChainedReceiveExpedited ÇÔ¼ö·Î ¸¸µé¾îÁø ¸®½Ãºê ÀεðÄÉÀ̼ÇÀº Ŭ¶óÀ̾ðÆ®, ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®, ½Ã½ºÅÛ Àüü¿¡ ´ëÇØ¼­ È£ÃâÀÇ °úºÎÇϸ¦ ÁÙÀÓÀ¸·Î½á ³×Æ®¿÷ I/O È¿À²°ú ÆÛÆ÷¸Õ½º¸¦ Áõ°¡½ÃŲ´Ù. Æ®·£½ºÆ÷Æ®´Â ClientEventChainedReceiveExpedited ÇÔ¼ö·Î ¸¸µç °°Àº ÀεðÄÉÀ̼ÇÀ» °¡Áö°í ´ëÀÀÇÏ´Â ClientEventReceiveExpedited Çڵ鷯¸¦ °áÄÚ È£ÃâÇØ¼­´Â ¾ÈµÈ´Ù.

ClientEventChainedReceiveExpedited ÇÔ¼ö°¡ STATUS_SUCCESS³ª STATUS_DATA_NOT_ACCEPTED¸¦ °¡Áö°í ÅëÁ¦¸¦ ¸®ÅÏÇÒ ¶§ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ ¸®½Ãºê ÀεðÄÉÀ̼ÇÀ» °¡Áö°í ÇàÇØÁ³´Ù°í °¡Á¤ÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ STATUS_PENDINGÀ» ¸®ÅÏÇÑ´Ù¸é Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®°¡ ÀεðÄÉÀÌÆ®µÈ TSDU¸¦ ¼ÒºñÇßÀ» ¶§ TdiReturnChainedReceives ÇÔ¼ö È£ÃâÀÇ Ã¥ÀÓÀÌ Àֱ⠶§¹®¿¡ ÀÌ ¸®½Ãºê ÀεðÄÉÀ̼ÇÀÇ ¿Ï·á¸¦ Æ®·¢ÇÒ ¹æ¹ýÀÌ ¾ø´Ù°í °¡Á¤ÇÑ´Ù.

ClientEventChainedReceiveExpedited ÇÔ¼ö´Â IRQL DISPATCH_LEVEL¿¡¼­ ¿¬»êÀ» ¼öÇàÇÒ ´É·ÂÀÌ ÀÖ¾î¾ßÇÑ´Ù.