TDI_ASSOCIATE_ADDRESS

Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®°¡ TDI_ASSOCIATE_ADDRESS ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡°Ô ¿­¸° ƯÁ¤ ·ÎÄà ÁÖ¼Ò¿Í ¿­¸° ¿¬°á ¿£µåÆ÷ÀÎÆ®»çÀÌÀÇ ¿¬°üÀ» Áþ±â¸¦ ¿ä±¸ÇÑ´Ù.

IRP

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

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

    STATUS_SUCCESS
    STATUS_CONNECTION_ESTABLISHED
    STATUS_INVALID_CONNECTION
    STATUS_INVALID_HANDLE
    STATUS_INVALID_PARAMETER

    IoStatus.Information ¸â¹ö´Â ÀÌ ¸®Äù½ºÆ®°¡ µ¥ÀÌŸ Àü¼ÛÀ» ÇÏÁö ¾Ê±â ¶§¹®¿¡ 0 ÀÌ´Ù.

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

    IrpSp->MinorFunction
    TDI_ASSOCIATE_ADDRESS¸¦ ¼­¼úÇÑ´Ù.

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

    IrpSp->Parameters
    ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǴ TDI_REQUEST_KERNEL_ASSOCIATE ±¸Á¶Ã¼¸¦ °¡¸®Å²´Ù:
    
    struct _TDI_REQUEST_KERNEL_ASSOCIATE {
    
        HANDLE  AddressHandle;
    
    } TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE;
    
    
    Æ®·£½ºÆ÷Æ®´Â ´ÙÀ½Ã³·³ ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹ö¸¦ »ç¿ëÇÑ´Ù:

    AddressHandle
    ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¿¡ ´ëÇÑ Å¬¶óÀÌ¾ðÆ® Á¦°ø ÇÚµéÀ» ¼­¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â ¿¬°á ¿£µåÆ÷ÀÎÆ®¿Í ¿¬°üÀ̵Ǵ ·ÎÄà ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼·ÎÀÇ ÂüÁ¶¸¦ ¾ß±âÇÏ´Â ÆÄÀÏ °´Ã¼ÀÇ Æ÷ÀÎÅÍ·Î ÀÌ ÇÚµéÀ» ¹Ù²Ù±â À§Çؼ­ ObReferenceObjectByHandle ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. Æ®·£½ºÆ÷Æ®´Â ÀÌ ÁÖ¼Ò¿¡ ´ëÇØ¼­ À¯ÁöÇÏ´Â »óŸ¦ Á¢±ÙÇϱâ À§Çؼ­ ÀÌ ÆÄÀÏ °´Ã¼ÀÇ FsContext¿Í °¡´ÉÇÏ´Ù¸é FsContext2 Çʵ带 »ç¿ëÇÑ´Ù.

ÁÖ¼®

Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö·Î ¼±ÅÃÀûÀ¸·Î TDI_ACCEPT ¸®Äù½ºÆ®¿¡ ÀÇÇØ¼­ µÚµû¸£´Â TDI_LISTEN ¸®Äù½ºÆ®¸¦ °¡Áö°í ȤÀº TDI_CONNECT ¸®Äù½ºÆ®¸¦ °¡Áö°í ¿ø°ÝÁö¿Í ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀ» ÇϱâÀü¿¡ associate-address ¸®Äù½ºÆ®¸¦ ÇØ¾ßÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®´Â associate-address ¸®Äù½ºÆ®¸¦ ÇϱâÀü¿¡ TDI_QUERY_INFORMATION ȤÀº TDI_SET_INFORMATION ¸®Äù½ºÆ®¸¦ °¡Áö°í ¿¬°á¿¡ ´ëÇØ¼­ Á¤º¸¸¦ ¾ò°Å³ª ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.

¿¬°á ¿£µåÆ÷ÀÎÆ®°¡ ÁÖ¼Ò¿Í ¿¬°üµÈ ÈÄ¿¡ Ŭ¶óÀÌ¾ðÆ®´Â ÇϳªÀÇ ¿¹¿Ü¸¦ °¡Áö°í ¿¬°á»ó¿¡¼­ Æ®·£½ºÆ÷Æ®¿¡°Ô ¾î¶² ´Ù¸¥ TDI_XXX ¸®Äù½ºÆ®¸¦ ÇÒ ¼ö ÀÖ´Ù: Ŭ¶óÀÌ¾ðÆ®°¡ Æ®·£½ºÆ÷Æ®·Î ¼º°øÀûÀÎ TDI_DISASSOCIATE_ADDRESS ¸®Äù½ºÆ®¸¦ ÇÒ ¶§±îÁö ƯÁ¤ ¿£µåÆ÷ÀÎÆ®¸¦ À§Çؼ­ Ŭ¶óÀÌ¾ðÆ®´Â TDI_ASSOCIATE_ADDRESS ¸®Äù½ºÆ®¸¦ ´Ù½Ã ÇÒ ¼ö ¾ø´Ù.

¿¹¸¦µé¾î Ŭ¶óÀ̾ðÆ®ÀÇ ¼øÂ÷ÀûÀÎ TDI_LISTEN ¸®Äù½ºÆ®°¡ ¿ø°ÝÁö¿¡¼­ ¿¬°áÀ» Á¦°øÇÏÀÚ¸¶ÀÚ ¸¸Á·µÈ´Ù¸é ÇϳªÀÌ»óÀÇ TDI_SET_EVENT_HANDLER ¸®Äù½ºÆ®¸¦ Á¦ÃâÇϹǷνá ÁÖ¼Ò»ó¿¡¼­ ÇϳªÀÌ»óÀÇ ClientEvent(Chained)Receive(Expedited) Çڵ鷯¸¦ µî·ÏÇØ¾ßÇÑ´Ù. ¹Ý¸é¿¡ Áö¿¬µÈ ¿¬°á ½ÂÀÎÀ» À§Çؼ­ listenÀ» ¼³Á¤ÇÑ Å¬¶óÀÌ¾ðÆ®´Â Á¦°øµÈ ¿¬°áÀ» À§Çؼ­ TDI_ACCEPT ¸¦ Á¦ÃâÇÒ ¶§±îÁö¸¸ receive-event Çڵ鷯 µî·ÏÀ» Áö¿¬ÇÑ´Ù.

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