TdiBuildListen

VOID
   TdiBuildListen (
       IN PIRP Irp,
       IN PDEVICE_OBJECT DevObj,
       IN PFILE_OBJECT FileObj,
       IN PVOID CompRoutine,
       IN PVOID Contxt,
       IN ULONG Flags,
       IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
       OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo
  
   );

TdiBuildListen ÇÔ¼ö´Â ·ÎÄà Ŭ¶óÀÌ¾ðÆ®°¡ ÁÖ¼Ò¿Í ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ÀÌ¹Ì ¿¬°ü½ÃŲ ÇϺΠƮ·£½ºÆ÷Æ®·Î TDI_LISTEN ¸®Äù½ºÆ®¸¦ À§Çؼ­ ³»ºÎÀÇ ÀåÄ¡ ÅëÁ¦ IRP¸¦ ¼³Á¤ÇÑ´Ù.

¸Å°³º¯¼ö

Irp
´õ »óÀ§ ·¹º§ÀÇ ³×Æ®¿÷ ÄÄÆ÷³ÍÆ®¿¡¼­ ¹ß»ýÇϰųª TdiBuildInternalDeviceControlIrp ÇÔ¼ö¸¦ °¡Áö°í ÇÒ´çµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø IRP¸¦ °¡¸®Å²´Ù.

DevObj
ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡ ÀÇÇØ¼­ »ý¼ºµÈ ÀåÄ¡ °´Ã¼¸¦ °¡¸®Å²´Ù.

FileObj
¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù. Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ ¿¬°á°ú ·ÎÄÃÀÇ ÁÖ¼Ò»çÀÌ¿¡¼­ °ü°è¸¦ ¼³Á¤Çϱâ À§Çؼ­ Æ®·£½ºÆ÷Æ®·Î TdiBuildAssociateAddress ÇÔ¼ö¸¦ °¡Áö°í ¼³Á¤µÈ ¸®Äù½ºÆ®¸¦ Àü¿¡ ¼º°øÇß´Ù.

CompRoutine
Ŭ¶óÀÌ¾ðÆ® Á¦°ø IoCompletion ·çƾÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ¼­¼úÇϰųªNULLÀÌ´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ ¸Å°³º¯¼ö¸¦ NULL·Î ¼³Á¤ÇÏÁö ¾Ê¾Ò´Ù¸é ÁÖ¾îÁø IRP°¡ ¿Ï·áµÉ ¶§ I/O ¸Å´ÏÀú´Â ÀÌ ·çƾÀ» È£ÃâÇÑ´Ù.

Contxt
Ŭ¶óÀ̾îˆp °áÁ¤ ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù. ÀÌ Å¬¶óÀÌ¾ðÆ® Á¦°ø Æ÷ÀÎÅÍ´Â ¿Ï·áµÈ IRP¸¦ °¡Áö°í È£ÃâµÉ ¶§ Ŭ¶óÀ̾ðÆ®ÀÇ IoCompletion ·çƾÀ¸·Î Àü´ÞµÈ´Ù. CompRoutineÀÌ NULLÀ̸é Contxt´Â NULLÀÌ´Ù.

Flags
0À» ¼­¼úÇϰųª ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ Áö¿¬µÈ ¿¬°á ½ÂÀÎÀ» Áö¿øÇÑ´Ù¸é TDI_QUERY_ACCEPT¸¦ ¼­¼úÇÑ´Ù.

Flags°¡ 0À̸é ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â ¿ø°ÝÁö·ÎºÎÅÍÀÇ ¿¬°áÀÌ Á¦°øµÇÀÚ¸¶ÀÚ ¿ø°ÝÁö·ÎºÎÅÍ ¿¬°áÀ» ¹Þ¾ÆµéÀδÙ. Ŭ¶óÀÌ¾ðÆ®´Â ´ë±â ¸®Äù½ºÆ®°¡ ¿Ï·áµÉ ¶§ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀÌ ¿ÏÀüÇÏ°Ô ¿¬»êµÇ¾ú´Ù°í ÃßÃøÇÒ ¼ö ÀÖ´Ù. »ç½Ç ¿¬°á ¿£µåÆ÷ÀÎÆ® »ó¿¡¼­ÀÇ ¸®½Ãºê´Â ÀÌ ´ë±â IRP°¡ Ŭ¶óÀÌ¾ðÆ®·Î ¿ÏÀüÇÏ°Ô ¿Ï·áµÇ¾î µ¹¾Æ¿À±â Àü¿¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.

