TDI_QUERY_INFORMATION

Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â TDI_QUERY_INFORMATION ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ ƯÁ¤ ¿¬°á¿¡¼­ÀÇ I/O¿¡ ´ëÇÑ ºê·Îµåij½ºÆ® ÁÖ¼Ò, Æ®·£½ºÆ÷Æ®ÀÇ ´É·Â, ȤÀº ÇöÀç Åë°è¿Í °°Àº Ŭ¶óÀÌ¾ðÆ® Æ¯Á¤ ŸÀÔÀÇ Á¤º¸¸¦ ¸®ÅÏÇϵµ·Ï ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡°Ô ¿ä±¸ÇÑ´Ù.

IRP

    IrpSp·Î½á ´ÙÀ½ÀÇ ¸®½ºÆ®¿¡ º¸¿©Áö´Â IRP¾È¿¡ ÀÚ½ÅÀÇ I/O ½ºÅà ·ÎÄÉÀ̼ǿ¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¾ò±â À§Çؼ­ ÁÖ¾îÁø Irp¸¦ °¡Áö°í Æ®·£½ºÆ÷Æ®´Â IoGetCurrentIrpStackLocation ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. IRP¿¡ ´ëÇÑ Æ÷ÀÎÅÍ´Â Irp·Î½á ´ÙÀ½ÀÇ ¸®½ºÆ®¿¡ º¸¿©Áø´Ù. ÀÌ ¸®Äù½ºÆ®¿Í ¿¬°üµÈ IRP ¸â¹ö´Â´ÙÀ½°ú °°´Ù:

    Irp->IoStatus.Status
    Äõ¸® Á¤º¸ ¸®Äù½ºÆ®ÀÇ ¸¶Áö¸· »óŸ¦ ¼­¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â IRP¸¦ ¿Ï·áÇϱâ Àü¿¡ °¡´ÉÇÏ´Ù¸é ´ÙÀ½Áß ÇϳªÀÇ °ªÀ¸·Î ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù:

    STATUS_SUCCESS
    STATUS_BUFFER_OVERFLOW
    STATUS_INSUFFICIENT_RESOURCES
    STATUS_INVALID_CONNECTION
    STATUS_INVALID_DEVICE_REQUEST
    STATUS_NOT_IMPLEMENTED

    Irp->IoStatus.Information
    Æ®·£½ºÆ÷Æ®°¡ Ŭ¶óÀÌ¾ðÆ®·Î ¸®ÅÏÇÏ´Â Á¤º¸ÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼­¼úÇÑ´Ù.

    IrpSp->MajorFunction
    IRP_MJ_INTERNAL_DEVICE_CONTROL¸¦ ¼­¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ TDI_XXX ¸®Äù½ºÆ®¸¸À» ´Ù·ç´Â TdiDispatchInternalDeviceControl ÇÔ¼ö¸¦ ÀͽºÆ÷Æ®ÇÑ´Ù¸é ÀÌ ¸â¹ö¸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù.

    IrpSp->MinorFunction
    TDI_QUERY_INFORMATIONÀ» ¼­¼úÇÑ´Ù.

    IrpSp->FileObject
    ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ȤÀº ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ¿­¸° ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù. Æ®·£½ºÆ÷Æ®´Â ÀÌ ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ȤÀº ÅëÁ¦ ä³Î¿¡ ´ëÇØ¼­ À¯ÁöÇÏ´Â »óŸ¦ Á¢±ÙÇϱâ À§Çؼ­ FsContext¿Í °¡´ÉÇÏ´Ù¸é FsContext2 Çʵ带 »ç¿ëÇÑ´Ù.

    IrpSp->Parameters
    ´ÙÀ½°ú °°ÀÌ Á¤ÀÇµÈ TDI_REQUEST_KERNEL_QUERY_INFORMATION ±¸µµÃ¼¸¦ °¡¸®Å²´Ù:
    
    struct _TDI_REQUEST_KERNEL_QUERY_INFO {
    
        LONG QueryType;
    
        PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
    
    } TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION;
    
    
    Æ®·£½ºÆ÷Æ®´Â RequestConnectionInformation ¸â¹ö°¡ ÀüÇüÀûÀ¸·Î NULLÀ̱⠶§¹®¿¡ ÀÌ ¸â¹ö¸¦ ¹«½ÃÇÒ ¼ö ÀÖµû. NetBIOS Æ®·£½ºÆ÷Æ®´Â ³ªÁß¿¡ ¼­¼ú(ÁÖ¼®À» ºÁ¶ó)µÇµíÀÌ ÀÌ ¸â¹ö¸¦ ¿ä±¸ÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®°¡ ¸®Äù½ºÆ®ÇÑ Á¤º¸°¡ ¹«¾ùÀÎÁö¸¦ °áÁ¤Çϱâ À§Çؼ­ QueryType ¸â¹ö¸¦ üũÇÑ´Ù. ±×¸®°í ¸®ÅϵǴ Á¤º¸ÀÇ Æ÷¸ËÀ» °áÁ¤ÇÑ´Ù. ¶§¶§·Î Irp->MdlAddress¿¡ ¸ÊµÈ ¹öÆÛÀÇ Å¬¶óÀÌ¾ðÆ® Á¦°ø ³»¿ëÀ» °Ë»çÇϱ⵵ ÇÑ´Ù.

    ¸ðµç TDI Æ®·£½ºÆ÷Æ®¿¡ ´ëÇØ¼­ QueryTypeÀº ´ÙÀ½ ½Ã½ºÅÛ Á¤ÀÇ °ªÁß¿¡ Çϳª·Î ¼³Á¤µÉ ¼ö ÀÖ´Ù:

    TDI_QUERY_ADDRESS_INFO
    MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_ADDRESS_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ƯÁ¤ ·ÎÄà ÁÖ¼Ò¿¡ ´ëÇØ¼­ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
    IrpSp->FileObject´Â Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ ÁÖ¼Ò¿Í ÀÌ¹Ì ¿¬°üµÈ ¿¬°á ¿£µåÆ÷ÀÎÆ®³ª ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.

    TDI_QUERY_CONNECTION_INFO
    MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_CONNECTION_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ƯÁ¤ ¿¬°á¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.

    IrpSp->FileObject´Â Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ ¿¬°áÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.

    TDI_QUERY_BROADCAST_ADDRESS
    MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TRANSPORT_ADDRESS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ºê·Îµåij½ºÆ® ÁÖ¼Ò¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.

    IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.

    TDI_QUERY_NETWORK_ADDRESS
    MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TRANSPORT_ADDRESS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ·ÎÄà ÁÖ¼Ò¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.

    IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.

    TDI_QUERY_DATA_LINK_ADDRESS
    MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TRANSPORT_ADDRESS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ µ¥ÀÌŸ¸µÅ© ÁÖ¼Ò¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.

    IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.

    TDI_QUERY_PROVIDER_INFO ȤÀº TDI_QUERY_PROVIDER_INFORMATION
    MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_PROVIDER_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ÀÚ½ÅÀÇ ´É·Â¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.

    IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.

    TDI_QUERY_PROVIDER_STATISTICS
    MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_PROVIDER_STATISTICS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ÀÚ¿ø»ç¿ë¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.

    IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.

    TDI_QUERY_DATAGRAM_INFO
    MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_DATAGRAM_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ »çÀÌÁîÀÇ Á¦ÇѰú µ¥ÀÌŸ±×·¥ÀÇ ¼ö¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.

    IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù. ¶ÇÇÑ Æ®·£½ºÆ÷Æ®´Â Æ®·¡½ºÆ÷Æ® °³¹ßÀÚÀÇ °áÁ¤¿¡¼­ ¿­¸° Æ®·£½ºÆ÷Æ® ÁÖ¼Ò »ó¿¡¼­ ÀÌ Äõ¸®¸¦ Áö¿øÇÒ ¼ö ÀÖ´Ù.

    TDI_QUERY_MAX_DATAGRAM_INFO
    MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_MAX_DATAGRAM_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ µ¥ÀÌŸ±×·¥ »çÀÌÁîÀÇ Á¦ÇÑ¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·¡½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.

    IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù. ¶ÇÇÑ Æ®·£½ºÆ÷Æ®´Â Æ®·¡½ºÆ÷Æ® °³¹ßÀÚÀÇ °áÁ¤¿¡¼­ ¿­¸° Æ®·£½ºÆ÷Æ® ÁÖ¼Ò »ó¿¡¼­ ÀÌ Äõ¸®¸¦ Áö¿øÇÒ ¼ö ÀÖ´Ù.

    ¸ðµç Æ®·£½ºÆ÷Æ®°¡ Áö¿øÇؾßÇÏ´Â ¾ÕÀÇ Äõ¸®¿¡ Ãß°¡Çؼ­ ƯÁ¤ Æ®·£½ºÆ÷Æ®´Â ´Ù¸¥ °ÍµéÀ» Áö¿øÇÑ´Ù. ¿¹¸¦µé¾î NetBIOS Æ®·£½ºÆ÷Æ®´Â ³ªÁß¿¡ ¼­¼ú(ÁÖ¼®À» ºÁ¶ó)µÇµíÀÌ ¼¼ °³ÀÇ Ãß°¡ÀûÀÎ ½Ã½ºÅÛ Á¤ÀÇ TDI_QUERY_XXX¿¡ ´ëÇØ¼­ ÀÀ´äÇØ¾ßÇÑ´Ù.

    Irp->MdlAddress
    Ŭ¶óÀÌ¾ðÆ® Á¦°ø ³»¿ëÀÌ ¸®Äù½ºÆ®¸¦ ¼öÇàÇϱâ À§Çؼ­ ¿ä±¸ÇÏ´Â ¹«¾ùÀΰ¡¸¦ Æ÷ÇÔÇϴ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¸¦ ¸ÅÇÎÇÏ´Â MDLÀÇ Ã¼Àο¡¼­ °¡´ÉÇÏ´Ù¸é óÀ½ MDLÀ» °¡¸®Å²´Ù. ÀÔ·Â ³»¿ë°ú ÀÌ ¹öÆÛÀÇ Æ÷¸ËÀº ÁÖ¾îÁø QueryType¿¡ ÀÇÁ¸ÇÑ´Ù.

