1.2.5 ¾îÇø®ÄÉÀ̼ÇÀ» À§Çؼ ¼öÇàµÇ´Â IOCTL
ÇÊÅÍ ÈÅ µå¶óÀ̹ö´Â ¸¸¾à ¾îÇø®ÄÉÀ̼ÇȤÀº »óÀ§·¹º§ µå¶óÀ̹ö°¡ I/OÄÁÃß·²(IOCTL)¿äûÀ» ÇÊÅÍ ÈÅÀ» ¼³Á¤ÇϱâÀ§ÇØ ÇÊÅÍ ÈÅ µå¶óÀ̹ö¿¡°Ô ³»·Áº¸³»·Á°í ÇÑ´Ù¸é IRP_MJ_DEVICE_CONTROLµð½ºÆäÄ¡ ·çƾÀ» ¼öÇàÇØ¾ßÇÑ´Ù. ÀÌ µð½ºÆäÄ¡ ·çƾÀº ÀÌ·¯ÇÑ IOCTLµéÀ» ó¸®ÇÑ´Ù. DriverEntry·çƾÀº ÀÌ µð½ºÆÐÄ¡ ·çƾ¿¡´ëÇÑ ¿£Æ®¸® Æ÷ÀÎÅ͸¦ ÁöÁ¤Çϰí ÀͽºÆ÷Æ®ÇØ¾ßÇÑ´Ù.
µå¶óÀ̹ö °³¹ßÀÚ´Â ÀÌ·¯ÇÑ IOCTLµé°ú ÇÊÅÍ ÈÅÀÌ ¼öÇàÇϴ ó¸®°úÁ¤ÀÇ Å¸ÀÔ¿¡´ëÇÑ Á¤º¸¸¦ Á¤ÀÇÇÏ°í °ø°³ÇÑ´Ù. ¾îÇø®ÄÉÀÌ¼Ç È¤Àº »óÀ§·¹º§ µå¶óÀ̹öµéÀº ÇÊÅÍ ÈÅÀ» ¼³Á¤ÇϱâÀ§ÇØ ÀÌ·¯ÇÑ °ø°³µÈ IOCTLµéÀ» »ç¿ëÇÑ´Ù.
IOCTL¿äûÀ» »ý¼ºÇϱâÀ§ÇØ, ÇÊÅÍ ÈÅ µå¶óÀ̹öÀÇ ÀåÄ¡ ÄÁÃß·² ·çƾÀº IoGetCurrentIrpStackLocationÇÔ¼ö¸¦ È£ÃâÇØ¾ßÇÑ´Ù. ÀÌÈ£Ãâ¿¡¼, ÀåÄ¡ ÄÁÃß·² ·çƾÀº ·çƾ¿¡°Ô ³Ñ°ÜÁø IRP¿¡´ëÇÑ Æ÷ÀÎÅ͸¦ ³Ñ±ä´Ù. ÀåÄ¡ ÄÁÃß·² ·çƾÀº ¾î¶² IOCTL¿äûÀÌ ¹Þ¾ÆÁ³´ÂÁö °áÁ¤ÇÏ°í ±×¿äûÀ» ÀûÀýÈ÷ ó¸®ÇÑ´Ù.
ÇöÀç IOCTL¿äûÀ» ¿Ï·áÇÒ¶§, ÀåÄ¡ ÄÁÃß·² ·çƾÀº IoCompleteRequestÇÔ¼ö¸¦ È£ÃâÇÏ°í ¿¬»ê »óŸ¦ ³Ñ±ä´Ù. ÀÌ »óÅ´ ¿äûÀ» ¸¸µç ¾îÇø®ÄÉÀ̼ÇÀ̳ª »óÀ§ µå¶óÀ̹ö¿¡°Ô·Î ¸®ÅϵȴÙ.
´ÙÀ½Àº ÇÊÅÍ ÈÅ µå¶óÀ̹öÀÇ ÀåÄ¡ ÄÁÃß·² ·çƾÀÌ Ã³¸®ÇÒ¼öÀÖ´Â ÀϹÝÀûÀÎ IOCTLµéÀÌ´Ù.:
- Set-Hook IOCTL - ÇÊÅÍ ÈÅÀ» µî·ÏÇÑ´Ù.
- Clear-Hook IOCTL - ÀÌÀü¿¡ µî·ÏµÈ ÇÊÅÍ ÈÅÀ» Ŭ¸®¾î ÇÑ´Ù.
|