TdiBuildReceiveDatagram

VOID
   TdiBuildReceiveDatagram (
       IN PIRP Irp,
       IN PDEVICE_OBJECT DevObj,
       IN PFILE_OBJECT FileObj,
       IN PVOID CompRoutine,
       IN PVOID Contxt,
       IN PMDL MdlAddr,
       IN ULONG ReceiveLen,
       IN PTDI_CONNECTION_INFORMATION ReceiveDatagramInfo,
       OUT PTDI_CONNECTION_INFORMATION ReturnInfo,
       ULONG InFlags
  
   );

TdiBuildReceiveDatagram ÇÔ¼ö´Â ·ÎÄà Ŭ¶óÀÌ¾ðÆ®°¡ ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ ÀÌ¹Ì ¿¬ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®·Î TDI_RECEIVE_DATAGRAM ¸®Äù½ºÆ®¸¦ À§Çؼ­ ³»ºÎÀÇ ÀåÄ¡ ÅëÁ¦ IRP¸¦ ¼³Á¤ÇÑ´Ù.

¸Å°³º¯¼ö

Irp
´õ »óÀ§ ·¹º§ÀÇ ³×Æ®¿÷ ÄÄÆ÷³ÍÆ®¿¡¼­ ¹ß»ýÇϰųª TdiBuildInternalDeviceControlIrp ÇÔ¼ö¸¦ °¡Áö°í ÇÒ´çµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø IRP¸¦ °¡¸®Å²´Ù.

DevObj
ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡ ÀÇÇØ¼­ »ý¼ºµÈ ÀåÄ¡ °´Ã¼¸¦ °¡¸®Å²´Ù.

FileObj
ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù.

CompRoutine
Ŭ¶óÀÌ¾ðÆ® Á¦°ø IoCompletion ·çƾÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ¼­¼úÇϰųª NULLÀÌ´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ ¸Å°³º¯¼ö¸¦ NULL·Î ¼³Á¤ÇÏÁö ¾Ê´Â´Ù¸é ÁÖ¾îÁø IRP°¡ ¿Ï·áÇÒ ¶§ I/O ¸Å´ÏÀú´Â ÀÌ ·çƾÀ» È£ÃâÇÑ´Ù.

Contxt
Ŭ¶óÀÌ¾ðÆ® °áÁ¤ ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù. ÀÌ Å¬¶óÀÌ¾ðÆ® Á¦°ø Æ÷ÀÎÅÍ´Â ¿Ï·áµÈ IRP¸¦ °¡Áö°í È£ÃâµÉ ¶§ IoCompletion ·çƾÀ¸·Î Àü´ÞµÈ´Ù. CompRoutineÀÌ NULLÀ̸é Contxt´Â NULLÀÌ´Ù.

MdlAddr
Æ®·£½ºÆ÷Æ®°¡ ¸®½ÃºêµÈ µ¥ÀÌŸ±×·¥À» Àü¼ÛÇϴ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾ÈÀ¸·Î ¸ÅÇÎÇϴ üÀÎÈ­µÈ MDLÀÇ Ã³À½ MDLÀ» °¡¸®Å²´Ù.

ReceiveLen
MdlAddr¿¡ ¸ÊµÈ ¹öÆÛ·Î ¸®ÅϵǴ µ¥ÀÌŸ±×·¥ÀÇ ÃÖ´ë ¹ÙÀÌÆ® »çÀÌÁ ¼­¼úÇÑ´Ù. ÀÌ ¸Å°³º¯¼ö°¡ 0ÀÌ¸é Æ®·£½ºÆ÷Æ®´Â MdlAddr¿¡ ¸ÊµÈ Àüü ¹öÆÛ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ReceiveDatagramInfo
·ÎÄà Ŭ¶óÀÌ¾ðÆ®°¡ ¹Þ¾ÆµéÀÌ´Â µ¥ÀÌŸ±×·¥À¸·ÎºÎÅÍ Æ¯Á¤ ¿ø°ÝÀÇ ÁÖ¼Ò¸¦ ¼­¼úÇÏ´Â TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼¸¦ °¡¸®Å²´Ù. RemoteAddressLength ¸â¹ö°¡ 0ÀÌ¸é ¿ø°ÝÁö·ÎºÎÅÍÀÇ µ¥ÀÌŸ±×·¥Àº ÀÌ Å¬¶óÀÌ¾ðÆ®·Î µé¾î¿Ã ¼ö ÀÖ´Ù. RemoteAddressLength°¡ 0À̸é RemoteAddress°¡ NULL·Î ¼³Á¤µÆÀ½À» ÀǹÌÇÑ´Ù.