ÁÖ¼®

NetBIOS Æ®·£½ºÆ÷Æ®¿¡ ´ëÇØ¼­ QueryTypeÀº ´ÙÀ½Áß Çϳª¸¦ ¼­¼úÇÒ ¼ö ÀÖ´Ù:

TDI_QUERY_FIND_NAME
MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ FIND_NAME_BUFFER ±¸Á¶Ã¼¸¦ µû¸£´Â FIND_NAME_HEADER ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ NetBIOS Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù. ÀÌ Äõ¸® ŸÀÔ¿¡ ´ëÇØ¼­ RequestConnectionInformationÀº À¯È¿ÇÑ TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.

TDI_QUERY_SESSION_STATUS
MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ SESSION_BUFFER ±¸Á¶Ã¼¸¦ µû¸£´Â SESSION_HEADER ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.

TDI_QUERY_ADAPTER_STATUS
MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ ADAPTER_STATUS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.

¾ÕÀÇ NetBIOS ƯÁ¤ ±¸Á¶Ã¼¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸¸¦ À§Çؼ­´Â Ç÷§Æû SDK¸¦ ºÁ¶ó.

´ëºÎºÐÀÇ °æ¿ì¿¡ TdiBuildQueryInformation ÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ IRP¾È¿¡ ä¿ì±â À§Çؼ­ »ç¿ëÇÏ´Â ¸ÅÅ©·ÎÀÌ´Ù.

