IOCTL_PF_SET_EXTENSION_POINTER

ÇÊÅÍ-ÈÅ µå¶óÀ̹ö´Â ÇÊÅÍ-ÈÅ µå¶óÀ̹ö°¡ IP ÇÊÅÍ µå¶óÀ̹ö¿¡ Á¦ÃâÇÏ´Â IRP¸¦ ¼³Á¤Çϱâ À§Çؼ­ ÀÌ IOCTLÀ» »ç¿ëÇÑ´Ù. ÇÊÅÍ-ÈÅ µå¶óÀ̹ö´Â IRP¸¦ ¼³Á¤Çϱâ À§Çؼ­ IoBuildDeviceIoControlRequest ÇÔ¼ö¿¡ ÀÖ´Â ¿¬°üµÈ ÆÄ¶ó¹ÌÅ͵é°ú ÇÔ²² IOCTLÀ» Åë°ú½ÃŲ´Ù.

¿¬»ê

IOCTL_PF_SET_EXTENSION_POINTER ´Â ¼ö½ÅµÇ°í Àü¼ÛµÈ ¸ðµç IP ÆÐŶ¿¡ ´ëÇÑ ±×µé ÇÊÅÍ ÈÅ ÄݹéµéÀ» È£ÃâÇϱâÀ§Çؼ­ IP ÇÊÅÍ µå¶óÀ̹ö¿¡°Ô ¾Ë¸®±â À§Çؼ­ IP ÇÊÅÍ µå¶óÀ̹ö¿¡ ´ëÇÑ ÇÊÅÍ ÈÅ Äݹé ÇÔ¼öµéÀ» µî·ÏÇÑ´Ù.(??) ¶ÇÇÑ, IOCTL_PF_SET_EXTENSION_POINTER ´Â IP ÇÊÅÍ µå¶óÀ̹ö·ÎºÎÅÍ ÇÊÅÍ ÈÅ Äݹé ÇÔ¼öµéÀ» Áö¿î´Ù.(clear)

¸Å°³º¯¼ö

IoControlCode
IOCTL_PF_SET_EXTENSION_POINTER.

DeviceObject
IP ÇÊÅÍ µå¶óÀ̹ö¸¦ À§ÇÑ ÀåÄ¡ ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ Æ÷ÀÎÅÍ.

InputBuffer
PF_SET_EXTENSION_HOOK_INFO ±¸Á¶Ã¼¸¦ Æ÷ÇÔÇÏ´Â À§Ä¡¿¡ ´ëÇÑ Æ÷ÀÎÅÍ. ÇÊÅÍ ÈÅ Äݹé ÇÔ¼ö¸£ µî·ÏÇϱâ À§Çؼ­, ÀÌ ±¸Á¶Ã¼´Â ÇÊÅÍ ÈÅ Äݹé ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ º¸À¯ÇÑ´Ù.(hold) ÇÊÅÍ ÈÅ Äݹé ÇÔ¼ö¸¦ Áö¿ì±â À§Çؼ­, ÀÌ ±¸Á¶Ã¼´Â NULL °ªÀ» º¸À¯ÇÑ´Ù.

InputBufferLength
PF_SET_EXTENSION_HOOK_INFO ±¸Á¶Ã¼ÀÇ ¹ÙÀÌÆ® Å©±â.

OutputBuffer
NULL.

OutputBufferLength
Zero.

InternalDeviceIoControl
FALSE.

Event
NULL.

IoStatusBlock
I/O »óÅ ºí·°(status block)À» ¼ö½ÅÇϱâ À§ÇÑ À§Ä¡¿¡ ´ëÇÑ Æ÷ÀÎÅÍ. I/O »óÅ´ IP ÇÊÅÍ µå¶óÀ̹ö°¡ I/O ¿äûÀ» ¿Ï¼ºÇÑ ÈÄ¿¡ ¼³Á¤ÇÑ´Ù.

ÁÖ¼®

