TDI_ACTION

Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®°¡ TDI_ACTION ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡°Ô ±× Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â Æ®·£½ºÆ÷Æ® ƯÁ¤ È®ÀåÀ» Çϵµ·Ï ¿ä±¸ÇÑ´Ù.

IRP

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

    Irp->IoStatus.Status
    action ¸®Äù½ºÆ®ÀÇ ¸¶Áö¸· »óŸ¦ ¼­¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ ´ÙÀ½Áß¿¡ Çϳª·Î IRP¸¦ ¿Ï·áÇÒ ¶§ ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù:

    STATUS_SUCCESS
    STATUS_PENDING
    STATUS_INVALID_CONNECTION
    STATUS_INVALID_PARAMETER
    STATUS_INVALID_HANDLE
    STATUS_BUFFER_TOO_SMALL
    STATUS_INSUFFICIENT_RESOURCES
    STATUS_NOT_SUPPORTED
    STATUS_NOT_IMPLEMENTED

    Irp->IoStatus.Information
    ÀÌ ¸®Äù½ºÆ®¸¦ À§Çؼ­ Àü¼ÛµÈ µ¥ÀÌŸÀÇ ¹ÙÀÌÆ®°¡ ¾ó¸¶³ª ¸¹ÀºÁö¸¦ ¼­¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â IRP°¡ ¿Ï·áµÇ±â Àü¿¡ I/O »óÅ ºí·°ÀÇ ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù.

    IrpSp->MajorFunction
    IRP_MJ_INTERNAL_DEVICE_CONTROLÀ» ¼­¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ TDI_XXX ¸®Äù½ºÆ®¸¸À» ´Ù·ç´Â TdiDispatchInternalDeviceControl ÇÔ¼ö¸¦ ÀͽºÆ÷Æ® ÇÑ´Ù¸é ÀÌ ¸â¹ö¸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù.

    IrpSp->MinorFunction
    TDI_ACTIONÀ» ¼­¼úÇÑ´Ù.

    IrpSp->FileObject
    ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ¿­¸° ÆÄÀÏ °´Ã¼¸¦ ¼­¼úÇÑ´Ù. ÀÌ ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³Î¿¡ ´ëÇØ¼­ À¯ÁöµÇ´Â »óŸ¦ Á¢±ÙÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®´Â FsContext¿Í °¡´ÉÇÏ´Ù¸é FsContext2 Çʵ带 »ç¿ëÇÑ´Ù.

    Irp->MdlAddress
    Ŭ¶óÀÌ¾ðÆ®°¡ Á¦°øÇÏ´Â action ¸Å°³º¯¼ö ºí·°À» Æ÷ÇÔÇϰí ÀÖ´Â ¹öÆÛ¸¦ ¸ÅÇÎÇϴ üÀÎÈ­µÈ óÀ½ÀÇ MDLÀ» °¡¸®Å²´Ù. ÀÌ ¹öÆÛÀÇ Ã³À½ ºÎºÐÀº Ç×»ó Æ®·£½ºÆ÷Æ® Á¤ÀÇ ³»¿ëÀÌ action ¸®Äù½ºÆ®¸¦ ¼öÇàÇϱâ À§Çؼ­ ¿ä±¸µÇ¾ú´ÂÁö¿¡ µû¶ó¼­ ½Ã½ºÅÛ Á¤ÀÇ TDI_ACTION_HEADER ±¸Á¶Ã¼¸¦ Æ÷ÇÔÇÑ´Ù.

ÁÖ¼®

Ŭ¶óÀ̾ðÆ®ÀÇ ¼º°øÀûÀÎ action ¸®Äù½ºÆ® ¿Ï·á´Â Æ®·£½ºÆ÷Æ® Á¦°ø È®ÀåÀ» Ŭ¶óÀÌ¾ðÆ®¿¡°Ô Àû¿ëÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ÇÏÁö¸¸ ´Ù¸¥ TDI Ŭ¶óÀÌ¾ðÆ®³ª µå¶óÀ̹ö¿¡°Ô´Â ¾Æ´Ï´Ù. °¡´ÉÇÑ µ¿ÀÛµéÀº TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹öÀÇ °³¹ßÀÚÀÇ °áÁ¤¿¡¼­ Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼­ Á¤ÀǵȴÙ.

±×·¯ÇÑ Å¬¶óÀÌ¾ðÆ®´Â ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³Î°ú °ü·ÃµÈ Æ®·£½ºÆ÷Æ® Á¤ÀÇ È®ÀåÀ» À§Çؼ­ action ¸®Äù½ºÆ®¸¦ ÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®´Â MdlAddress¿¡ ¸ÊµÈ ¸Å°³º¯¼ö ºí·°¾È¿¡ ¸®Äù½ºÆ®µÈ µ¿ÀÛ¿¡ °üÇÑ ¸ðµç Á¤º¸¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ Á¦°øÇÑ´Ù.

°¢°¢ÀÇ action ¸Å°³º¯¼ö ºí·°Àº Æ®·£½ºÆ÷Æ® ½Äº°ÀÚ¿Í action Äڵ带 Æ÷ÇÔÇÏ´Â TDI_ACTION_HEADER¸¦ °¡Áö°í ½ÃÀÛÇÑ´Ù. ±×·¯ÇÑ ¸®Äù½ºÆ®¸¦ ¹ÞÀ» ¶§ Æ®·£½ºÆ÷Æ®´Â ¸®Äù½ºÆ®¸¦ À¯È¿È­Çϱâ À§Çؼ­ ÀÌ Çì´õ¾È¿¡ TransportId °ªÀ» »ç¿ëÇÑ´Ù. ActionCode ¸â¹ö´Â ¼öÇàµÇ´Â Æ®·£½ºÆ÷Æ® Á¤ÀÇ ¿¬»êÀ» ¼­¼úÇÏ°í ¸Å°³º¯¼ö ºí·°ÀÇ ³ª¸ÓÁö¸¦ À§ÇÑ Æ®·£½ºÆ÷Æ® ¿ä±¸ ³»¿ëÀ» °áÁ¤ÇÑ´Ù.

TdiBuildActionÀº Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ IRP¾È¿¡ ä¿ì±â À§Çؼ­ »ç¿ëÇÏ´Â ¸ÅÅ©·ÎÀÌ´Ù.