TdiDispatchCleanup

NTSTATUS
   TdiDispatchCleanup (
       IN PDEVICE_OBJECT DeviceObject,
       IN PIRP Irp
  
   );

TdiDispatchCleanup ÇÔ¼ö´Â ´ÝÈ÷·Á°í ÇÏ´Â ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ȤÀº ÅëÁ¦ ä³ÎÀ» À§ÇÑ Æ¯Á¤ IRP¸¦ ¿Ï·áÇÑ´Ù.

¸Å°³º¯¼ö

DeviceObject
TDI Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼­ »ý¼ºµÈ ÀåÄ¡ °´Ã¼¸¦ °¡¸®Å²´Ù.

Irp
Æ®·£½ºÆ÷Æ® µå¶óÀ̹öÀÇ I/O ½ºÅà ·ÎÄÉÀ̼ǿ¡ MajorFunctionCode·Î½á ¼³Á¤µÈ IRP_MJ_CLEANUPÀ» °¡Áø IRP¸¦ °¡¸®Å²´Ù.

IrpSp ·Î½á ´ÙÀ½ÀÇ ¸®½ºÆ®¿¡ º¸¿©Áö´Â IRP¿¡ ÀÚ½ÅÀÇ ½ºÅà ·ÎÄÉÀ̼ǿ¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¾ò±â À§Çؼ­ ÁÖ¾îÁø IRP¸¦ °¡Áö°í Æ®·£½ºÆ÷Æ®´Â IoGetCurrentIrpStackLocation ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. TdiDispatchCleanup ÇÔ¼ö´Â 󸮵Ǵ Ŭ¸°¾÷ ¸®Äù½ºÆ®¿¡ ´ÙÀ½ÀÇ IRP ¸â¹ö·Î ¼³Á¤µÇ´Â Á¤º¸¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù:

IoStatus.Status
Ŭ¸°¾÷ ¿¬»êÀÇ ¸¶Áö¸· »óŸ¦ ¼­¼úÇØ¶ó. Æ®·£½ºÆ÷Æ®´Â ÀÌ ¸â¹ö¸¦ TdiDispatchCleanup ÇÔ¼ö¿¡ ÀÇÇØ¼­ ¸®ÅϵǴ °°Àº °ªÀ¸·Î ¼³Á¤ÇÑ´Ù.(IoStatus.Information´Â 0 À¸·Î ¼³Á¤µÈ´Ù.)

IrpSp->MajorFunction
IRP_MJ_CLEANUPÀ» ¼­¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ Ŭ¸°¾÷ ¸®Äù½ºÆ®¸¸À» ´Ù·ç´Â TdiDispatchCleanup ·çƾÀ» ÀͽºÆ÷Æ®ÇÑ´Ù¸é Æ®·£½ºÆ÷ºz ÀÌ ¸â¹ö¸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù.

IrpSp->FileObject
ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ȤÀº ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ¿­¸° ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù. ÆÄÀÏ °´Ã¼°¡ Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ¼­ ¿­¸± ¶§ TdiDispatchCreate ÇÔ¼ö°¡ ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³ÎÀ» À§Çؼ­ ±Ùº»ÀûÀ¸·Î ¼³Á¤ÇÑ »óŸ¦ Á¢±ÙÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö´Â ÀÌ ÆÄÀÏ °´Ã¼¿¡ FsContext °ªÀ» »ç¿ëÇÑ´Ù. °¡´ÉÇÏ´Ù¸é FsContext2ÀÇ °ªµµ »ç¿ëÇÑ´Ù.

¸®Åϰª

Ŭ¸°¾÷ ¿¬»êÀÌ ÇàÇØÁ®¼­ Æ®·£½ºÆ÷Æ®°¡ ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ȤÀº ÅëÁ¦ ä³ÎÀ» À§Çؼ­ Å¥¸¦ À¯ÁöÇÏ´Â ¾î¶² Áö¿¬µÈ IRP¸¦ ¿Ï·áÇßÀ» ¶§ TdiDispatchCleanup ÇÔ¼ö´Â STATUS_SUCCESS¸¦ ¸®ÅÏÇÑ´Ù.

ÁÖ¼®

