TDI_SEND_DATAGRAM

Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®°¡ TDI_SEND_DATAGRAM ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡°Ô ¸í½ÃµÈ ¿ø°ÝÁöÀÇ ÁÖ¼Ò·Î µ¥ÀÌŸ±×·¥À¸·Î½á TSDU¸¦ Àü¼ÛÇϵµ·Ï ¿ä±¸ÇÑ´Ù.

IRP

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

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

    STATUS_PENDING
    STATUS_INSUFFICIENT_RESOURCES
    STATUS_INVALID_ADDRESS
    STATUS_INVALID_PARAMETER

    Irp->IoStatus.Information
    Irp->MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾îÆ® Á¦°ø ¹öÆÛ·ÎºÎÅÍ µå¶óÀ̹ö°¡ Àü¼ÛÇÑ Å¬¶óÀÌ¾ðÆ® Á¦°ø µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼­¼úÇÑ´Ù.

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

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

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

    IrpSp->Parameters
    ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǴ TDI_REQUEST_KERNEL_SENDDG ±¸Á¶Ã¼¸¦ °¡¸®Å²´Ù:
    
    struct _TDI_REQUEST_KERNEL_SENDDG {
    
        ULONG SendLength;
    
        PTDI_CONNECTION_INFORMATION SendDatagramInformation;
    
    } TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG;
    
    
    Æ®·£½ºÆ÷Æ®´Â ´ÙÀ½°ú °°ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹ö¸¦ »ç¿ëÇÑ´Ù:

    SendLength
    º¸³»Áö´Â µ¥ÀÌŸ±×·¥ÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼­¼úÇÑ´Ù.

    SendDatagramInformation
    ·ÎÄÃÀÇ Å¬¶óÀÌ¾ðÆ®°¡ µ¥ÀÌŸ±×·¥À» º¸³»°íÀÚÇÏ´Â ¿ø°ÝÀÇ ÁÖ¼Ò¸¦ ¼­¼úÇÏ´Â TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼¸¦ °¡¸®Å²´Ù.

    Irp->MdlAddress
    º¸³»Áö´Â µ¥ÀÌŸ±×·¥À» Æ÷ÇÔÇϴ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¸¦ ¸ÅÇÎÇϴ üÀξȿ¡ óÀ½ MDLÀ»°¡¸®Å²´Ù.

ÁÖ¼®

TDI Æ®·£½ºÆ÷Æ®´Â ´ÜÆíÈ­µÈ µ¥ÀÌŸ±×·¥À» º¸³»Áö ¾Ê´Â´Ù. °á±¹ Ŭ¶óÀÌ¾ðÆ®´Â ºñ¿¬°áÁöÇâ µ¥ÀÌŸ Àü¼Û ¿¬»ê¿¡¼­ ƯÁ¤ ¸®Äù½ºÆ®¿Í¸¸ ¿¬°üµÈ °¢°¢ÀÇ º¸³»±â µ¥ÀÌŸ±×·¥¿¡¼­ Çϳª¸¦ ÇàÇÑ´Ù.

º¸³»±â µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®¿¡¼­ º¸³»´Â Ŭ¶óÀÌ¾ðÆ®´Â TSDU¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ Á¦°øÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®´Â Æ®·£½ºÆ÷Æ® °áÁ¤ Á¦ÇÑ¿¡¼­ ¹öÆÛÀÇ »çÀÌÁ Á¦°øÇÒ ¼ö ÀÖ´Ù. Æ®·£½ºÆ÷Æ®´Â º¸³»±â ¸®Äù½ºÆ® IRP¸¦ ¿Ï·áÇÒ ¶§±îÁö Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛÀÇ ¼ÒÀ¯±ÇÀ» ¾ò´Â´Ù. Æ®·£½ºÆ÷Æ®°¡ Áö¿øÇÏ´Â °Íº¸´Ù ´õ Å« SendLength¸¦ ¼­¼úÇϴ Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇØ¼­ Æ®·£½ºÆ÷Æ®´Â º¸³»±â µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®¸¦ ½ÇÆÐÇÑ´Ù.

