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¿¡¼ ½ÇÇàµÈ´Ù.
|