TdiDispatchFastDeviceControl
BOOLEAN
TdiDispatchFastDeviceControl (
IN STRUCT FILE_OBJECT *FileObject,
IN BOOLEAN Wait,
IN PVOID InputBuffer,
IN ULONG InputBufferLength,
IN OUT PVOID OutputBuffer,
IN ULONG OutputBufferLength,
IN ULONG IoControlCode,
OUT PIO_STATUS_BLOCK IoStatus
);
TdiDispatchFastDeviceControl ÇÔ¼ö´Â Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼ ÀÌ¹Ì ³»ºÎÀûÀ¸·Î ¹öÆÛÈµÈ µ¥ÀÌŸ¸¦ ¸®ÅÏÇÏ´Â ¼±ÅÃÀûÀÎ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö ÇÔ¼öÀÌ´Ù.
¸Å°³º¯¼ö
- FileObject
- ¿¸° ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù.
- Wait
- µå¶óÀ̹ö°¡ TdiDispatchFastDeviceControl ÇÔ¼ö È£ÃâÀÇ ÄÁÅØ½ºÆ®¿¡¼ ±â´Ù¸± ¼ö ÀÖ´Ù¸é TRUE¸¦ ¼¼úÇÑ´Ù.
- InputBuffer
- ÁÖ¾îÁø IoControlCode¿¡ ÀÇÇØ¼ ¿ä±¸µÇ´Â È£ÃâÀÚ Á¦°ø Á¤º¸¸¦ Æ÷ÇÔÇÏ´Â ÀÔ·Â ¹öÆÛ¸¦ ¼±ÅÃÀûÀ¸·Î °¡¸®Å²´Ù.
- InputBufferLength
- ÀÔ·Â ¹öÆÛÀÇ ¹ÙÀÌÆ® »çÀÌÁ ¼¼úÇÑ´Ù.
- OutputBuffer
- Æ®·£½ºÆ÷Æ®°¡ ¸®Äù½ºÆ®µÈ µ¥ÀÌŸ¸¦ ¸®ÅÏÇÏ´Â Ãâ·Â ¹öÆÛ¸¦ ¼±ÅÃÀûÀ¸·Î °¡¸®Å²´Ù.
- OutputBufferLength
- Ãâ·Â ¹öÆÛÀÇ ¹ÙÀÌÆ® »çÀÌÁ ¼¼úÇÑ´Ù.
- IoControlCode
- ¸®Äù½ºÆ®µÈ ¿¬»ê¿¡ ´ëÇÑ IOCTL_TDI_XXX Äڵ带 ¼¼úÇÑ´Ù. ÀÌ °ªÀº ntddtdi.h¿¡ Á¤ÀÇµÈ ÄÚµåÁß¿¡ Çϳª¿©¾ßÇÑ´Ù.
À¯È¿ÇÑ IOCTL_TDI_XXX ÄÚµåÀÇ ¸ðÀ½Àº ½Å¼ÓÇÑ I/O Áö¿ø¿¡ ÀÇÁ¸ÇÑ´Ù. ±×·¸´Ù ÇÏ´õ¶óµµ °³°³ÀÇ Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼ Á¦°øµÇ°í ±× Æ®·£½ºÆ÷Æ®´Â ÀÚ½ÅÀÇ ³»ºÎ ¹öÆÛ¿¡ À¯ÁöÇÏ´Â °Í¿¡ ÀÇÁ¸ÇÑ´Ù. ÀϹÝÀûÀ¸·Î Æ®·£½ºÆ÷Æ®´Â ±â´ëµÇ´Â IOCTL_TDI_RECEIVE ¸®Äù½ºÆ®¸¦ ¸¸Á·½ÃŰ´Â, °¡´ÉÇÏ´Ù¸é IOCTL_TDI_QUERY_INFORMATION ¸®Äù½ºÆ®¸¦ ¸¸Á·½Ã۱â À§Çؼ »ç¿ëµÇ´Â µ¥ÀÌŸ¸¦ ¹öÆÛÈÇÏ´Â °Ô ³´´Ù.
ÇϺÎÀÇ Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿Í Åë½ÅÇϱâ À§Çؼ À©µµ¿ìÁî ¼ÒÄÏ¿¡ ´ëÇÑ Áö¿øÀ» Á¦°øÇÏ´Â afd.sys µå¶óÀ̹ö´Â ¶ÇÇÑ ¸®½ÃºêµÈ µ¥ÀÌŸ¸¦ À§Çؼ ½Å¼ÓÇÑ °æ·Î¸¦ Á¦°øÇÏÁö ¾Ê´Â ½Ã½ºÅÛ Æ®·£½ºÆ÷Æ®¿¡ ´ëÇØ¼ ¾ÕÀ¸·Î ÀÐÀ» ½Å¼ÓÇÑ I/O Áö¿øÀ» Á¦°øÇÑ´Ù.
- IoStatus
- TdiDispatchFastDeviceControl ÇÔ¼ö°¡ IO_STATUS_BLOCK ±¸Á¶Ã¼·Î Æ÷¸ËµÇ´Â ¿Ï·á »óŸ¦ ¸®ÅÏÇϴ ȣÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù. TdiDispatchFastDeviceControl ÇÔ¼ö´Â Status¿Í Information ¸â¹ö¸¦ ÁÖ¾îÁø IoControlCode¿¡ ´ëÇØ¼ ÀûÀýÇÏ°Ô Ã¤¿î´Ù.
¸®Åϰª
TdiDispatchFastDeviceControl ÇÔ¼ö°¡ ÅëÁ¦¸¦ ¸®ÅÏÇϱâ Àü¿¡ Ä¿³Î ¸ðµå Ŭ¶óÀ̾ðÆ®ÀÇ ¸®Äù½ºÆ®¸¦ ¸¸Á·Çϰųª ¿Ï¼ºÇÑ´Ù¸é TRUE¸¦ ¸®ÅÏÇÑ´Ù.
ÁÖ¼®
½Å¼ÓÇÑ I/O ¸®Äù½ºÆ®°¡ ÁغñµÉ ¶§ Ŭ¶óÀÌ¾ðÆ®´Â IRP¸¦ ÇÒ´çÇϰųª »óÀ§ÀÇ ³×Æ®¿÷ ÃþÀ¸·ÎºÎÅÍ Àü´ÞµÇ´Â IRP¸¦ »ç¿ëÇÑ´Ù.
I/O ¸Å´ÏÀú°¡ TdiDispatchFastDeviceControl ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ÁÖ¾îÁø OutputBuffer´Â º¸Åë Ŭ¶óÀÌ¾ðÆ® Á¦°ø IRP¾È¿¡ Irp->MdlAddress¿¡ ¹öÆÛ¿Í ´ëÀÀÇÑ´Ù. InputBuffer´Â IoControlCode¿¡ ÀÇÁ¸ÇÏ´Â ¸®Äù½ºÆ®¸¦ À§Çؼ Ŭ¶óÀÌ¾ðÆ® Á¦°ø Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù. TdiBuildInternalDeviceControlIrp ÇÔ¼ö¸¦ °¡Áö°í ¸®½ºÆ®µÈ TDI_XXX ¸¶ÀÌ³Ê ÇÔ¼öÄڵ忡 ¹Ý´ëÇÏ¿© ÀÌ ¸®Äù½ºÆ®´Â ½Ã½ºÅÛ Á¤ÀÇ »ç¿ëÀÚ ¸ðµå IOCTLÀÌ ¸®Äù½ºÆ®¸¦ È®ÀÎÇÏ´Â ´Ù¸¥ Ä¿³Î ¸®Äù½ºÆ®¿Í´Â ´Ù¸£´Ù.
¿¹¸¦µé¾î IOCTL_TDI_SEND¸¦ À§Çؼ InputBuffer´Â Ŭ¶óÀÌ¾ðÆ® Á¦°ø TDI_REQUEST_SEND ±¸Á¶Ã¼¸¦ Æ÷ÇÔÇϰí OutputBuffer´Â ³×Æ®¿÷ »óÀ¸·Î º¸³»Áö´Â ½ÇÁ¦ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÑ´Ù. IOCTL_TDI_RECEIVE¸¦ À§Çؼ InputBuffer´Â TDI_REQUEST_RECEIVE ±¸Á¶Ã¼¸¦ Æ÷ÇÔÇÏ°í Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö´Â OutputBuffer¿¡ ¸®½ÃºêµÈ µ¥ÀÌŸ¸¦ º¹»çÇÑ´Ù.
ntddtdi.h¿¡ °¢°¢ÀÇ IOCTL_TDI_XXX ÄÚµåÀÇ Á¤ÀÇ´Â ¹öÆÛ°¡ ¾î¶»°Ô ¼³Á¤µÇ¾î¾ß ÇÏ´ÂÁö¸¦ °áÁ¤ÇÑ´Ù. IOCTL_XXX Äڵ带 ¾î¶»°Ô ÇØ¼®ÇÏ´ÂÁö¿¡ ´ëÇÑ ¼³¸íÀº Ä¿³Î ¸ðµå µå¶óÀ̹öÀÇ ·¹ÆÛ·±½º¸£ ºÁ¶ó.
¹öÆÛÀÇ ¸Å°³º¯¼ö°¡ Æ®·£½ºÆ÷Æ®¸¦ À§Çؼ ¼³Á¤µÆÀ» ¶§ Æ®·£½ºÆ÷Æ®°¡ ÀÌ ·çƾÀ» ÀͽºÆ÷Æ®ÇÑ´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â TdiDispatchFastDeviceControl ÇÔ¼ö·ÎÀÇ ¸®Äù½ºÆ®¸¦ Àü´ÞÇϱâ À§Çؼ IoCallDriver ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ ½Å¼ÓÇÑ I/O ¸®Äù½ºÆ®¸¦ Áï½Ã ¿Ï·áÇÒ ¼ö ¾ø´Ù¸é TdiDispatchFastDeviceControl ÇÔ¼ö´Â FALSE¸¦ ¸®ÅÏÇϰí I/O ¸Å´ÏÀú´Â ÁÖ¾îÁø ¸®Äù½ºÆ®¸¦ IRP_MJ_DEVICE_CONTROL IRP¾ÈÀ¸·Î ¸®ÆÐŰÁöÇÏ°í Æ®·£½ºÆ÷Æ® µå¶óÀ̹öÀÇ TdiDispatchDeviceControl ·çƾÀ¸·Î IRP¸¦ Á¦ÃâÇÑ´Ù. ¹Ý¸é¿¡ TdiDispatchDeviceControl ÇÔ¼ö´Â °¡´ÉÇÏ´Ù¸é ¸®Äù½ºÆ®¸¦ ó¸®Çϱâ À§Çؼ ³»ºÎÀÇ µå¶óÀ̹ö ÇÔ¼ö¸¦ È£ÃâÇÏ¹Ç·Î½á ¸®Äù½ºÆ® ÀÚü¸¦ ¸¸Á·ÇÑ´Ù. ¾Æ´Ï¸é ¸®Äù½ºÆ®¸¦ ½ÇÆÐÇÑ´Ù. TdiDispatchDeviceControl ÇÔ¼ö°¡ TRUE¸¦ ¸®ÅÏÇÒ ¶§ Æ®·£½ºÆ÷Æ®´Â ¿ø·¡ ¹öÆÛÀÇ ¼ÒÀ¯±ÇÀ» Ŭ¶óÀÌ¾ðÆ®·Î ¾çµµÇÑ´Ù.
ÃʱâȽÿ¡ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö´Â ÀÔ·Â µå¶óÀ̹ö °´Ã¼¿¡ FastIoDispatch Çʵ带 µå¶óÀ̹ö ÇÒ´ç FAST_IO_DISPATCH ±¸Á¶Ã¼ÀÇ ÁÖ¼Ò·Î ¼³Á¤ÇÏ¹Ç·Î½á ½Å¼ÓÇÑ I/O °æ·Î¸¦ Àο¡À̺íÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â SizeOfFastIoDispatch ¸â¹ö¸¦ ä¿ì°í FastIoDeviceControlÀ» Æ®·£½ºÆ÷Æ®ÀÇ TdiDispatchFastDeviceControl ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®·Î ¼³Á¤ÇؾßÇÑ´Ù; FAST_IO_DISPATCH ±¸Á¶Ã¼ÀÇ ´Ù¸¥ ¸ðµç ¸â¹ö´Â NULL·Î ¼³Á¤µÇ¾î¾ßÇÑ´Ù. ÀÌ ±¸Á¶Ã¼¿Í µå¶óÀ̹ö °´Ã¼¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â Ä¿³Î ¸ðµå µå¶óÀ̹ö ·¹ÆÛ·±½º¸¦ ºÁ¶ó.
±âº»ÀûÀ¸·Î TdiDispatchFastDeviceControl ÇÔ¼ö´Â IRQL PASSIVE_LEVEL¿¡¼ ½ÇÇàµÈ´Ù.
|