TdiBuildReceive

VOID
   TdiBuildReceive (
       IN PIRP Irp,
       IN PDEVICE_OBJECT DevObj,
       IN PFILE_OBJECT FileObj,
       IN PVOID CompRoutine,
       IN PVOID Contxt,
       IN PMDL MdlAddr,
       IN ULONG InFlags,
       IN ULONG ReceiveLen
  
   );

TdiBuildReceive ÇÔ¼ö´Â ·ÎÄà Ŭ¶óÀÌ¾ðÆ®°¡ ¿ø°ÝÁö¿Í ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀ» ¼º¸³ÇÑ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®·Î TDI_RECEIVE ¸®Äù½ºÆ®¸¦ À§Çؼ­ ³»ºÎ ÀåÄ¡ ÅëÁ¦ IRP¸¦ ¼³Á¤ÇÑ´Ù.

¸Å°³º¯¼ö

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

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

FileObj
¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù.

È£ÃâÀÚ´Â ÀÌ ¿¬°á ¿£µåÆ÷ÀÎÆ®¿Í ·ÎÄà ÁÖ¼Ò»çÀÌ¿¡¼­ °ü°è¸¦ ¼³Á¤Çϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®·Î TdiBuildAssociateAddress ÇÔ¼ö¸¦ °¡Áö°í ¼³Á¤µÈ ¸®Äù½ºÆ®¸¦ Àü¿¡ ¼º°øÇß´Ù. °ü°è°¡ ¼º¸³µÆÀ» ¶§ ¶ÇÇÑ È£ÃâÀÚ´Â TdiBuildConnect³ª TdiBuildListen ÇÔ¼öÀÇ È£ÃâÀ» °¡Áö°í ¼³Á¤µÈ ¸®Äù½ºÆ®¸¦ ¼º°øÀûÀ¸·Î Á¦½ÃÇϰí ÈÄ¿¡ TdiBuildAccept ÇÔ¼ö¸¦ °¡Áö°í ¼³Á¤µÈ ¸®Äù½ºÆ®¸¦ ¼º°øÇÏ¹Ç·Î½á ¿ø°ÝÁö¿Í ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀ» ¼º¸³Çß´Ù.

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

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

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

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

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

TDI_RECEIVE_EXPEDITED
Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ·Î ½Å¼ÓÇÑ TSDU¸¦ ¸®ÅÏÇØ¶ó.

TDI_RECEIVE_NORMAL°ú TDI_RECEIVE_EXPEDITED°¡ ¼³Á¤µÇ°Å³ª µÑ´Ù ¼³Á¤µÇÁö ¾Ê¾Ò´Ù¸é ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â ÀÌ ¸®½Ãºê ¸®Äù½ºÆ®¿¡ ´ëÇØ¼­ TSDUÀÇ Å¸ÀÔÀ» ÀεðÄÉÀÌÆ®ÇÑ´Ù.

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

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

ReceiveLen
Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¸®½Ãºê ¹öÆÛÀÇ ¹ÙÀÌÆ® »çÀÌÁ ¼­¼úÇÑ´Ù.

ÁÖ¼®

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

Ŭ¶óÀÌ¾ðÆ®°¡ ÁÖ¾îÁø ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ À§Çؼ­ ClientEvent(Chained)Receive(Expedited) Çڵ鷯¸¦ µî·ÏÇß´Ù¸é ¸®½Ãºê ¸®Äù½ºÆ®¸¦ Á¦½ÃÇÏ´Â °ÍÀº ¸®½Ãºê IRP°¡ ¸¸Á·ÇÒ ¶§±îÁö ClientEvent(Chained)Receive(Expedited) ÇÔ¼öÀÇ È£ÃâÀ» ±ÝÁöÇÑ´Ù. ±×¸®°í³ª¼­ Æ®·£½ºÆ÷Æ®´Â ÀûÀýÇÑ ClientEvent(Chained)Receive(Expedited) Çڵ鷯·Î ´Ù½Ã ¸®½Ãºê¸¦ ÀεðÄÉÀÌÆ®ÇÑ´Ù.

