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 ÇÔ¼ö¸¦ µî·ÏÇÏ¹Ç·Î½á µ¥ÀÌŸ±×·¥À» ¹ÞÀ» ¼ö ÀÖ´Ù.
|