TDI_QUERY_PROVIDER_INFO, TDI_QUERY_DATAGRAM_INFO, ȤÀº TDI_QUERY_MAX_DATAGRAM_INFO·Î ¼³Á¤µÈ QueryTypeÀ» °¡Áö°í Äõ¸® Á¤º¸ ¸®Äù½ºÆ®¸¦ Á¦ÃâÇϹǷνá Ŭ¶óÀÌ¾ðÆ®´Â Æ®·£½ºÆ÷Æ®ÀÇ º¸³»±â »çÀÌÁî Á¦ÇÑÀ» °áÁ¤ÇÒ ¼ö ÀÖ´Ù.

Æ®·£½ºÆ÷Æ®´Â ±æÀ̰¡ 0ÀÎ µ¥ÀÌŸ±×·¥ÀÇ Àü¼ÛÀ» Ŭ¶óÀÌ¾îÆ®¿¡°Ô Çã¶ôÇÑ´Ù. ¿¹¸¦µé¾î ±æÀ̰¡ 0ÀÎ º¸³»±â µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®´Â ÇÁ·ÎÅäÄÝ È帧À» °­¿äÇÑ´Ù.

¸î¸î Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®¿¡°Ô µ¥ÀÌŸ±×·¥À» ¿ø°ÝÁöÀÇ ¸ÖƼij½ºÆ® ȤÀº ºê·Îµåij½ºÆ® ÁÖ¼Ò·Î Áö½ÃÇÏ´Â °ÍÀ» Çã¶ôÇÑ´Ù. ±×·¯ÇÑ ¸ÖƼij½ºÆ® ȤÀº ºê·Îµåij½ºÆ® ÁÖ¼ÒÀÇ ½ÅÅýº´Â Æ®·£½ºÆ÷Æ® ƯÁ¤ÀÌ´Ù.

ºñ¿¬°áÁöÇâ Àü¼ÛÀ¸·Î½á µ¥ÀÌŸ±×·¥ Àü¼ÛÀº ¿ø·¡ ºñ½Å·ÚÀûÀÌ´Ù. Æ®·£½ºÆ÷Æ®´Â µå¶óÀ̹ö °³¹ßÀÚÀÇ °áÁ¤¿¡¼­ µ¥ÀÌŸ±×·¥À» º¹»çÇϰųª µå¶øÇÒ ¼ö ÀÖ´Ù. Æ®·£½ºÆ÷Æ®´Â ¼º°øÀÌµç ¿¡·¯À̵çÁö °£¿¡ ÀûÀýÇÑ ¹æ¹ýÀ¸·Î °¢°¢ÀÇ º¸³»±â µ¥ÀÌŸ±×·¥ IRP¸¦ ¿Ï·áÇØ¾ßÇÑ´Ù. µå¶óÀ̹ö´Â ÇϺΠ³×Æ®¿÷ »óÅÂÀÇ Áö½Ä¿¡ ±â¹ÝÇÏ¿© Àû´çÇÑ Å¸ÀӾƿôÀ» °áÁ¤ÇؾßÇÑ´Ù.

µå¶óÀ̹ö°¡ ³»ºÎÀûÀ¸·Î µ¥ÀÌŸ±×·¥À» Å¥¿¡ ÀúÀåÇÑ´Ù¸é Æ®·£½ºÆ÷Æ®´Â FIFO ¼ø¼­·Î º¸³»±â µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®¸¦ ó¸®ÇؾßÇÑ´Ù. º¸³»±â µ¥ÀÌŸ±×·¥ ¸®Äù½ºÆ®´Â ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® º¸³»±â ¸®Äù½ºÆ®·ÎºÎÅÍ ºÐ¸®µÇ¾î Å¥¿¡ ÀúÀåµÇ¾î¾ßÇÑ´Ù.

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