Æ®·£½ºÆ÷Æ®°¡ Áö¿¬µÈ ¿¬°á ½ÂÀÎÀ» Áö¿øÇϰí Ŭ¶óÀÌ¾ðÆ®°¡ TDI_QUERY_ACCEPT¸¦ ¼³Á¤Çß´Ù¸é ±× Å¬¶óÀÌ¾ðÆ®´Â ´ë±â ¸®Äù½ºÆ®°¡ ¿Ï·áµÉ ¶§ °¡´ÉÇÑ ÇÑ »¡¸® Á¦°øµÈ ¿¬°áÀ» ½ÂÀÎÇϰųª °ÅÀýÇØ¾ßÇÑ´Ù. Áï ÀÌ IRPÀÇ ¿Ï·á¿¡¼­ Ŭ¶óÀÌ¾ðÆ®´Â °¢°¢ TdiBuildAccept¿Í TdiBuildDisconnect ÇÔ¼ö¸¦ °¡Áö°í Æ®·£½ºÆ÷Æ®·Î ¶Ç´Ù¸¥ ¸®Äù½ºÆ®¸¦ ¼³Á¤ÇؾßÇÑ´Ù.

RequestConnectionInfo
·ÎÄà Ŭ¶óÀÌ¾ðÆ®°¡ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÁ¦°øÀ» ±â´ëÇÏ´Â ¿ø°ÝÀÇ Å¬¶óÀÌ¾ðÆ® ÁÖ¼Ò¸¦ ¼­¼úÇÏ´Â TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼¸¦ Æ÷ÇÔÇϴ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¸¦ °¡¸®Å²´Ù.

FlagsÀÇ °ª¿¡ ÀÇÁ¸ÇÏ¿© Ŭ¶óÀÌ¾ðÆ®´Â ¶ÇÇÑ ÀÌ ±¸Á¶Ã¼ÀÇ ´ÙÀ½ ¸â¹ö·Î Ãß°¡ÀûÀÎ Á¤º¸¸¦ Á¦°øÇÑ´Ù:

UserData
Flags°¡ 0ÀÌ¸é ¿ø°ÝÁö·ÎºÎÅÍ Á¦°øµÈ ¿¬°áÀÇ ½ÂÀÎÀ» °¡Áö°í Ŭ¶óÀÌ¾ðÆ®°¡ º¸³»°íÀÚÇÏ´Â µ¥ÀÌŸÀÇ ¹öÆÛ¸¦ °¡¸®Å²´Ù.

ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ Áö¿¬µÈ ¿¬°á ½ÂÀÎÀ» Áö¿øÇϰí Ŭ¶óÀÌ¾ðÆ®°¡ Flags¸¦ TDI_QUERY_ACCEPT·Î ¼³Á¤ÇÏ´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ ¸â¹ö¸¦ NULL·Î ¼³Á¤ÇÑ´Ù. ±×·¯ÇÑ Å¬¶óÀÌ¾ðÆ®´Â Á¦°øµÈ ¿¬°áÀ» ¼øÂ÷ÀûÀ¸·Î ¹Þ¾ÆµéÀÏ ¶§ µ¥ÀÌŸ ½ÂÀÎÀ» Á¦°øÇÒ ¼ö ÀÖ´Ù.

UserDataLength
UserData¿¡ ¹öÆÛÀÇ ¹ÙÀÌÆ® »çÀÌÁ ¼­¼úÇÑ´Ù. UserData°¡ NULLÀ̸é ÀÌ ¸â¹ö´Â 0ÀÌ´Ù.

Options
Flags¿Í °°Àº °ªÀÌ ¼³Á¤µÈ´Ù.

OptionsLength
sizeof(ULONG)ÀÌ ¼³Á¤µÈ´Ù.

RemoteAddress
·ÎÄÃÀÇ Å¬¶óÀÌ¾ðÆ®°¡ ¹Þ¾ÆµéÀÌ°Ô µÉ ¿¬°áÁ¦°øÀÇ ¿¹»óÀ¸·ÎºÎÅÍ ¿ø°ÝÁö ÁÖ¼Ò¸¦ ¼­¼úÇÏ´Â ¹öÆÛ¸¦ °¡¸®Å²´Ù. ¿ø°ÝÁö¿¡¼­ Á¦°øµÈ ¿¬°áÀÌ Å¬¶óÀÌ¾ðÆ®¿¡¼­ ½ÂÀεȴٸé ÀÌ ¸â¹ö´Â NULLÀÏ ¼ö ÀÖ´Ù.

