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