TDI_RECEIVE_PEEK Ç÷¡±×°¡ ¼³Á¤µÇÁö ¾Ê´Â´Ù¸é Ŭ¶óÀ̾ðÆ®ÀÇ ¹öÆÛ°¡ ²ËÂ÷Àְųª Æ®·£½ºÆ÷Æ®°¡ ¿ø°ÝÁö·ÎºÎÅÍ ·¹ÄÚµåÀÇ ³¡À̶ó´Â ÀεðÄÉÀ̼ÇÀ» ¹ÞÀ» ¶§±îÁö ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â ¸®½ÃºêµÈ µ¥ÀÌŸ¸¦ °¡Áö°í ÁÖ¾îÁø ¹öÆÛ¸¦ ä¿î´Ù. ÀÌ Ç÷¡±×°¡ ¼³Á¤µÈ´Ù¸é ÀÌ IRP°¡ Àüü TSDU¸¦ ¾ò´Â °ÍÀ» ¸¸Á·ÇÒ ¶§ Ŭ¶óÀÌ¾ðÆ®´Â ¼øÂ÷ÀûÀÎ ¸®½Ãºê ¸®Äù½ºÆ®¸¦ Á¦½ÃÇØ¾ßÇÑ´Ù.

ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ ¿ø°ÝÁö·ÎºÎÅÍ µµÂøÇÑ Á¤»óÀûÀÌ°í ½Å¼ÓÇÑ µ¥ÀÌŸ¸¦ ¹Þ°í ÀÖ´Ù¸é Æ®·£½ºÆ÷Æ®´Â Á¤»óÀûÀÎ ¸®½Ãºê ¿¬»êÀ» ¹Ì¸® ºñ¿öµÎ°í Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾ÈÀ¸·Î ÀÌ¹Ì Àü¼ÛµÈ Á¤»óÀûÀÎ µ¥ÀÌŸ¸¦ °¡Áö°í Ŭ¶óÀÌ¾ðÆ®·Î Áï½Ã ¸®ÅÏÇØ¾ßÇÑ´Ù. À̰ÍÀÌ ¹ß»ýÇÒ ¶§ Ŭ¶óÀÌ¾ðÆ®´Â ½Å¼ÓÇÑ TSDU¸¦ ¸®½ÃºêÇϱâ À§Çؼ­ ÇÊ¿äÇÑ ¸¸Å­ÀÇ ¸¹Àº ¸®½Ãºê ¸®Äù½ºÆ®¸¦ ÇØ¾ßÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ µµÂøÇÏ´Â ¸ðµç ½Å¼ÓÇÑ µ¥ÀÌŸ¸¦ ¾òÀ» ¶§ Ŭ¶óÀÌ¾ðÆ®´Â ´Ù½Ã Á¤»óÀûÀÎ µ¥ÀÌŸ¸¦ ¸®½ÃºêÇϱâ À§Çؼ­ ¶Ç´Ù¸¥ ¸®½Ãºê ¸®Äù½ºÆ®¸¦ Á¦½ÃÇÑ´Ù.

¶ÇÇÑ Å¬¶óÀÌ¾îÆ®°¡ ZwReadFile ÇÔ¼ö¸¦ È£ÃâÇÏ¹Ç·Î½á ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°á »ó¿¡¼­ Á¤»óÀûÀÎ TSDU¸¦ ¸®½ÃºêÇÏ´Â µ¿¾È¿¡ Ŭ¶óÀÌ¾ðÆ®´Â Æ®·£½ºÆ÷Æ®°¡ ¸®½Ãºê Ç÷¡±×¸¦ ÀεðÄÉÀÌÆ®ÇÒ ¹æ¹ýÀÌ ¾ø±â ¶§¹®¿¡ ÀÌ ¹æ¹ýÀ¸·Î ½Å¼ÓÇÑ µ¥ÀÌŸ¸¦ ¸®½ÃºêÇÒ ¼ö ¾ø´Ù. °Ô´Ù°¡ ZwReadFile ÇÔ¼ö·ÎÀÇ È£ÃâÀº ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ ·¹ÄÚµåÀÇ ³¡ ÀεðÄÉÀ̼ÇÀ» ¹Þ¾Ò´ÂÁö¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ¾Ë¸®Áö ¾Ê´Â´Ù.

ZwReadFile ÇÔ¼ö È£ÃâÀÇ Æ¯Â¡¿¡ ´ëÇØ¼­´Â Ä¿³Î ¸ðµå µå¶óÀ̹ö ·¹ÆÛ·±½º¸¦ ºÁ¶ó.