ClientEventReceiveExpedited

NTSTATUS
   ClientEventReceiveExpedited (
       IN PVOID TdiEventContext,
       IN CONNECTION_CONTEXT ConnectionContext,
       IN ULONG ReceiveFlags,
       IN ULONG BytesIndicated,
       IN ULONG BytesAvailable,
       OUT ULONG *BytesTaken,
       IN PVOID Tsdu,
       OUT PIRP *IoRequestPacket
  
   );

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

¸Å°³º¯¼ö

TdiEventContext
ClientEventReceiveExpedited ÇÔ¼ö°¡ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®¸¦ °¡Áö°í µî·ÏÇßÀ» ¶§ TdiBuildSetEventHandler ÇÔ¼ö¸¦ °¡Áö°í ¼³Á¤µÈ IRP¾È¿¡ Á¦°øµÈ È£ÃâÀÚ Á¦°ø ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù.

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

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

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

TDI_RECEIVE_ENTIRE_MESSAGE
Tsdu¿¡ ¹öÆÛ´Â Àüü TSDU¸¦ Æ÷ÇÔÇÑ´Ù. ClientEventReceiveExpedited ÇÔ¼ö´Â TSDU¸¦ ¹Þ¾ÆµéÀÎ´Ù¸é ³»ºÎÀÇ ¹öÆÛ¾ÈÀ¸·Î ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌŸ¸¦ º¹»çÇÑ ÈÄ¿¡ °¡´ÉÇÑ ÇÑ »¡¸® ÅëÁ¦¸¦ ¸®ÅÏÇØ¾ßÇÑ´Ù.

ÀÌ Ç÷¡±×°¡ Ŭ¸®¾îµÈ´Ù¸é(ȤÀº TDI_RECEIVE_PARTIALÀÌ ¸®°Å½Ã ÇÁ·ÎÅäÄÝ¿¡ ÀÇÇØ¼­ ¼³Á¤µÈ´Ù¸é) ClientEventReceiveExpedited ÇÔ¼ö´Â TSDU°¡ ¾ó¸¶³ª ¸¹ÀÌ Á¦°øµÆ´ÂÁö¸¦ °áÁ¤Çϱâ À§Çؼ­ BytesIndicated¿Í BytesAvailable ¸Å°³º¯¼ö¸¦ °Ë»çÇØ¾ßÇÑ´Ù. ¸®°Å½Ã Æ®·£½ºÆ÷Æ®°¡ °è¼Ó TDI_RECEIVE_PARTIAL Ç÷¡±×·Î ¼³Á¤µÇ¾î ÀÖ´Ù°í ÇÏ´õ¶óµµ »õ·Î¿î Æ®·£½ºÆ÷Æ®´Â ±×µéÀÇ Å¬¶óÀÌ¾ðÆ®·Î ºÎºÐÀûÀÎ TSDU¸¦ ÀεðÄÉÀÌÆ®Çϱâ À§Çؼ­ TDI_RECEIVE_ENTIRE_MESSAGE Ç÷¡±×¸¦ Ŭ¸®¾îÇÑ Ã¤·Î ³²°ÜµÐ´Ù.

TDI_RECEIVE_COPY_LOOKAHEAD
TDI_RECEIVE_ENTIRE_MESSAGE°¡ ¼³Á¤µÇÁö ¾Ê´Â´Ù¸é BytesIndicated´Â BytesAvailable º¸´Ù´Â ÀÛÀº °ªÀÌ µÇ°í ClientEventReceiveExpedited ÇÔ¼ö´Â ³»ºÎÀÇ ¹öÆÛ¾ÈÀ¸·Î ÀεðÄÉÀÌÆ®µÈ ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ º¹»çÇϰí BytesTaken¿¡ º¯¼ö¸¦ ¼³Á¤Çؼ­ ÅëÁ¦¸¦ ¸®ÅÏÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®´Â TSDUÀÇ ³ª¸ÓÁö¸¦ ¾ò±â À§Çؼ­ ÇϳªÀÌ»óÀÇ TDI_RECEIVE ¸®Äù½ºÆ®¸¦ ¼øÂ÷ÀûÀ¸·Î Á¦ÃâÇϰųª ClientEventReceiveExpedited ÇÔ¼ö°¡ TSDUÀÇ ³ª¸ÓÁö¸¦ º¹»çÇϱâ À§Çؼ­ ´Ù½Ã È£ÃâµÉ ¼ö ÀÖ´Ù.

TDI_RECEIVE_FRAGMENT
Tsdu¿¡ ¹öÆÛ´Â ´ÜÆíÈ­µÈ TSDU¸¦ Æ÷ÇÔÇÑ´Ù.

