TDI_SEND

Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®°¡ TDI_SEND ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö·Î ÇÏ¿©±Ý ¿ø°ÝÁöÀÇ ¸í½ÃµÈ ¿¬°á ¿£µåÆ÷ÀÎÆ®»ó¿¡¼­ Á¤»óÀûÀ̰ųª ½Å¼ÓÇÑ TSDU¸¦ Àü¼ÛÇϵµ·Ï ¿ä±¸ÇÑ´Ù.

IRP

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

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

    STATUS_SUCCESS
    STATUS_PENDING
    STATUS_INVALID_CONNECTION
    STATUS_INVALID_PARAMETER
    STATUS_DEVICE_NOT_READY

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

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

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

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

    Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ ¿¬°á ¿£µåÆ÷ÀÎÆ®»ó¿¡¼­ ¿ø°ÝÁö¿Í ÀÌ¹Ì ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀ» ¼º¸³Çß´Ù.

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

    SendLength
    Irp->MdlAddress¿¡ ¸ÊµÈ ¹öÆÛ·Î º¸³»Áø µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼­¼úÇÑ´Ù.

    SendFlags
    Ŭ¶óÀÌ¾ðÆ®°¡ 0, ÇϳªÈ¤Àº OR ¿¬»êµÈ TDI_SEND_XXX Ç÷¡±×(ÁÖ¼®À» ºÁ¶ó)·Î½á º¸³»Áöµµ·Ï ±â´ëµÇ´Â TSDUÀÇ Å¸ÀÔÀ» ¼­¼úÇÑ´Ù.

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

ÁÖ¼®

Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ IRP¸¦ ¼³Á¤Çϱâ À§Çؼ­ TdiBuildSend ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ Ŭ¶óÀÌ¾ðÆ®´Â ¿øÇÏ´Â º¸³»±â ŸÀÔÀ» ¼­¼úÇÒ ¼ö ÀÖ´Ù. Æ®·£½ºÆ÷Æ®´Â SendFlags ¸â¹ö¾È¿¡ IrpSp->Parameters¿¡ Á¤º¸¸¦ ã´Â´Ù. ÀԷ¿¡¼­ SendFlags´Â 0À» ¼ö Àְųª ´ÙÀ½ Ç÷¡±×µéÀÇ OR ¿¬»ê °áÇÕÀ¸·Î½á ¼³Á¤µÉ ¼ö ÀÖ´Ù:

TDI_SEND_EXPEDITED
ÁÖ¾îÁø µ¥ÀÌŸ´Â Æ®·£½ºÆ÷Æ®°¡ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°á¿¡¼­ Àü¼ÛÀ» À§Çؼ­ Å¥¸¦ ÇöÀç À¯ÁöÇϰí ÀÖ´Â Á¤»óÀûÀÎ º¸³»±â ¸®Äù½ºÆ®ÀÇ ¾ÕºÎºÐÀÌ º¸³»Á®¾ßÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ ½Å¼ÓÇÑ Àü¼ÛÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù¸é ÀÌ Ç÷¡±×¸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù.

TDI_SEND_PARTIAL
ÁÖ¾îÁø µ¥ÀÌŸ´Â ¿Ï·áµÈ ¸Þ¼¼Áö ¸ðµå TSDU°¡ ¾Æ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®´Â TSDU¸¦ À§Çؼ­ ³ªÁß¿¡ ³²¾ÆÀÖ´Â µ¥ÀÌŸ¸¦ º¸³¾ °ÍÀÌ´Ù. ÀÌ Ç÷¡±×´Â ½ºÆ®¸² ¸ðµå Æ®·£½ºÆ÷Æ®¿Í ¹«°üÇÏ´Ù.

ÀÌ Ç÷¡±×°¡ ¸Þ¼¼Áö ¸ðµå Æ®·£½ºÆ÷Æ®·Î Á¦½ÃµÈ º¸³»±â¿¡¼­ Ŭ¸®¾îµÈ´Ù¸é µå¶óÀ̹ö´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¹öÆÛ¿¡¼­ Á¦°øµÈ ¸ðµç µ¥ÀÌŸ¸¦ º¸³½ ÈÄ¿¡ ¶óÀÎ ÇÃ·Î¿ì ¾ÈÀ¸·Î ·¹ÄÚµåÇ¥½ÃÀÇ ³¡À» »ðÀÔÇÑ´Ù.