ReturnInfo
Æ®·£½ºÆ÷Æ®°¡ TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ¸®½ÃºêµÈ µ¥ÀÌŸ±×·¥ÀÇ ±Ù¿øÁö ÁÖ¼Ò¸¦ ¸®ÅÏÇϴ ȣÃâÀÚ Á¦°ø ¹öÆÛ¸¦ °¡¸®Å²´Ù.

InFlags
´ÙÀ½ÀÇ °ÍÀ¸·Î Çϳª ȤÀº ±× ÀÌ»óÀ¸·Î OR ¿¬»êµÇ¹Ç·Î½á Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼­ ¸®ÅϵǴ ¸®½ÃºêÀÇ Å¸ÀÔÀ» ¼­¼úÇÑ´Ù:

TDI_RECEIVE_NORMAL
Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ·Î Á¤»óÀûÀÎ TSDU¸¦ ¸®ÅÏÇÑ´Ù.

TDI_RECEIVE_PEEK
TSDU°¡ ºÎºÐÀûÀ̰í Ŭ¶óÀÌ¾ðÆ®°¡ µ¥ÀÌŸ±×·¥ÀÇ ³ª¸ÓÁö¸¦ À§Çؼ­ ¶Ç´Ù¸¥ ¸®½Ãºê¸¦ ¸®Äù½ºÆ®ÇÑ´Ù°í ÇÏ´õ¶óµµ ¿ø°ÝÁö·ÎºÎÅÍ µµÂøÇÏÀÚ¸¶ÀÚ ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌŸ±×·¥À» ¸®ÅÏÇÑ´Ù.

ÀÌ Ç÷¡±×´Â ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ ³»ºÎÀûÀ¸·Î ¸®½ÃºêµÈ µ¥ÀÌŸ±×·¥À» ¹öÆÛÈ­ÇÒ ¶§¸¸ À¯È¿ÇÏ´Ù. ÀϹÝÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ®´Â ¹öÆÛÈ­µÇÁö ¾ÊÀº Æ®·£½ºÆ÷Æ®¸¦ À§Çؼ­ ³»ºÎÀûÀ¸·Î µ¥ÀÌŸ¸¦ ¹öÆÛÈ­ÇÏ´Â ½Ã½ºÅÛ AFD µå¶óÀ̹ö¸¦ Áö³­ Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ Ç÷¡±×¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÁÖ¼®

TdiBuildReceiveDatagram ÇÔ¼ö´Â ÁÖ¾îÁø IRPÀÇ Æ®·£½ºÆ÷Æ® I/O ½ºÅà ·ÎÄÉÀ̼Ǿȿ¡ MajorFunction·Î½á IRP_MJ_INTERNAL_DEVICE_CONTROLÀ» ¼³Á¤Çϰí MinorFunction·Î½á TDI_RECEIVE_DATAGRAMÀ» ¼³Á¤ÇÑ´Ù.

µ¥ÀÌŸ±×·¥ÀÌ ¼º¸³µÈ ¿¬°á°ú ¿¬°üµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡ TDI µå¶óÀ̹ö´Â µ¥ÀÌŸ±×·¥¿¡ µû¶ó¼­ ¸®½ÃºêÇϴ Ŭ¶óÀÌ¾ðÆ®·Î ¿ø°ÝÀÇ Àü¼ÛÀÚ¿¡ ´ëÇÑ Æ®·£½ºÆ÷Æ® ÁÖ¼Ò¸¦ ¸®ÅÏÇÑ´Ù.