TDI_RECEIVE_PEEK
Æ®·£½ºÆ÷Æ®´Â ³»ºÎÀûÀ¸·Î ¸î¸î ¸®½Ãºê µ¥ÀÌŸ¸¦ ¹öÆÛÈ­ÇÏÁö¸¸ ¾ÆÁ÷Àº Àüü TSDU¸¦ ¹öÆÛÈ­ÇÑ °ÍÀº ¾Æ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®´Â TSDU¿¡ ´ëÇØ¼­ TDI_RECEIVE ¸®Äù½ºÆ®¸¦ Á¦½ÃÇß´ÂÁö¸¦ °áÁ¤Çϱâ À§Çؼ­ Tsdu¿¡ ¹öÆÛ¸¦ °Ë»çÇÑ´Ù.

BytesIndicated
Tsdu¿¡ ¹öÆÛ¾È¿¡ ½Å¼ÓÇÑ µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼­¼úÇÑ´Ù. ÀÌ ¸Å°³º¯¼ö´Â BytesAvailableÀÇ °ªº¸´Ù Ç×»ó À۰ųª °°´Ù. ¸®½ÃºêµÈ ¸Þ¼¼Áö ȤÀº ½ºÆ®¸² ¼¼±×¸ÕÆ®ÀÇ ±æÀ̰¡ 128 ¹ÙÀÌÆ® º¸´Ù ÀÛÁö ¾Ê´Ù¸é TDI Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®·ÎÀÇ ¸®½Ãºê ÀεðÄÉÀ̼ǿ¡¼­ Àû¾îµµ µ¥ÀÌŸÀÇ 128 ¹ÙÀÌÆ®¸¦ Á¦°øÇÑ´Ù. BytesAvailableÀÌ BytesIndicated º¸´Ùµµ Å©´Ù¸é Æ®·£½ºÆ÷Æ®´Â ClientEventReceiveExpedited ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ »ç¿ëÇÏÁö ¾Ê´Â µ¥ÀÌŸ¸¦ ¹Þ´Â´Ù.

BytesAvailable
¸®½ÃºêµÈ TSDU¾È¿¡ Àüü ¹ÙÀÌÆ® ¼ö¸¦ ¼­¼úÇÑ´Ù.

BytesTaken
TSDU·ÎºÎÅÍ º¹»çµÇ´Â µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¸®ÅÏÇÏ´Â ClientEventReceiveExpedited ÇÔ¼öÀÇ È£ÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù.

Tsdu
¸®½ÃºêµÈ TSDU µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ °¡¸®Å²´Ù.

IoRequestPacket
TdiBuildReceive ÇÔ¼ö¸¦ °¡Áö°í ¼³Á¤µÈ IRP¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÏ´Â ClientEventReceiveExpedited ÇÔ¼öÀÇ º¯¼ö¸¦ °¡¸®Å²´Ù. ÀÌ ¸Å°³º¯¼ö°¡ NULLÀ̸é Ŭ¶óÀÌ¾ðÆ®´Â TSDUÀÇ ³ª¸ÓÁö¿¡ ´ëÇØ¼­ ¸®½Ãºê ¸®Äù½ºÆ®¸¦ ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.

¸®Åϰª

ClientEventReceiveExpedited ÇÔ¼ö´Â ´ÙÀ½Áß Çϳª¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù:

STATUS_SUCCESS
Ŭ¶óÀÌ¾ðÆ®°¡ ÁÖ¾îÁø TSDU¿¡¼­ ¸ðµç µ¥ÀÌŸ¸¦ º¹»çÇßÀ½À» ÀεðÄÉÀÌÆ®ÇÑ´Ù.

STATUS_MORE_PROCESSING_REQUIRED
³»ºÎÀÇ ¹öÆÛ¾ÈÀ¸·Î BytesIndicated¸¦ º¹»çÇÑ ÈÄ¿¡ TSDUÀÇ ³ª¸ÓÁö¸¦ ¸®Äù½ºÆ®ÇÏ´Â IRP¸¦ Ŭ¶óÀÌ¾ðÆ®°¡ Á¦°øÇßÀ½À» ÀεðÄÉÀÌÆ®ÇÑ´Ù.

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

ÁÖ¼®

ClientEventReceiveExpedited ÇÔ¼ö´Â ¼º¸³µÈ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°á¿¡¼­ TDI µå¶óÀ̹ö°¡ ¸®½ÃºêÇÑ ½Å¼ÓÇÑ TSDU¸¦ ¹Þ¾ÆµéÀ̰ųª °ÅÀýÇÑ´Ù. ÀÌ Çڵ鷯´Â ½Å¼ÓÇÑ µ¥ÀÌŸÀÇ È帧ÀÌ Á¤»óÀûÀÎ µ¥ÀÌŸÀÇ È帧À» ´ë½ÅÇÏ´Â °ÍÀ» Á¦¿ÜÇϰí´Â ClientEventReceive ÇÔ¼ö¿Í °ÅÀÇ ºñ½ÁÇÏ´Ù.