I/O ¸Å´ÏÀú°¡ ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ¿­¸° ÆÄÀÏ °´Ã¼¿¡ ´ëÇÑ ¸¶Áö¸· ÇÚµéÀ» ´ÝÀ» ¶§ TdiDispatchCleanup ÇÔ¼ö°¡ ½ÇÇàµÈ´Ù. TdiDispatchCleanup ÇÔ¼ö´Â ¿­¸° ÆÄÀÏ °´Ã¼¸¦ ÂüÁ¶ÇÏ´Â Æ®·£½ºÆ÷Æ®°¡ ÇöÀç À¯ÁöÇϰí ÀÖ´Â IRPÀÇ ¿Ï·á¿¡ ´ëÇÑ Ã¥ÀÓÀÌ ÀÖ´Ù.

I/O ¸Å´ÏÀú°¡ ±×·¯ÇÑ ÆÄÀÏ °´Ã¼ ÇÚµé·ÎÀÇ ¸¶Áö¸· ÂüÁ¶¸¦ Á¦°ÅÇÒ ¶§ I/O ¸Å´ÏÀú´Â TdiDispatchClose ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ¹Ù²Ù¾î ¸»Çϸé I/O ¸Å´ÏÀú´Â ƯÁ¤ ÆÄÀÏ °´Ã¼¸¦ À§ÇÑ IRP_MJ_CLOSE ¸®Äù½ºÆ®¸¦ Á¦ÃâÇϱâ Àü¿¡ Æ®·£½ºÆ÷Æ®·Î IRP_MJ_CLEANUP ¸®Äù½ºÆ®¸¦ Ç×»ó Á¦ÃâÇÑ´Ù.

ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³ÎÀ» À§ÇÑ Å¬¸°¾÷Àº ¿ø·¡ µ¿±âÀûÀÎ ¿¬»êÀÌ´Ù. TdiDispatchCleanup ÇÔ¼ö´Â ƯÁ¤ Ŭ¸°¾÷ ÀÛ¾÷À» ó¸®Çϱâ À§Çؼ­ ³»ºÎÀÇ µå¶óÀ̹ö ÇÔ¼ö¸¦ ±â´Ù¸®´Â °ÍÀ» ¹æÇØÇÒ ¼ö ÀÖÁö¸¸ TdiDispatchCleanup ÇÔ¼ö´Â ÀԷ Ŭ¸°¾÷ IRP ÀÚü¸¦ ¿Ï·áÇØ¾ßÇÑ´Ù.

ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¿¡ ´ëÇÑ ÇÚµéÀ» ´Ý´Â °ÍÀº Àü¿¡ Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ¼­ ¿­¸° Æ®·£½ºÆ÷Æ® ÁÖ¼ÒÀÇ »ç¿ëÀ» Ãë¼ÒÇÑ´Ù. ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â FileObject¸¦ À§ÇÑ Å¬¸°¾÷ ¸®Äù½ºÆ®¸¦ ¹ÞÀ» ¶§ Æ®·£½ºÆ÷Æ®´Â ´ÙÀ½À» ÇÑ´Ù:

  • ÁÖ¼Ò·Î Áö½ÃµÇ´Â ¾î¶² Áö¿¬µÈ ¸®Äù½ºÆ®¸¦ ¿Ï·áÇØ¶ó.
  • ÁÖ¼Ò »ó¿¡¼­ µî·ÏµÈ Ŭ¶óÀÌ¾ðÆ® À̺¥Æ® Çڵ鷯¸¦ µî·ÏÇØÁ¦Çضó.
  • Æ®·£½ºÆ÷Æ®°¡ TdiDispatchClose ÇÔ¼ö·Î ÀÚ¿øÇØÁ¦¸¦ ¿¬±âÇÏÁö ¾Ê´Â´Ù¸é ÁÖ¼Ò¸¦ Æ®·¢Çϱâ À§Çؼ­ ¼³Á¤µÈ µå¶óÀ̹ö ÇÒ´ç »óŸ¦ ¼±ÅÃÀûÀ¸·Î ÇØÁ¦Çضó.