¸î¸î Æ®·£½ºÆ÷Æ®¿¡ ´ëÇØ¼­ ·ÎÄÃÀÇ Å¬¶óÀÌ¾ðÆ®´Â ºÎºÐÀûÀÎ ÁÖ¼Ò¸¦ ¼­¼úÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª TDI µå¶óÀ̹ö´Â ºÎºÐÀûÀÎ ÁÖ¼Ò¸¦ ´Ù·ç´Â ´Ù¾çÇÑ ´É·ÂÀÌ ÀÖ´Ù.±×·¯ÇÑ ÁÖ¼ÒÀÇ ½ÅÅýº´Â ÇÁ·ÎÅäÄÝ Æ¯Á¤À̱⠶§¹®¿¡ ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ®°¡ ºÎºÐÀûÀÎ ÁÖ¼Ò ¼­¼úÀ» Áö¿øÇÑ´Ù¸é ºÎºÐÀûÀÎ ÁÖ¼Ò¸¦ ¼­¼úÇϱâ À§Çؼ­ ÇÕÀǸ¦ Á¤ÀÇÇÑ´Ù.

RemoteAddressLength
RemoteAddress¿¡ ¹öÆÛÀÇ ¹ÙÀÌÆ® »çÀÌÁ ¼­¼úÇÑ´Ù. RemoteAddress°¡ NULLÀ̸é ÀÌ ¸â¹ö´Â 0À̾î¾ßÇÑ´Ù.

ReturnConnectionInfo
¸¸µé¾îÁø ¿¬°áÁ¦°øÀ¸·ÎºÎÅÍ ¿ø°ÝÁö ÁÖ¼Ò¸¦ ¸®ÅÏÇÏ´Â Æ®·£½ºÆ÷Æ®ÀÇ È£ÃâÀÚ Á¦°ø ¹öÆÛ¸¦ °¡¸®Å²´Ù. ÀÌ ¹öÆÛ´Â TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ´Ù.

·ÎÄÃÀÇ Å¬¶óÀÌ¾ðÆ®°¡ Flags¸¦ TDI_QUERY_ACCEPT·Î ¼³Á¤ÇÑ´Ù¸é ·ÎÄÃÀÇ Å¬¶óÀÌ¾ðÆ®´Â ÀÌ ´ë±â ¸®Äù½ºÆ®°¡ ¿Ï·áµÉ ¶§ ¿¬°áÀ» ½ÂÀÎÇÏ´ÂÁö °ÅÀýÇÏ´ÂÁö¸¦ °áÁ¤Çϱâ À§Çؼ­ ¸®ÅÏµÈ Á¤º¸¸¦ °Ë»çÇÑ´Ù.

Ŭ¶óÀÌ¾ðÆ®°¡ ¾Æ¿ôDz Á¤º¸¸¦ ¿ä±¸ÇÏÁö ¾Ê°Å³ª ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ ±×·¯ÇÑ Á¤º¸¸¦ ¸®ÅÏÇÏÁö ¾Ê´Â´Ù¸é ÀÌ ¸Å°³º¯¼ö´Â NULLÀ̾î¾ßÇÑ´Ù.

ÁÖ¼®

TdiBuildListen ÇÔ¼ö´Â ÁÖ¾îÁø IRPÀÇ Æ®·£½ºÆ÷Æ® I/O ½ºÅà ·ÎÄÉÀ̼Ǿȿ¡ MajorFunction·Î½á IRP_MJ_INTERNAL_DEVICE_CONTROLÀ» ¼³Á¤Çϰí MinorFunction·Î½á TDI_LISTENÀ» ¼³Á¤ÇÑ´Ù.