IRP¸¦ ¼³Á¤Çϱâ À§Çؼ­, ÇÊÅÍ-ÈÅ µå¶óÀ̹ö´Â IoBuildDeviceIoControlRequest ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ È£Ãâ¿¡¼­, ÇÊÅÍ-ÈÅ µå¶óÀ̹ö´Â IOCTL_PF_SET_EXTENSION_POINTER ¿äûÀ» ÁöÁ¤ÇÏ´Â ÆÄ¶ó¹ÌÅ͸¦ Åë°ú½ÃŲ´Ù.; IP ÇÊÅÍ µå¶óÀ̹ö¿¡ ´ëÇÑ ÀåÄ¡ ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ Æ÷ÀÎÅÍ; ±×¸®°í PF_SET_EXTENSION_HOOK_INFO ±¸Á¶Ã¼¸¦ Æ÷ÇÔÇÏ´Â ÀÔ·Â ¹öÆÛ. IP ÇÊÅÍ µå¶óÀ̹ö¿¡ ´ëÇÑ ÀåÄ¡ ¿ÀºêÁ§Æ®¸¦ ȸ¼öÇϱâ À§Çؼ­, ÇÊÅÍ-ÈÅ µå¶óÀ̹ö´Â IoGetDeviceObjectPointer ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ È£Ãâ¿¡¼­, ÇÊÅÍ-ÈÅ µå¶óÀ̹ö´Â IP ÇÊÅÍ µå¶óÀ̹ö¿¡ ´ëÇÑ ÀåÄ¡ ¿ÀºêÁ§Æ®ÀÇ À̸§À» ÁöÁ¤ÇÏ´Â ÆÄ¶ó¹ÌÅ͵éÀ» SYNCHRONIZE, GENERIC_READ, ±×¸®°í GENERIC_WRITE ¿Í ÇÔ²² Åë°ú½ÃŲ´Ù. ÀÌ °ªµçÀº Á¦°øµÈ µå¶óÀ̹ö¿¡°Ô synchronous, read, ±×¸®°í write Á¢±ÙÀ» ÁöÁ¤ÇÑ´Ù. IoGetDeviceObjectPointer È£Ãâ¿¡¼­, ÇÊÅÍ-ÈÅ µå¶óÀ̹ö´Â ¶ÇÇÑ IP ÇÊÅÍ µå¶óÀ̹ö¿¡ ´ëÇÑ ¸®ÅÏµÈ ÆÄÀϰú ÀåÄ¡ ¿ÀºêÁ§Æ®µéÀ» º¸À¯Çϱâ À§Çؼ­ ¹öÆÛµé¿¡ ´ëÇÑ Æ÷ÀÎÅ͵éÀ» Åë°ú ½ÃŲ´Ù. IP ÇÊÅÍ µå¶óÀ̹ö¿¡ ´ëÇÑ ÀåÄ¡ ¿ÀºêÁ§Æ®ÀÇ À̸§À» Æ÷ÇÔÇÏ´Â À¯´ÏÄÚµå ½ºÆ®¸µÀº \\Device\IpfilterdriverÀÌ´Ù.

IRP¸¦ Á¦ÃâÇϱâ À§Çؼ­, ÇÊÅÍ-ÈÅ µå¶óÀ̹ö´Â IoCallDriver ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

PF_SET_EXTENSION_HOOK_INFO ±¸Á¶Ã¼´Â ¾Æ·¡ÀÇ ¼½¼Ç¿¡ Á¤ÀǵȴÙ.

PF_SET_EXTENSION_HOOK_INFO

PF_SET_EXTENSION_HOOK_INFO ±¸Á¶Ã¼´Â ÇÊÅÍ-ÈÅ Äݹé ÇÔ¼ö¸¦ ¼³¸íÇÏ´Â Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù.

typedef struct _PF_SET_EXTENSION_HOOK_INFO {

    PacketFilterExtensionPtr  ExtensionPointer; 

} PF_SET_EXTENSION_HOOK_INFO, *PPF_SET_EXTENSION_HOOK_INFO;

ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹ö´Â ¾Æ·¡ÀÇ Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù:

ExtensionPointer
IP ÇÊÅÍ µå¶óÀ̹ö¸¦ °¡Áö°í ÇÔ¼ö¸¦ µî·ÏÇϱâ À§Çؼ­ ÇÊÅÍ ÈÅ Äݹé ÇÔ¼ö¸¦ °¡¸®Å°´Â PacketFilterExtensionPtr µ¥ÀÌÅÍ Å¸ÀÔÀ» ÁöÁ¤ÇÑ´Ù. ¸¸¾à ExtensionPointer °¡ NULL °ªÀ̸é, ¾Õ¼­ µî·ÏµÈ Çϼö´Â IP ÇÊÅÍ µå¶óÀ̹ö·ÎºÎÅÍ Áö¿öÁø´Ù.