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¸¦ ä¿ì±â À§Çؼ­ »ç¿ëÇÏ´Â ¸ÅÅ©·ÎÀÌ´Ù.