TdiDispatchCleanup ÇÔ¼ö·ÎºÎÅÍÀÇ ¸®ÅÏ¿¡¼­ Æ®·£½ºÆ÷Æ®´Â ÁÖ¼Ò¸¦ À§Çؼ­ Å¥¿¡ ÀúÀåµÈ ¾î¶² ƯÁ¤ IRPµµ À¯ÁöÇÏÁö ¾ÊÁö¸¸ µå¶óÀ̹ö´Â ƯÈ÷ TdiDispatchCleanup ÇÔ¼ö°¡ ÆÄÀÏ °´Ã¼¾È¿¡ FsContext¿Í FsContext2¿¡ µå¶óÀ̹ö ÇÒ´ç ÄÁÅØ½ºÆ®¸¦ ÇØÁ¦ÇÏÁö ¾Ê´Â´Ù¸é ±× ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¿¡ ´ëÇÑ ÀÚ½ÅÀÇ µÎµå·¯Áø ÂüÁ¶¸¦ °¡Áú ¼ö ÀÖ´Ù.

Ŭ¶óÀÌ¾ðÆ®°¡ Àü¿¡ °ü·ÃµÈ ÁּҷκÎÅÍ ¿¬°áÀ» ²÷´Â ¸®Äù½ºÆ®¸¦ ¸¸µéÁö ¾Ê´Â´Ù ÇÒÁö¶óµµ TdiDispatchCleanup ÇÔ¼ö´Â ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ´Ý±â À§Çؼ­ È£ÃâµÉ ¼ö ÀÖ´Ù. FileObject°¡ ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ±¸ÇöÇϱâ À§Çؼ­ Ŭ¸°¾÷ ¸®Äù½ºÆ®¸¦ ¹ÞÀ» ¶§ Æ®·£½ºÆ÷Æ®´Â ´ÙÀ½À» ÇÑ´Ù:

  • ¿¬°á ¿£µåÆ÷ÀÎÆ®¿Í ¿¬°üµÈ Ȱ¼ºÈ­µÈ ¿¬°áÀ» Ãë¼ÒÇØ¶ó.
  • ÇÊ¿äÇÏ´Ù¸é ¿¬°á ¿£µåÆ÷ÀÎÆ®¿Í ¿¬°üµÈ ÁÖ¼Ò »çÀÌ¿¡¼­ ºÐ¿­ÀÇ °á°ú¸¦ ½Ã¹Ä·¹ÀÌÆ®Çضó.
  • ¿¬°á°ú ¿¬°üµÈ ÁÖ¼Ò¿¡¼­ µî·ÏµÈ Ŭ¶óÀÌ¾ðÆ® À̺¥Æ®¸¦ µî·ÏÇØÁ¦Çضó.
  • ¿¬°á·Î Áö½ÃµÇ´Â Áö¿¬µÈ ¸®Äù½ºÆ®¸¦ ¿Ï·áÇØ¶ó.
  • Æ®·£½ºÆ÷Æ®°¡ TdiDispatchClose ÇÔ¼ö·Î ÀÚ¿øÇØÁ¦¸¦ Áö¿¬ÇÏÁö ¾Ê´Â´Ù¸é ¿¬°áÀ» Æ®·¢Çϱâ À§Çؼ­ ¼³Á¤µÈ µå¶óÀ̹ö ÇÒ´ç »óŸ¦ ¼±ÅÃÀûÀ¸·Î ÇØÁ¦Çضó.
