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¿¡ ä¿ì±â À§Çؼ »ç¿ëÇÏ´Â ¸ÅÅ©·ÎÀÌ´Ù.
|