TDI_CONNECT

Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®°¡ TDI_CONNECT ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡°Ô ¿ø°ÝÁö·ÎÀÇ Æ¯Á¤ ·ÎÄà ¿¬°á ¿£µåÆ÷ÀÎÆ®¿¡¼­ÀÇ ¿¬°áÀ» Á¦°øÇϵµ·Ï ¿ä±¸ÇÑ´Ù.

IRP

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

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

    STATUS_SUCCESS
    STATUS_PENDING
    STATUS_BAD_NETWORK_PATH
    STATUS_INVALID_CONNECTION
    STATUS_REMOTE_NOT_LISTENING
    STATUS_INSUFFICIENT_RESOURCES
    STATUS_REQUEST_TIMED_OUT

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

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

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

    IrpSp->Parameters
    TDI_REQUEST_KERNEL ±¸Á¶Ã¼¿Í ´ëµîÇÑ TDI_REQUEST_KERNEL_CONNECT ±¸Á¶Ã¼¸¦ °¡¸®Å²´Ù.

    RequestFlags ¸â¹ö´Â ¿¬°á ¸®Äù½ºÆ®¿Í´Â °ü°è°¡ ¾ø´Ù. Æ®·£½ºÆ÷Æ®´Â RequestConnectionInformation¿¡ ¹öÆÛ¾È¿¡ ¿¬°áÀÌ Á¦°øµÇ¾î¾ßÇÏ´Â ¿ø°ÝÁöÀÇ ÁÖ¼Òó·³ Ŭ¶óÀÌ¾ðÆ® Á¦°ø Á¤º¸¸¦ »ç¿ëÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â RequestConnectionInformation¿¡ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ·Î Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ °¢°¢ÀÇ ¹öÆÛ´Â TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼·Î Æ÷¸ËµÈ´Ù.

    IrpSp->Parameters.RequestSpecific
    ¿¬°á Á¦°øÀ» À§Çؼ­ ŸÀӾƿô °ªÀ» ¼­¼úÇÏ´Â LARGE_INTEGER º¯¼ö¸¦ °¡¸®Å°°Å³ª NULLÀÌ´Ù. ¸íÈ®ÇÑ Å¸ÀӾƿôÀº ŸÀӾƿô °£°ÝÀ» À§Çؼ­ ÇöÀç ½Ã½ºÅÛ ½Ã°£°ú ¿¬°üµÈ À½ÀÇ 100 ³ª³ëÃÊ À¯´ÖÀ¸·Î ¼­¼úµÈ´Ù. ÀÌ ¸â¹ö°¡ NULLÀÌ¸é Æ®·£½ºÆ÷Æ®´Â 1ÃÊ º¸´Ù ÀÛÀº °ªÀ¸·Î ÀûÀýÇÑ Å¸ÀӾƿô °£°ÝÀ» ¼±ÅÃÇØ¾ßÇÑ´Ù.

ÁÖ¼®

¿ø°ÝÁö¿Í ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀ» ¼º¸³Çϱâ À§ÇÑ ·ÎÄÃÀÇ Å¬¶óÀÌ¾ðÆ®¿¡ ´ëÇØ¼­ TDI_CONNECT ¸®Äù½ºÆ®¸¦ ÇϱâÀü¿¡ ¿­¸° Æ®·£½ºÆ÷Æ® ÁÖ¼Ò¸¦ °¡Áö°í idleÇÑ ·ÎÄà ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ¿¬°üÁö¾î¾ßÇÑ´Ù. ¼­¼úµÈ ·ÎÄà ¿£µåÆ÷ÀÎÆ®°¡ Ȱ¼ºÈ­µÇ°Å³ª Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é Æ®·£½ºÆ÷Æ®´Â ¿¬°á ¸®Äù½ºÆ®¸¦ ½ÇÆÐÇÑ´Ù.

¼º°øÇÑ TDI_CONNECT ¸®Äù½ºÆ®¿¡ ´ëÇØ¼­ ¿ø°ÝÁöÀÇ Å¬¶óÀÌ¾ðÆ®´Â ¿­¸° TDI_LISTEN ¸®Äù½ºÆ®¸¦ °¡Áö°Å³ª ¿ø°ÝÁö »ó¿¡¼­ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼­ ÀεðÄÉÀÌÆ®µÈ ¿¬°á Á¦°øÀ» ¹Þ±â À§Çؼ­ ClientEventConnect Çڵ鷯¸¦ µî·ÏÇØ¾ßÇÑ´Ù.

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