TdiDispatchCleanup ÇÔ¼ö·ÎºÎÅÍÀÇ ¸®ÅÏ¿¡¼­ Æ®·£½ºÆ÷Æ®´Â ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ À§Çؼ­ Å¥¿¡ ÀúÀåµÈ ¾î¶² ƯÁ¤ º¸³»±â ȤÀº ¹Þ±â¸¦ À¯ÁöÇÏÁö ¾ÊÁö¸¸ µå¶óÀ̹ö´Â ƯÈ÷ TdiDispatchCleanup ÇÔ¼ö°¡ ÆÄÀÏ °´Ã¼ ¾È¿¡ FsContext¿Í FsContext2¿¡ µå¶óÀ̹ö ÇÒ´ç ÄÁÅØ½ºÆ®¸¦ ÇØÁ¦ÇÏÁö ¾Ê´Â´Ù¸é ±× ¿¬°áÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¿¡ ´ëÇÑ ÀÚ½ÅÀÇ µÎµå·¯Áø ÂüÁ¶¸¦ °¡Áú ¼ö ÀÖ´Ù.

ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â FileObject¸¦ À§Çؼ­ Ŭ¸°¾÷ ¸®Äù½ºÆ®¸¦ ¹ÞÀ» ¶§ Æ®·£½ºÆ÷Æ®´Â ÅëÁ¦ ä³Î¿¡ ´ëÇÑ Æ¯Á¤ ¸®Äù½ºÆ®¸¦ ¿Ï·áÇÑ´Ù. ±×·¯ÇÑ ¸®Äù½ºÆ®´Â TDI µå¶óÀ̹ö¿¡¼­ ¿­¸° ÁÖ¼Ò¿Í ¿¬°á ¿£µåÆ÷ÀÎÆ®¿¡´Â ¾Æ¹«·± ¿µÇâµµ ÁÖÁö ¾Ê´Â´Ù.

Æ®·£½ºÆ÷Æ®°¡ Ŭ¸°¾÷ ¸®Äù½ºÆ®¸¦ ¹Þ¾ÒÀ» ¶§ Áö¿¬µÈ IRP¸¦ ¾î¶»°Ô ó¸®ÇÏ´ÂÁö´Â µå¶óÀ̹ö°¡ °áÁ¤ÇÑ´Ù. ÀϹÝÀûÀ¸·Î Æ®·£½ºÆ÷Æ®´Â I/O »óÅ ºí·°¿¡ STATUS_CANCELLED¸¦ ¼³Á¤ÇÏ°í ±×¸®°í³ª¼­ °¢°¢ÀÇ Áö¿¬µÈ IRP¸¦ °¡Áö°í IoCompleteRequest ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ¼±ÅÃÀûÀ¸·Î Æ®·£½ºÆ÷Æ®´Â Áö¿¬µÈ ¿¬»êÀ» ¿Ï·áÇÏ°í ¸®Äù½ºÆ®µÈ ¿¬»êÀÌ ÇàÇØÁ³À» ¶§ °¢°¢ÀÇ IRP¸¦ ¿Ï·áÇÑ´Ù: Áï, Áö¿¬µÈ ¸®½Ãºê¿Í ÁÖ¼Ò È¤Àº ¿¬°á ¿£µåÆ÷ÀÎÆ®¿¡ ´ëÇÑ Áö¿¬µÈ Àü¼ÛÀ» À§ÇØ ´ÙÀ½ ÇÏÀ§ µå¶óÀ̹ö¿¡ ÀÇÇØ¼­ ÇÒ´çµÈ ÀÚ¿øÀ» ¸®ÅÏÇÏ°í ´ëÀÀÇÏ´Â IRP¸¦ ¿Ï·áÇϱâ Àü¿¡ ÅëÁ¦ ä³Î¿¡ ´ëÇÑ ÇöÀç Åë°èÀÇ ¸ðÀ½À» ¼öÁýÇØ¶ó.

ÁÖ¾îÁø Æ®·£½ºÆ÷Æ®°¡ ´ÝÈ÷´Â ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³Î¿¡ ´ëÇÑ Áö¿¬µÈ IRP¸¦ ¹«½¼ ¹æ¹ýÀ¸·ÎµçÁö ó¸®ÇÑ´Ù¸é TdiDispatchCleanup ÇÔ¼ö´Â Ŭ¸°¾÷ IRP¸¦ ¿Ï·áÇÒ ¼ö ¾ø°í ÁÖ¾îÁø Ŭ¸°¾÷ IRP¿¡¼­ FileObject¸¦ ÂüÁ¶ÇÏ´Â µÎµå·¯Áø IRP°¡ ¾øÀ» ¶§±îÁö ÅëÁ¦¸¦ ¸®ÅÏÇÑ´Ù.

±âº»ÀûÀ¸·Î TdiDispatchCleanup ÇÔ¼ö´Â IRQL PASSIVE_LEVEL¿¡¼­ ½ÇÇàµÈ´Ù.