ClientEventReceiveDatagram

NTSTATUS
   ClientEventReceiveDatagram (
       IN PVOID TdiEventContext,
       IN LONG SourceAddressLength,
       IN PVOID SourceAddress,
       IN LONG OptionsLength,
       IN PVOID Options,
       IN ULONG ReceiveDatagramFlags,
       IN ULONG BytesIndicated,
       IN ULONG BytesAvailable,
       OUT ULONG *BytesTaken,
       IN PVOID Tsdu,
       OUT PIRP *IoRequestPacket
  
   );

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

¸Å°³º¯¼ö

TdiEventContext
ClientEventReceiveDatagram ÇÔ¼ö°¡ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®¸¦ °¡Áö°í µî·ÏµÉ ¶§ TdiBuildSetEventHandler ÇÔ¼ö¸¦ °¡Áö°í ¼³Á¤µÈ IRP¾È¿¡ Á¦°øµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù.

SourceAddressLength
SourceAddress¿¡ ¹öÆÛÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼­¼úÇÑ´Ù.

SourceAddress
º¸³»Áö´Â µ¥ÀÌŸ±×·¥À¸·ÎºÎÅÍ ¿ø°ÝÁöÀÇ Æ®·£½ºÆ÷Æ® ÁÖ¼Ò¸¦ ¼­¼úÇÏ´Â ¹öÆÛ¸¦ °¡¸®Å²´Ù.

OptionsLength
Options¿¡ ¹öÆÛÀÇ ¹ÙÀÌÆ® »çÀÌÁ ¼­¼úÇÑ´Ù. 0Àº ¿É¼Ç ¹®ÀÚ¿­À» »ç¿ëÇÒ ¼ö ¾øÀ½À» ÀǹÌÇÑ´Ù. ÀÌ ¸Å°³º¯¼ö°¡ 0À̸é Options´Â NULLÀÌ´Ù.

Options
µ¥ÀÌŸ±×·¥À» °¡Áö°í º¸³»Áø Æ®·£½ºÆ÷Æ® ƯÁ¤ ¿É¼ÇÀÇ ¹®ÀÚ¿­À» ¼­¼úÇÏ´Â ¹öÆÛ¸¦ °¡¸®Å²´Ù. OptionsLength°¡ 0À̸é ÀÌ Æ÷ÀÎÅÍ´Â NULLÀÌ´Ù.

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

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

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

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

TDI_RECEIVE_BROADCAST
¸®½Ãºê´Â ºê·Îµåij½ºÆ®ÀÌ´Ù.

TDI_RECEIVE_MULTICAST
¸®½Ãºê´Â ¸ÖƼij½ºÆ®ÀÌ´Ù.

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

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

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

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

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

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

¸®Åϰª

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

STATUS_SUCCESS
Ŭ¶óÀÌ¾ðÆ®°¡ ÁÖ¾îÁø TSDU¾È¿¡ ¸ðµç µ¥ÀÌŸ¸¦ º¹»çÇß°í BytesTaken¿¡ º¯¼ö¸¦ BytesIndicated¿¡ °ªÀ¸·Î ¼³Á¤ÇßÀ½À» ÀεðÄÉÀÌÆ®ÇÑ´Ù.

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

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

ÁÖ¼®

µ¥ÀÌŸ±×·¥ÀÌ ¿ø°ÝÁö·ÎºÎÅÍ µµÂøÇßÀ» ¶§ Æ®·£½ºÆ÷Æ®´Â µ¥ÀÌŸ±×·¥ÀÇ ¸ñÀûÁö ÁÖ¼Ò¿Í ÀÏÄ¡ÇÏ´Â ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ¿­¸° ÆÄÀÏ °´Ã¼¸¦ °¡Áö°í °¢°¢ÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ À§Çؼ­ µî·ÏµÈ ClientEvent(Chained)ReceiveDatagram Çڵ鷯¸¦ È£ÃâÇÑ´Ù. µ¥ÀÌŸ±×·¥ÀÌ ¼º¸³µÈ ¿¬°á°ú ¹«°üÇϱ⠶§¹®¿¡ TDI µå¶óÀ̹ö´Â µ¥ÀÌŸ±×·¥À» µû¶ó¼­ ¸®½ÃºêÇϴ Ŭ¶óÀÌ¾ðÆ®·Î SourceAddress¿¡ ¿ø°ÝÁö Àü¼ÛÀÚÀÇ Æ®·£½ºÆ÷Æ® ÁÖ¼Ò¸¦ Àü´ÞÇÑ´Ù.