Ŭ¶óÀÌ¾ðÆ®°¡ TdiBuildListen ÇÔ¼ö¸¦ È£ÃâÇÏ¹Ç·Î½á ¼³Á¤µÈ IRP¸¦ °¡Áö°í ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®¸¦ È£ÃâÇϱâ Àü¿¡ Ŭ¶óÀÌ¾ðÆ®´Â ·ÎÄà ÁÖ¼Ò¸¦ °¡Áö°í ÀÛ¾÷À» ÇÏÁö ¾Ê°í ÀÖ´Â ¿¬°á ¿£µåÆ÷ÀÎÆ®¿ÍÀÇ ¿¬°ü°ü°è¸¦ ¼º°øÇÑ TdiBuildAssociateAddress ÇÔ¼ö¸¦ °¡Áö°í ¼³Á¤ÇÑ ¾Õ¼± ÁÖ¼Ò ¿¬°ü ¸®Äù½ºÆ®¸¦ ÇØ¾ßÇÑ´Ù. ÀÌ °ü°è°¡ ¼º¸³µÈ ÈÄ¿¡ Ŭ¶óÀÌ¾ðÆ®´Â Á¦°øµÈ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀ» ¹Þ¾ÆµéÀÏ ¶§±îÁö ¸¹Àº ´ë±â ¸®Äù½ºÆ®¸¦ Á¦½ÃÇÒ ¼ö ÀÖ´Ù.

ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ ±×µéÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ À§Çؼ­ QoS(quality-of-service)¸¦ Áö¿øÇÏÁö ¾Ê¾Æ¼­ µé¾î¿À´Â ´ë±â ¸®Äù½ºÆ®¿¡ ¼ø¼­¸¦ ¸Å±âÁö ¾Ê´Â´Ù¸é FIFO ¼ø¼­·Î Ŭ¶óÀÌ¾ðÆ® °¢°¢ÀÇ ´ë±â ¸®Äù½ºÆ®¸¦ ó¸®ÇÑ´Ù. ±×·¯³ª Ŭ¶óÀÌ¾ðÆ®´Â ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ ÇöÀç ¸ðµç Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ ¸®Äù½ºÆ®µÈ ¼ø¼­¿¡ ´ëÇØ¼­ ±Ç¸®¸¦ ÀμöÇÒ ¼ö ¾ø´Ù.

Æ®·£½ºÆ÷Æ®°¡ Áö¿¬µÈ ¿¬°á ½ÂÀÎÀ» Áö¿øÇÑ´Ù¸é Ŭ¶óÀÌ¾ðÆ®°¡ TDI_QUERY_ACCEPT¸¦ ¼³Á¤ÇÒ °ÍÀÎÁö¸¦ üũÇϱâ Àü¿¡ RequestConnectionInfo¿¡ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ÁÖ¼ÒÈ­ Á¤º¸´Â ÇϺÎÀÇ Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö°¡ Àû¿ëÇÑ ÇÊÅÍ·Î½á µ¿ÀÛÇÑ´Ù. ¸¸¾à µé¾î¿À´Â ¿¬°á Á¦°øÀÌ Å¬¶óÀ̾ðÆ®ÀÇ ´ë±â ¸®Äù½ºÆ®¿Í ÀÏÄ¡ÇÏÁö ¾Ê´Â´Ù¸é Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®¸¦ À§Çؼ­ ´ë±â ¸®Äù½ºÆ®¸¦ ¿Ï·áÇÒ ¼ö ¾ø´Ù. ±×·¸Áö ¾ÊÀ¸¸é µé¾î¿À´Â ¿¬°áÁ¦°øÀÌ ¸í½ÃµÈ ¿ø°ÝÀÇ ÁּҷκÎÅÍ ¸¸µé¾îÁ³À» ¶§ ·ÎÄà Ŭ¶óÀ̾ðÆ®ÀÇ ´ë±â ¸®Äù½ºÆ®´Â ´ÙÀ½Áß ÇϳªÀÇ ¹æ¹ýÀ¸·Î ¿Ï·áµÈ´Ù:

  • Ŭ¶óÀÌ¾ðÆ®°¡ Áö¿¬µÈ ¿¬°á ½ÂÀÎÀ» ÀεðÄÉÀÌÆ®ÇÏ´Â TDI_QUERY_ACCEPT·Î Flags¸¦ ¼³Á¤ÇÑ´Ù¸é Æ®·£½ºÆ÷Æ®´Â ´ë±â ¸®Äù½ºÆ®¸¦ ¿Ï·áÇϰí Ŭ¶óÀÌ¾ðÆ®´Â Æ®·£½ºÆ÷Æ®·Î Áï½Ã TDI_ACCEPT³ª TDI_DISCONNECT ¸®Äù½ºÆ®¸¦ Á¦½ÃÇϹǷνá Á¦°øµÈ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀ» ¹Þ¾ÆµéÀ̰ųª °ÅÀýÇØ¾ßÇÑ´Ù.
  • Ŭ¶óÀÌ¾ðÆ®°¡ Flags¸¦ 0À¸·Î ¼³Á¤ÇÑ´Ù¸é ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â Áö¿¬µÈ ¿¬°á ½ÂÀÎÀ» Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ Æ®·£½ºÆ÷Æ®´Â ¿ø°ÝÁö·Î Ŭ¶óÀÌ¾ðÆ®°¡ Á¦°øÇÑ ½ÂÀÎ µ¥ÀÌŸ¸¦ °¡Áö°í ½ÂÀÎÀ» Àü¼ÛÇÑ´Ù. ±×¸®°í ´ë±â ¸®Äù½ºÆ®¸¦ ¿Ï·áÇÑ´Ù.
