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¿¡¼ ¿¬»êÀ» ¼öÇàÇÒ ´É·ÂÀÌ ÀÖ¾î¾ßÇÑ´Ù.
|