ClientEventReceiveDatagram ÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ®°¡ ZwCreateFile ÇÔ¼ö¸¦ °¡Áö°í ¾Õ¼± È£Ãâ¿¡¼­ ¿­¾ú´ø ƯÁ¤ Æ®·£½ºÆ÷Æ® ÁÖ¼Ò»ó¿¡¼­ TDI µå¶óÀ̹ö°¡ ¸®½ÃºêÇÑ TSDU¸¦ ¹Þ¾ÆµéÀ̰ųª °ÅÀýÇÑ´Ù. µ¥ÀÌŸ±×·¥ TSDU´Â ºÒ¿¬¼ÓÀûÀÌ´Ù. Á¤»óÀûÀ̰ųª ½Å¼ÓÇÑ TSDU¿Í´Â ´Þ¸® ±×°ÍÀº ¼øÂ÷ÀûÀÎ ·¹ÄÚµå·Î½á Àü¼ÛµÉ ¼ö ¾ø´Ù. ´Ù½Ã¸»Çϸé Àüü µ¥ÀÌŸ±×·¥Àº µå¶óÀ̹ö°¡ ClientEventReceiveDatagram ÇÔ¼ö·Î ÇѹøÀÇ È£Ãâ¿¡¼­ Àüü TSDU¸¦ Àü´ÞÇÏÁö ¾Ê¾ÒÀ½¿¡µµ ºÒ±¸Çϰí TDI Æ®·£½ºÆ÷Æ®¿¡¼­ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.

Æ®·£½ºÆ÷Æ®°¡ ClientEventReceiveDatagram ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ Æ®·£½ºÆ÷Æ®´Â TSDU·ÎºÎÅÍ Æ²³»½ºÆ÷Æ® Ãþ Çì´õ¸¦ Á¦°ÅÇß´Ù.

Ŭ¶óÀÌ¾ðÆ®°¡ µé¾î¿À´Â µ¥ÀÌŸ±×·¥ÀÇ Å¸°ÙÀÎ ·ÎÄà Ʈ·£½ºÆ÷Æ®»ó¿¡¼­ µÎµå·¯Áø ¸®½Ãºê ȤÀº ¸®½Ãºê µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®¸¦ °¡Áø´Ù¸é µå¶óÀ̹ö´Â ClientEventReceiveDatagram ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾Ê´Â´Ù.

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

  • STATUS_DATA_NOT_ACCEPTED¸¦ ¸®ÅÏÇÏ¹Ç·Î½á µ¥ÀÌŸ¿¡ ´ëÇÑ »ç¿ëÀ» ÇÒ ¼ö ¾ø´Ù¸é ÀεðÄÉÀÌÆ®µÈ TSDU¸¦ °ÅÀýÇÑ´Ù.
  • TDI_RECEIVE_ENTIRE_MESSAGE°¡ ReceiveFlags¿¡ ¼³Á¤µÈ´Ù¸é ³»ºÎÀÇ ¹öÆÛ¾ÈÀ¸·Î ¸ðµç µ¥ÀÌŸ¸¦ º¹»çÇϰí STATUS_SUCCESS¸¦ ¸®ÅÏÇÑ´Ù.

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

  • TDI_RECEIVE_ENTIRE_MESSAGE°¡ Ŭ¸®¾îµÈ´Ù¸é(ȤÀº TDI_RECEIVE_PARTIALÀÌ ¼³Á¤µÈ´Ù¸é) ¸ðµç ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌŸ¸¦ º¹»çÇϰí TDI_RECEIVE_DATAGRAM ¸®Äù½ºÆ®¿¡ ´ëÇÑ IRP¸¦ ¼³Á¤Çؼ­ STATUS_MORE_PROCESSING_REQUIRED¸¦ ¸®ÅÏÇÑ´Ù.

    ClientEventReceiveDatagram ÇÔ¼ö°¡ ¸®½Ãºê µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®¸¦ Á¦½ÃÇÑ´Ù¸é Æ®·£½ºÆ÷Æ®´Â TDI Æ®·£½ºÆ÷Æ®°¡ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â »õ·Î¿î ¾î¶² µ¥ÀÌŸ¿¡ µû¶ó¼­ ClientEventReceiveDatagram ÇÔ¼ö°¡ ¸®½ÃºêÇÏÁö ¾ÊÀº ¾î¶² µ¥ÀÌŸ¸¦ ¾ò´Â´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ ¸®½Ãºê µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®¸¦ ÇÏÁö ¾Ê¾Ò´Ù¸é ÀÌ µ¥ÀÌŸ´Â ¼Õ½ÇµÈ´Ù.