TdiBuildQueryInformation ¸ÅÅ©·Î°¡ TDI_REQUEST_KERNEL_QUERY_INFORMATION ±¸Á¶Ã¼ÀÇ RequestConnectionInformation ¸â¹ö¸¦ NULL·Î ¼³Á¤Çϱ⠶§¹®¿¡ NetBIOS Æ®·£½ºÆ÷Æ®ÀÇ Å¬¶óÀÌ¾ðÆ®´Â TDI_QUERY_FIND_NAME Äõ¸® ŸÀÔÀ» °¡Áö°í TdiBuildQueryInformation ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. TDI_QUERY_FIND_NAMEÀ» »ç¿ëÇÏ¿© TDI_QUERY_INFORMATION ¸®Äù½ºÆ®¸¦ À§ÇÑ IRP¸¦ ¼³Á¤Çϱâ À§Çؼ­ NetBIOS Æ®·£½ºÆ÷Æ®ÀÇ Å¬¶óÀÌ¾ðÆ®´Â TdiBuildQueryInformation ÇÔ¼ö¿¡ ´ëÇÑ ÄÚµå¿Í À¯»çÇÑ Äڵ带 »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ RequestConnectionInformation¿¡ ´ëÇØ¼­ TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ¼­¼úÇØ¾ßÇÑ´Ù.