TDI_SET_INFORMATION
Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®°¡ TDI_SET_INFORMATION ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö·Î ÇÏ¿©±Ý ƯÁ¤ ÁÖ¼Ò, ¿¬°á, ÅëÁ¦ ä³Î¿¡¼ Ŭ¶óÀÌ¾ðÆ® Æ¯Á¤ ŸÀÔÀÇ Á¤º¸¸¦ ¼³Á¤Çϵµ·Ï ¿ä±¸ÇÑ´Ù.
IRP
IrpSp·Î½á ´ÙÀ½ÀÇ ¸®½ºÆ®¿¡ º¸¿©Áö´Â IRP¾È¿¡ ÀÚ½ÅÀÇ I/O ½ºÅà ·ÎÄÉÀ̼ǿ¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¾ò±â À§Çؼ ÁÖ¾îÁø Irp¸¦ °¡Áö°í Æ®·£½ºÆ÷Æ®´Â IoGetCurrentIrpStackLocation ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. IRP¿¡ ´ëÇÑ Æ÷ÀÎÅÍ´Â Irp·Î½á ´ÙÀ½ÀÇ ¸®½ºÆ®¿¡ º¸¿©Áø´Ù. ÀÌ ¸®Äù½ºÆ®¿Í ¿¬°üµÈ IRP ¸â¹ö´Â ´ÙÀ½°ú °°´Ù:
- Irp->IoStatus.Status
- ¼Â Á¤º¸ ¸®Äù½ºÆ®ÀÇ ¸¶Áö¸· »óŸ¦ ¼¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â ´ÙÀ½Áß Çϳª·Î IRP¸¦ ¿Ï·áÇϱâ Àü¿¡ ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù:
STATUS_SUCCESS
STATUS_INVALID_ADDRESS_COMPONENT
STATUS_INVALID_CONNECTION
STATUS_INVALID_DEVICE_REQUEST
STATUS_INVALID_PARAMETER
STATUS_INSUFFICIENT_RESOURCES
STATUS_NOT_IMPLEMENTED
- Irp->IoStatus.Information
- µå¶óÀ̹ö°¡ Irp->MdlAddress¿¡ ¸ÊµÈ ¹öÆÛ¿¡¼ »ç¿ëÇÑ Å¬¶óÀÌ¾ðÆ® Á¦°ø µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼¼úÇÑ´Ù.
- IrpSp->MajorFunction
- IRP_MJ_INTERNAL_DEVICE_CONTROLÀ» ¼¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â TDI_XXX¸¸À» ´Ù·ç´Â TdiDispatchInternalDeviceControl ·çƾÀ» ÀͽºÆ÷Æ®ÇÑ´Ù¸é ÀÌ ¸â¹ö¸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù.
- IrpSp->MinorFunction
- TDI_SET_INFORMATIONÀ» ¼¼úÇÑ´Ù.
- IrpSp->FileObject
- ·ÎÄÃÀÇ ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ¿¸° ÆÄÀÏ °´Ã¼¸¦ ¼¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â ÀÌ ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³Î¿¡ ´ëÇØ¼ À¯ÁöÇÏ´Â »óŸ¦ Á¢±ÙÇϱâ À§Çؼ FsContext¿Í °¡´ÉÇÏ´Ù¸é FsContext2 Çʵ带 »ç¿ëÇÑ´Ù.
- IrpSp->Parameters
- ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǴ TDI_REQUEST_KERNEL_SET_INFORMATION ±¸Á¶Ã¼¸¦ °¡¸®Å²´Ù:
struct _TDI_REQUEST_KERNEL_SET_INFO {
LONG SetType;
PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
} TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION;
Æ®·£½ºÆ÷Æ®´Â´ÙÀ½°ú °°ÀÌ ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹ö¸¦ »ç¿ëÇÑ´Ù:
- SetType
- ¼öÇàÇÏ´Â ¼Â ¿¬»êÀÇ Å¸ÀÔÀ» ¼¼úÇÑ´Ù(ÁÖ¼®À» ºÁ¶ó).
- RequestConnectionInformation
- ÁÖ¾îÁø ÆÄÀÏ °´Ã¼°¡ ¿¬°áÀ» ±¸ÇöÇÑ´Ù¸é ÀÔ·Â ¿¬°á Á¤º¸¸¦ Æ÷ÇÔÇÏ´Â TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼¸¦ °¡¸®Å²´Ù. ±×·¸Áö ¾ÊÀ¸¸é ÀÌ ¸â¹ö´Â NULLÀÌ´Ù.
- Irp->MdlAddress
- ¼³Á¤µÉ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇϴ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¸¦ ¸ÅÇÎÇÏ´Â MDLÀ» °¡¸®Å²´Ù. ÀÌ ¹öÆÛÀÇ Æ÷¸Ë°ú ³»¿ëÀº SetTypeÀÇ °ª¿¡ ÀÇÁ¸ÇÑ´Ù.
ÁÖ¼®
Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ IRP¸¦ ¼³Á¤Çϱâ À§Çؼ TdiBuildSetInformation ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ Ŭ¶óÀÌ¾ðÆ®´Â ÇϰíÀÚÇÏ´Â ¼Â ¿¬»êÀÇ Å¸ÀÔÀ» ¼¼úÇØ¾ßÇϰí ÀûÀýÇÑ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ Á¦°øÇؾßÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â SetType ¸â¹ö¾È¿¡ IrpSp->Parameters¿¡¼ ÀÌ Á¤º¸¸¦ ã´Â´Ù. ÀԷ¿¡¼ SetTypeÀº ´ÙÀ½ÀÇ ½Ã½ºÅÛ Á¤ÀÇ TDI_QUERY_XXX ¼ºê¼ÂÀÏ ¼ö ÀÖ´Ù:
- TDI_QUERY_ADDRESS_INFO
- ÁÖ¼Ò¿¡ ´ëÇÑ Á¤º¸¸¦ ¼³Á¤Çضó. MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ´Â TDI_ADDRESS_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÑ´Ù.
- TDI_QUERY_CONNECTION_INFO
- ¿¬°á ¿£µåÆ÷ÀÎÆ®¿¡ ´ëÇØ¼ Á¤º¸¸¦ ¼³Á¤Çضó. MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ´Â TDI_CONNECTION_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÑ´Ù.
- TDI_QUERY_PROVIDER_INFO
- ÅëÁ¦ ä³Î¿¡ ´ëÇÑ Á¤º¸¸¦ ¼³Á¤Çضó. MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ´Â TDI_PROVIDER_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÑ´Ù.
- TDI_QUERY_PROVIDER_STATISTICS
- ÅëÁ¦ ä³Î¿¡ ´ëÇÑ Åë°èÁ¤º¸¸¦ ¼³Á¤Çضó. MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ´Â TDI_PROVIDER_STATISTICS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÑ´Ù.
Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇØ¼ Ãß°¡ÀûÀÎ ¼Â ¿¬»êÀ» Áö¿øÇϱâ À§Çؼ µå¶óÀ̹ö °³¹ßÀÚÀÇ °áÁ¤¿¡¼ ÀÌ ÀÎÅÍÆäÀ̽º¸¦ È®ÀåÇÒ ¼ö ÀÖ´Ù. ±×·¯ÇÑ Æ®·£½ºÆ÷Æ®´Â °¡Àå Áß¿äÇÑ ºñÆ®°¡ ¼³Á¤µÈ TDI_QUERY_XXX Äڵ带 Á¤ÀÇÇØ¾ßÇÑ´Ù.
Æ®·£½ºÆ÷Æ®´Â ÆÄÀÏ °´Ã¼¾È¿¡ ¸í½ÃµÈ SetTypeÀ» ºÎÀûÀýÇÏ°Ô ÇÏ¹Ç·Î½á ¼Â Á¤º¸ ¸®Äù½ºÆ®¸¦ ½ÇÆÐÇØ¾ßÇÑ´Ù.
¶ÇÇÑ Æ®·£½ºÆ÷Æ®´Â µå¶óÀ̹ö °áÁ¤ Á¦ÇÑÀ» ÃʰúÇÑ °ªÀ» Á¦°øÇϴ Ŭ¶óÀÌ¾ðÆ®¸¦ À§Çؼ ¼Â Á¤º¸ ¸®Äù½ºÆ®¸¦ ½ÇÆÐÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î ´ëºÎºÐÀÇ Æ®·£½ºÆ÷Æ®´Â ±×µéÀÇ Å¬¶óÀÌ¾ðÆ®¿¡°Ô TDI_QUERY_PROVIDER_INFO ŸÀÔÀÇ ¼Â Á¤º¸ ¸®Äù½ºÆ®¸¦ °¡Áö°í MaxDatagramSize ȤÀº MaxSendSize¸¦ ¸®¼ÂÇϵµ·Ï Çã¶ôÇÏÁö ¾Ê´Â´Ù.
TdiBuildSetInformation ÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ IRP¸¦ ä¿ì±â À§Çؼ »ç¿ëÇÏ´Â ¸ÅÅ©·ÎÀÌ´Ù.
|