´ë±â ¸®Äù½ºÆ®¸¦ Çϱâ Àü¿¡ Ŭ¶óÀÌ¾ðÆ®´Â TdiBuildSetEventHandler ÇÔ¼ö¸¦ °¡Áö°í ÇϳªÀÌ»óÀÇ IRP¸¦ ¼³Á¤ÇÏ°í ¿¬°á ¿£µåÆ÷ÀÎÆ®¿Í ¿¬°üµÈ ·ÎÄà ÁÖ¼Ò¸¦ À§Çؼ­ ClientEvent(Chained)Receive(Expedited) Çڵ鷯¸¦ µî·ÏÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ À̰ÍÀ» ÇÑ´Ù¸é ClientEvent(Chained)Receive(Expedited) ·çƾÀº Ŭ¶óÀ̾ðÆ®ÀÇ ´ë±â ¸®Äù½ºÆ®°¡ ¿Ï·áµÇ±â Àü¿¡ TSDU¸¦ ¹ÞÀ» ¼ö ÀÖ´Ù. ±×·¯ÇÑ Å¬¶óÀÌ¾ðÆ®´Â ´ë±â ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ Áï°¢ÀûÀÎ ¿¬°áÀ» ¹Þ¾ÆµéÀÏ Áغñ°¡ µÇ¾îÀÖ¾î¾ßÇÑ´Ù.

Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°á ¿£µåÆ÷ÀÎÆ®¿¡ ´ëÇÑ ´ë±â°¡ ƯÁ¤ ·ÎÄà ÁÖ¼Ò»ó¿¡¼­ Áö¿¬ÁßÀÏ ¶§ Ŭ¶óÀ̾ðÆ®ÀÇ ClientEventConnect ÇÔ¼ö´Â ƯÁ¤ÇÑ »óȲ¿Ü¿¡´Â È£ÃâµÉ ¼ö¤Ì¾ø´Ù. Áï ´ë±â ¿¬»êÀÌ Áö¿¬ÀÌ°í Æ®·£½ºÆ÷Æ®°¡ ¿ø°ÝÀÇ ÁÖ¼Ò ½ÂÀÎ ±âÁØÀÌ ´ë±â ¿¬»êÀ» ¿Ï·á·ÎºÎÅÍ ¸·´Â °ÍÀÌ´Ù¶ó°í °áÁ¤ÇÑ´Ù¸é ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â ClientEventConnect ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.

Àü¿¡ ¾ö±ÞÇßµíÀÌ ¸î¸î Æ®·£½ºÆ÷Æ®´Â ´ë±âÁß¿¡ ¿ø°ÝÁöÀÇ ºÎºÐÀûÀÎ ÁÖ¼ÒÀÇ »ç¾çÀ» Áö¿øÇÑ´Ù. ¶ÇÇÑ Æ®·£½ºÆ÷Æ®´Â QOSÀÇ »ç¾çÀ» Áö¿øÇÑ´Ù. ¿¹¸¦µé¾î ±×·¯ÇÑ TDI Æ®·£½ºÆ÷Æ®ÀÇ Å¬¶óÀÌ¾ðÆ®´Â Æ®·£½ºÆ÷Æ® Á¤ÀÇ ½ÅÅýº¿Í ÀÇ¹Ì Ã¼°è¸¦ °¡Áø °¡º¯ÀûÀÎ ±æÀÌ·Î Ä«¿îÆ®µÈ ¹®ÀÚ¿­À» »ç¿ëÇÏ¿© ´ë±â¸¦ À§ÇÑ QOS¸¦ ¼­¼úÇÑ´Ù.