°á±¹ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â Á¤»óÀûÀÎ ¸®½Ãºê ¿¬»êÀ̳ª ClientEventReceive(ȤÀº ClientEventChainedReceive)ÇÔ¼ö·ÎÀÇ ÀεðÄÉÀ̼ÇÀÌ ÁøÇàÁßÀÎ µ¿¾È¿¡ ¿¬°á»ó¿¡¼­ ClientEventReceiveExpedited ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. À̰ÍÀÌ ¹ß»ýÇÑ´Ù¸é Á¤»óÀûÀÎ µ¥ÀÌŸÀÇ È帧Àº ClientEventReceiveExpedited ÇÔ¼ö°¡ ¸®Åϵǰí Ŭ¶óÀÌ¾ðÆ®°¡ TSDU¿¡ ´ëÇØ¼­ ½Å¼ÓÇÑ ¸ðµç µ¥ÀÌŸ¸¦ ¹ÞÀ» ¶§±îÁö ´Ù½Ã ½ÃÀÛÇÏÁö ¾Ê´Â´Ù. ClientEventReceiveExpedited ÇÔ¼ö°¡ IoRequestPacket¿¡ TDI_RECEIVE ¸®Äù½ºÆ®¸¦ Á¦°øÇÑ´Ù¸é ÀÌ ¸®Äù½ºÆ®´Â ¶ÇÇÑ ½Å¼ÓÇÏÁö ¾ÊÀº µ¥ÀÌŸ¿¡ ´ëÇØ¼­ Ŭ¶óÀÌ¾ðÆ® Á¦½Ã ¸®Äù½ºÆ®º¸´Ù ³ôÀº ¿ì¼±±ÇÀ» °¡Áø´Ù.

ClientEventReceiveExpedited ÇÔ¼ö°¡ È£ÃâµÉ ¶§ ´ÙÀ½Áß Çϳª¸¦ ÇÒ ¼ö ÀÖ´Ù:

  • STATUS_DATA_NOT_ACCEPTED¸¦ ¸®ÅÏÇÏ¹Ç·Î½á µ¥ÀÌŸ¿¡ ´ëÇÑ »ç¿ëÀ» ÇÒ ¼ö ¾ø´Ù¸é ÀεðÄÉÀÌÆ®µÈ TSDU¸¦ °ÅÀýÇÑ´Ù.
  • TDI_RECEIVE_ENTIRE_MESSAGE°¡ ReceiveFlags¿¡ ¼³Á¤µÇ¼­ STATUS_SUCCESS¸¦ ¸®ÅÏÇÑ´Ù¸é ³»ºÎÀÇ ¹öÆÛ¾ÈÀ¸·Î ¸ðµç µ¥ÀÌŸ¸¦ º¹»çÇÑ´Ù.
  • TDI_RECEIVE_ENTIRE_MESSAGE°¡ Ŭ¸®¾îÀ̸é(ȤÀº TDI_RECEIVE_PARTIALÀÌ ¼³Á¤µÈ´Ù¸é) ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌŸÀÇ ÀϺΠȤÀº Àüü¸¦ º¹»çÇÏ°í ¼öÇàµÇ´Â ¿¬»ê¿¡ ÀÇÁ¸ÇÏ¿© ´ÙÀ½Áß Çϳª¸¦ ¸®ÅÏÇÑ´Ù:

    Ŭ¶óÀÌ¾ðÆ®°¡ À¯ÁöÇÏ´Â TSDU µ¥ÀÌŸ¸¦ ¾ò±â À§Çؼ­ IoRequestPacket¿¡ TDI_RECEIVE ¸®Äù½ºÆ®¸¦ Á¦°øÇÑ´Ù¸é STATUS_MORE_PROCESSING_REQUIRED¸¦ ¸®ÅÏÇÑ´Ù.

    Æ®·£½ºÆ÷Æ®°¡ À¯ÁöÇÏ´Â TSDU µ¥ÀÌŸ¸¦ °¡Áö°í ´Ù½Ã ClientEventReceiveExpedited ÇÔ¼ö¸¦ È£ÃâÇϰíÀÚ ÇÑ´Ù¸é STATUS_SUCCESS¸¦ ¸®ÅÏÇÑ´Ù.

Æ®·£½ºÆ÷Æ®°¡ ¸®½Ãºê µ¥ÀÌŸÀÇ º¹»ç¸¦ ¸¶ÃÆÀ» ¶§ ClientEventReceiveExpedited ÇÔ¼ö´Â ÅëÁ¦¸¦ ¸®ÅÏÇϱâ Àü¿¡ ¹Þ¾ÆµéÀÎ µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö¸¦ BytesTaken¿¡ º¯¼ö·Î ¼³Á¤ÇÑ´Ù.

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