TDI_SEND_NO_RESPONSE_EXPECTED
È£ÃâÀÚ´Â ¿ø°ÝÁö·ÎºÎÅÍ ÀÌ º¸³»±â¿¡ ´ëÇÑ ÀÀ´äÀ» ±â´ëÇÏÁö ¾Ê´Â ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®¿¡°Ô ÈùÆ®¸¦ ÁÖ°íÀÖ´Ù. ÀÌ Ç÷¡±×´Â ¿ø°ÝÁö Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼­ TSDU ½ÂÀÎÀÇ ÇDZâ¹éÀ» µð½º¿¡À̺í ÇØ¾ßÇÑ´Ù.

TDI_SEND_NON_BLOCKING
ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ ÇöÀç ÁÖ¾îÁø µ¥ÀÌŸ¸¦ À§Çؼ­ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ³»ºÎÀÇ ¹öÆÛ°ø°£À» °¡Áö°í ÀÖÁö ¾Ê´Ù¸é ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â STATUS_DEVICE_NOT_READY¸¦ °¡Áö°í IRP¸¦ ¿Ï·áÇØ¾ßÇÑ´Ù. ¸¸¾à Æ®·£½ºÆ÷Æ®°¡ ¾à°£ÀÇ ¹öÆÛ °ø°£À» »ç¿ëÇÒ ¼ö ÀÖ´Ù¸é Æ®·£½ºÆ÷Æ®´Â º¹»çµÇ´Â ¹ÙÀÌÆ® ¼ö°¡ IoStatus.Information¿¡ ¼³Á¤µÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ·ÎºÎÅÍ ÇÒ ¼ö ÀÖ´Â ¸¸Å­ ¸¹Àº µ¥ÀÌŸ¸¦ º¹»çÇØ¾ßÇÑ´Ù. ±×¸®°í STATUS_SUCCESS¸¦ °¡Áö°í IRP¸¦ ¿Ï·áÇØ¾ßÇÑ´Ù.

ÀÌ Ç÷¡±×´Â ³»ºÎÀûÀ¸·Î º¸³»±â¸¦ ¹öÆÛÈ­ÇÏÁö ¾ÊÀº Æ®·£½ºÆ÷Æ®¿Í´Â ¹«°üÇÏ´Ù.

°¢°¢ÀÇ ·ÎÄà Ŭ¶óÀ̾ðÆ®ÀÇ º¸³»±â ¸®Äù½ºÆ®´Â ´ÙÀ½Áß Çϳª¿Í ¿¬°üÀÌ ÀÖ´Ù:

  • ¿ø°ÝÁöÀÇ Å¬¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ¼­ ¸®½Ãºê ¸®Äù½ºÆ®°¡ ÇϺÎÀÇ Æ®·¡½ºÆ÷Æ®·Î Á¦½ÃµÆ´Ù.
  • Ŭ¶óÀ̾ðÆ®ÀÇ µî·ÏµÈ ClientEventReceive, ClientEventReceiveExpedited, ClientEventChainedReceive, ȤÀº ClientEventChainedReceiveExpedited Çڵ鷯·ÎÀÇ ¿ø°ÝÁö Æ®·£½ºÆ÷Æ®ÀÇ È£Ãâ.
·ÎÄà TDI Æ®·£½ºÆ÷Æ®´Â ƯÁ¤ ¿¬°á¿¡¼­ º¸³»±â ¸®Äù½ºÆ®¸¦ Å¥¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ Ŭ¶óÀÌ¾ðÆ®°¡ ½Å¼ÓÇÑ º¸³»±â¸¦ Á¦½ÃÇÏÁö ¾Ê´Â´Ù¸é FIFO ¼ø¼­·Î ó¸®ÇؾßÇÑ´Ù. °¢°¢ÀÇ ½Å¼ÓÇÑ º¸³»±â ¸®Äù½ºÆ®´Â Å¥¿¡ ÀúÀåµÇ¾î¾ßÇÏ°í Æ®·£½ºÆ÷Æ®°¡ Å¥¿¡ ÀúÀåÇϰí ÀÖ´Â Á¤»óÀûÀÎ º¸³»±â ¸®Äù½ºÆ®ÀÇ ¾ÕºÎºÐÀ» Àü¼ÛÇØ¾ßÇÑ´Ù. ¶ÇÇÑ °¢°¢ÀÇ ½Å¼ÓÇÑ º¸³»±â ¸®Äù½ºÆ®´Â Ŭ¶óÀÌ¾ðÆ®¸¦ À§Çؼ­ FIFO ¼ø¼­·Î Àü¼ÛµÇ¾î¾ßÇÑ´Ù.