³»ºÎ ¹öÆÛÈ­¸¦ Áö¿øÇÏ´Â TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö´Â ¼øÂ÷ÀûÀÎ ¸®½Ãºê µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®¸¦ ¸¸Á·½Ã۱â À§Çؼ­ Ŭ¶óÀ̾ðÆ®ÀÇ ¸®½Ãºê µ¥ÀÌŸ±×·¥ ¿¬»êµ¿¾È µ¥ÀÌŸ±×·¥À» À¯ÁöÇØ¾ßÇÑ´Ù. ±×·¯ÇÑ TDI µå¶óÀ̹öÀÇ Å¬¶óÀÌ¾ðÆ®´Â QTypeÀÌ TDI_QUERY_DATAGRAM_INFO³ª TDI_QUERY_MAX_DATAGRAM_INFOÀÎ °Í¿¡ ´ëÇØ¼­ TdiBuildQueryInformation ÇÔ¼ö¸¦ °¡Áö°í ¼³Á¤µÈ ¸®Äù½ºÆ®¸¦ Á¦½ÃÇÏ¹Ç·Î½á ¸®½ÃºêµÈ µ¥ÀÌŸ±×·¥¿¡ ´ëÇØ¼­ TDI µå¶óÀ̹ö°¡ ÇÒ´çÇÏ´Â ¹öÆÛ°ø°£ÀÇ Àüü ¾çÀ» °áÁ¤ÇÒ ¼ö ÀÖ´Ù. º¸Åë µ¥ÀÌŸ±×·¥¿¡ ´ëÇÑ Æ®·£½ºÆ÷Æ®ÀÇ ¹öÆÛ°ø°£Àº 4 ų·Î¹ÙÀÌÆ®Á¤µµÀÌ´Ù.

³×Æ®¿÷ »ó¿¡¼­ TDI µå¶óÀ̹ö°¡ ¸®½ÃºêÇÑ ºê·Îµåij½ºÆ® µ¥ÀÌŸ±×·¥¿¡ ´ëÇØ¼­ ¸®½Ãºê ÀεðÄÉÀ̼ÇÀ» ¹Þ±â À§Çؼ­ Ŭ¶óÀÌ¾ðÆ®´Â ÇϺΠƮ·£½ºÆ÷Æ®ÀÇ ·ÎÄà ºê·Îµåij½ºÆ® ÁÖ¼Ò¸¦ ¿­¾î¾ßÇϰí ÁÖ¼Ò»ó¿¡¼­ ClientEvent(Chained)ReceiveDatagram Çڵ鷯¸¦ µî·ÏÇØ¾ßÇÑ´Ù.

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