Æ®·£½ºÆ÷Æ®°¡ ReceiveDatagramInfo¿¡¼­ Ŭ¶óÀÌ¾ðÆ® »ç¾ç°ú ÀÏÄ¡ÇÏ´Â ±Ù¿øÁö ÁÖ¼Ò¿Í Å¬¶óÀ̾ðÆ®ÀÇ ¿­¸° ÆÄÀÏ °´Ã¼¿¡ ÀÇÇØ¼­ ±¸ÇöµÈ ·ÎÄà ÁÖ¼Ò¸¦ Áö½ÃÇÏ´Â µ¥ÀÌŸ±×·¥À» ¹ÞÀ» ¶§ Æ®·£½ºÆ÷Æ®´Â ÀÌ IRP¸¦ ¸¸Á·½ÃŲ´Ù. ¸®½ÃºêµÈ µ¥ÀÌŸ±×·¥ÀÌ Å¬¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¿¡ ´ëÇØ¼­ ³Ê¹« Å©´Ù¸é ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â µ¥ÀÌŸ±×·¥ÀÇ ³¡À» ÀÚ¸§À¸·Î½á ºÒÇÊ¿äÇÑ µ¥ÀÌŸ¸¦ ¹ö¸®°í Ŭ¶óÀ̾ðÆ®ÀÇ ¸®½Ãºê µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®¸¦ ¿Ï·áÇÑ´Ù.

TDI Æ®·£½ºÆ÷Æ®´Â µ¥ÀÌŸ±×·¥À» °áÄÚ ´ÜÆíÈ­ÇÏÁö ¾Ê´Â´Ù. °á±¹ ±×µéÀÇ Å¬¶óÀÌ¾ðÆ®´Â °¢°¢ÀÇ µ¥ÀÌŸ±×·¥À» ¸®½ÃºêÇϱâ À§Çؼ­ ÇϳªÀÇ ¸®½Ãºê µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®¸¦ ÇÑ´Ù. ReceiveLen¿¡ ´ëÇѼ­ °¡´ÉÇÑ ÃÖ´ë °ªÀ» °áÁ¤Çϱâ À§Çؼ­ Ŭ¶óÀÌ¾ðÆ®´Â º¸Åë ¾Õ¼­ QTypeÀÌ TDI_QUERY_PROVIDER_INFO, TDI_QUERY_DATAGRAM_INFO, ȤÀº TDI_QUERY_MAX_DATAGRAM_INFOÀÎ °Í¿¡ ´ëÇØ¼­ TdiBuildQueryInformation ÇÔ¼ö¸¦ °¡Áö°í ¼³Á¤µÈ Á¤º¸ Äõ¸® ¸®Äù½ºÆ®¸¦ Á¦½ÃÇß´Ù.

Ŭ¶óÀÌ¾ðÆ®´Â Á¤º¸ Äõ¸® ¸®Äù½ºÆ®¸¦ °¡Áö°í ¾òÀ» ¼ö ÀÖ´Â Æ®·£½ºÆ÷Æ® ƯÁ¤ Æ÷¸ËÀ» °¡Áö´Â ºê·Îµåij½ºÆ® ÁÖ¼Ò¸¦ ¿­¾î¼­ ºê·Îµåij½ºÆ® µ¥ÀÌŸ±×·¥À» ¹ÞÀ» ¼ö ÀÖ´Ù. ±×·¯³ª ±×·¯ÇÑ Å¬¶óÀÌ¾ðÆ®´Â ºê·Îµåij½ºÆ® ÁּҷκÎÅÍ µ¥ÀÌŸ±×·¥À» º¸³¾ ¼ö ¾ø´Ù. ±×¸®°í ÀÚ½ÅÀÇ ¿¬°á°ú ±× ºê·Îµåij½ºÆ® ÁÖ¼Ò»çÀÌ¿¡¼­ ¿¬°áÀ» ¼º¸³ÇÒ ¼ö ¾ø´Ù.

¶ÇÇÑ Å¬¶óÀÌ¾ðÆ®´Â Æ¯Á¤ ÁÖ¼Ò »ó¿¡¼­ ClientEventReceiveDatagram°ú ClientEventChainedReceiveDatagram ÇÔ¼ö¸¦ µî·ÏÇÏ¹Ç·Î½á µ¥ÀÌŸ±×·¥À» ¹ÞÀ» ¼ö ÀÖ´Ù.