Æ®·£½ºÆ÷Æ®´Â »óŰ¡ ¼º°øÀÌµç ¿¡·¯À̵çÁö °£¿¡ ½Ã±âÀûÀýÇÏ°Ô °¢°¢ÀÇ º¸³»±â IRP¸¦ ¿Ï·áÇØ¾ßÇÑ´Ù. µå¶óÀ̹ö´Â ÇϺΠ³×Æ®¿÷ »óÅÂÀÇ Áö½Ä¿¡ ±â¹ÝÇÏ¿© ÀûÀýÇÑ Å¸ÀӾƿôÀ» °áÁ¤ÇؾßÇÑ´Ù.

ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®¿¡ ÀÇÁ¸ÇÏ¿© Ŭ¶óÀÌ¾ðÆ®´Â ½ºÆ®¸² ¸ðµå ȤÀº ¸Þ¼¼Áö ¸ðµåÀÇ TSDU¸¦ º¸³¾ ¼ö ÀÖ°í ´ÙÀ½¿¡ ÇϳªÀÌ»óÀÇ º¸³»±â ¸®Äù½ºÆ®¸¦ ÇÒ ¼ö ÀÖ´Ù. ½ºÆ®¸² ¸ðµå Æ®·£½ºÆ÷Æ®¿¡ ´ëÇØ¼­ Ŭ¶óÀÌ¾ðÆ®´Â ¸Þ¼¼Áö Á¦ÇÑÀ» ÇÏÁö¾Ê°í TDI_SEND_PARTIAL Ç÷¡±×´Â ¹«°üÇÏ´Ù. ¸Þ¼¼Áö ¸ðµå Æ®·£½ºÆ÷Æ®¿¡ ´ëÇØ¼­ Ŭ¶óÀÌ¾ðÆ®´Â °¢°¢ÀÇ TDI_SEND_PARTIAL Ç÷¡±×¸¦ ¼­¼úÇÏ´Â ¼øÂ÷ÀûÀÎ º¸³»±â ¸®Äù½ºÆ®·Î½á TSDU¸¦ º¸³¾ ¼ö ÀÖ´Ù. ÀÌ Ç÷¡±×°¡ Á¦½ÃµÈ º¸³»±â ¸®Äù½ºÆ®¿¡¼­ Ŭ¸®¾îµÈ´Ù¸é ¸Þ¼¼Áö ¸ðµå Æ®·£½ºÆ÷Æ®´Â ±× µ¥ÀÌŸ¸¦ ¼øÂ÷ÀûÀÎ º¸³»±âÀÇ ³¡À̳ª TSDUÀÇ ¿Ï·á·Î °£ÁÖÇÑ´Ù. ¿ø°ÝÁöÀÇ TDI Æ®·£½ºÆ÷Æ®´Â ´ëÀÀÇÏ´Â ¸®½Ãºê ÀεðÄÉÀ̼ÇÀ¸·Î Àü´ÞµÈ ¸®½Ãºê ÀεðÄÉÀÌÅ͸¦ ÅëÇØ¼­ ¼ö½ÅÇϴ Ŭ¶óÀ̾ðÆ®ÀÇ ºÎºÐÀûÀÎ TSDU¸¦ ÀνÄÇÑ´Ù.

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

Ŭ¶óÀÌ¾ðÆ®´Â TDI_QUERY_PROVIDER_INFO ŸÀÔÀÇ Äõ¸®¸¦ Á¦½ÃÇϹǷνá ÇϺΠƮ·£½ºÆ÷Æ®ÀÇ º¸³»±â »çÀÌÁîÀÇ Á¦ÇÑÀ» °áÁ¤ÇÒ ¼ö ÀÖ´Ù.

Æ®·£½ºÆ÷Æ®°¡ ³»ºÎÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ® Á¦°ø º¸³»±â µ¥ÀÌŸ¸¦ ¹öÆÛÈ­ÇÑ´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â TDI_SEND_NON_BLOCKING Ç÷¡±×¸¦ ¼³Á¤ÇÏ¹Ç·Î½á ºñºí·¯Å· º¸³»±â¸¦ ¸®Äù½ºÆ®ÇÒ ¼ö ÀÖ´Ù. ±×·¯ÇÑ Æ®·£½ºÆ÷Æ®°¡ ¼³Á¤µÈ ÀÌ Ç÷¡±×¸¦ °¡Áö°í º¸³»±â ¸®Äù½ºÆ®¸¦ ¾òÀ» ¶§ Æ®·£½ºÆ÷Æ®°¡ ³»ºÎÀÇ ¹öÆÛ°ø°£À¸·Î ÁÖ¾îÁø µ¥ÀÌŸ¸¦ º¹»çÇÒ ¼ö ¾ø´Ù¸é STATUS_DEVICE_NOT_READY Ç÷¡±×¸¦ °¡Áö°í IRP¸¦ ¿Ï·áÇÑ´Ù. ±×·¯ÇÑ Æ®·£½ºÆ÷Æ®´Â ³»ºÎÀûÀ¸·Î ÁÖ¾îÁø TSDUÀÇ ºÎºÐ¸¸ ¹öÆÛÈ­ÇÑ´Ù¸é STATUS_SUCCESS¸¦ ¸®ÅÏÇÑ´Ù. ÇÏÁö¸¸ ³»ºÎÀûÀ¸·Î ¹öÆÛÈ­µÈ ¹ÙÀÌÆ®ÀÇ ¼ö·Î ±×·¯ÇÑ IRP¾È¿¡ IoStatus.InformationÀ» ¼³Á¤ÇؾßÇÑ´Ù. ±×·¡¼­ Ŭ¶óÀÌ¾ðÆ®´À ¿ø·¡ º¸³»±â ¸®Äù½ºÆ®¾È¿¡ À¯ÁöÇÏ´Â µ¥ÀÌŸ¿¡ ´ëÇØ¼­ ¼øÂ÷ÀûÀÎ º¸³»±â¸¦ Á¦½ÃÇÒ ¼ö ÀÖ´Ù.

ºñºí·¯Å· º¸³»±â ¸®Äù½ºÆ®¸¦ Á¦½ÃÇϴ Ŭ¶óÀÌ¾ðÆ®´Â º¸Åë ClientEventSendPossible Çڵ鷯¸¦ µî·ÏÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â À¯ÁöÇϰí ÀÖ´Â º¸³»±â µ¥ÀÌŸ¸¦ À§Çؼ­ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ³»ºÎÀÇ ¹öÆÛ°ø°£À» °®ÀÚ¸¶ÀÚ STATUS_DEVICE_NOT_READY¸¦ °¡Áö°í º¸³»±â ¸®Äù½ºÆ®¸¦ °ÅÀýÇÑ ÈÄ¿¡ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â ÀÌ Çڵ鷯¸¦ È£ÃâÇÑ´Ù.

¶ÇÇÑ Æ®·£½ºÆ÷Æ®´Â ±æÀ̰¡ 0ÀÎ º¸³»±â ¸®Äù½ºÆ®¸¦ Áö¿øÇÒ ¼ö ÀÖ´Ù. TDI_SEND_PARTIALÀÌ Å¬¸®¾îµÈ ±æÀ̰¡ 0ÀÎ º¸³»±â´Â ÇÁ·ÎÅäÄÝ È帧À» °­¿äÇÑ´Ù. ±×·¯ÇÑ Æ®·£½ºÆ÷Æ®ÀÇ Å¬¶óÀÌ¾ðÆ®´Â ¸®½Ãºê ¸®Äù½ºÆ®¸¦ ¸¸Á·½Ã۱â À§Çؼ­ ±æÀ̰¡ 0ÀÎ º¸³»±â¸¦ Á¦½ÃÇÒ ¼ö ÀÖ´Ù. µå¶óÀ̹ö°¡ ±æÀ̰¡ 0ÀÎ º¸³»±â¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù¸é µå¶óÀ̹ö´Â Ŭ¶óÀÌ¾ðÆ®°¡ ±æÀ̰¡ 0ÀÎ º¸³»±â¸¦ Á¦½ÃÇÒ ¶§ ¿¡·¯¸¦ ¸®ÅÏÇÑ´Ù.

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