TDI_QUERY_INFORMATION
Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â TDI_QUERY_INFORMATION ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ ƯÁ¤ ¿¬°á¿¡¼ÀÇ I/O¿¡ ´ëÇÑ ºê·Îµåij½ºÆ® ÁÖ¼Ò, Æ®·£½ºÆ÷Æ®ÀÇ ´É·Â, ȤÀº ÇöÀç Åë°è¿Í °°Àº Ŭ¶óÀÌ¾ðÆ® Æ¯Á¤ ŸÀÔÀÇ Á¤º¸¸¦ ¸®ÅÏÇϵµ·Ï ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡°Ô ¿ä±¸ÇÑ´Ù.
IRP
IrpSp·Î½á ´ÙÀ½ÀÇ ¸®½ºÆ®¿¡ º¸¿©Áö´Â IRP¾È¿¡ ÀÚ½ÅÀÇ I/O ½ºÅà ·ÎÄÉÀ̼ǿ¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¾ò±â À§Çؼ ÁÖ¾îÁø Irp¸¦ °¡Áö°í Æ®·£½ºÆ÷Æ®´Â IoGetCurrentIrpStackLocation ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. IRP¿¡ ´ëÇÑ Æ÷ÀÎÅÍ´Â Irp·Î½á ´ÙÀ½ÀÇ ¸®½ºÆ®¿¡ º¸¿©Áø´Ù. ÀÌ ¸®Äù½ºÆ®¿Í ¿¬°üµÈ IRP ¸â¹ö´Â´ÙÀ½°ú °°´Ù:
- Irp->IoStatus.Status
- Äõ¸® Á¤º¸ ¸®Äù½ºÆ®ÀÇ ¸¶Áö¸· »óŸ¦ ¼¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â IRP¸¦ ¿Ï·áÇϱâ Àü¿¡ °¡´ÉÇÏ´Ù¸é ´ÙÀ½Áß ÇϳªÀÇ °ªÀ¸·Î ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù:
STATUS_SUCCESS
STATUS_BUFFER_OVERFLOW
STATUS_INSUFFICIENT_RESOURCES
STATUS_INVALID_CONNECTION
STATUS_INVALID_DEVICE_REQUEST
STATUS_NOT_IMPLEMENTED
- Irp->IoStatus.Information
- Æ®·£½ºÆ÷Æ®°¡ Ŭ¶óÀÌ¾ðÆ®·Î ¸®ÅÏÇÏ´Â Á¤º¸ÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼¼úÇÑ´Ù.
- IrpSp->MajorFunction
- IRP_MJ_INTERNAL_DEVICE_CONTROL¸¦ ¼¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ TDI_XXX ¸®Äù½ºÆ®¸¸À» ´Ù·ç´Â TdiDispatchInternalDeviceControl ÇÔ¼ö¸¦ ÀͽºÆ÷Æ®ÇÑ´Ù¸é ÀÌ ¸â¹ö¸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù.
- IrpSp->MinorFunction
- TDI_QUERY_INFORMATIONÀ» ¼¼úÇÑ´Ù.
- IrpSp->FileObject
- ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ȤÀº ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ¿¸° ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù. Æ®·£½ºÆ÷Æ®´Â ÀÌ ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ȤÀº ÅëÁ¦ ä³Î¿¡ ´ëÇØ¼ À¯ÁöÇÏ´Â »óŸ¦ Á¢±ÙÇϱâ À§Çؼ FsContext¿Í °¡´ÉÇÏ´Ù¸é FsContext2 Çʵ带 »ç¿ëÇÑ´Ù.
- IrpSp->Parameters
- ´ÙÀ½°ú °°ÀÌ Á¤ÀÇµÈ TDI_REQUEST_KERNEL_QUERY_INFORMATION ±¸µµÃ¼¸¦ °¡¸®Å²´Ù:
struct _TDI_REQUEST_KERNEL_QUERY_INFO {
LONG QueryType;
PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
} TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION;
Æ®·£½ºÆ÷Æ®´Â RequestConnectionInformation ¸â¹ö°¡ ÀüÇüÀûÀ¸·Î NULLÀ̱⠶§¹®¿¡ ÀÌ ¸â¹ö¸¦ ¹«½ÃÇÒ ¼ö ÀÖµû. NetBIOS Æ®·£½ºÆ÷Æ®´Â ³ªÁß¿¡ ¼¼ú(ÁÖ¼®À» ºÁ¶ó)µÇµíÀÌ ÀÌ ¸â¹ö¸¦ ¿ä±¸ÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®°¡ ¸®Äù½ºÆ®ÇÑ Á¤º¸°¡ ¹«¾ùÀÎÁö¸¦ °áÁ¤Çϱâ À§Çؼ QueryType ¸â¹ö¸¦ üũÇÑ´Ù. ±×¸®°í ¸®ÅϵǴ Á¤º¸ÀÇ Æ÷¸ËÀ» °áÁ¤ÇÑ´Ù. ¶§¶§·Î Irp->MdlAddress¿¡ ¸ÊµÈ ¹öÆÛÀÇ Å¬¶óÀÌ¾ðÆ® Á¦°ø ³»¿ëÀ» °Ë»çÇϱ⵵ ÇÑ´Ù.
¸ðµç TDI Æ®·£½ºÆ÷Æ®¿¡ ´ëÇØ¼ QueryTypeÀº ´ÙÀ½ ½Ã½ºÅÛ Á¤ÀÇ °ªÁß¿¡ Çϳª·Î ¼³Á¤µÉ ¼ö ÀÖ´Ù:
- TDI_QUERY_ADDRESS_INFO
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_ADDRESS_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ƯÁ¤ ·ÎÄà ÁÖ¼Ò¿¡ ´ëÇØ¼ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
- IrpSp->FileObject´Â Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ ÁÖ¼Ò¿Í ÀÌ¹Ì ¿¬°üµÈ ¿¬°á ¿£µåÆ÷ÀÎÆ®³ª ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.
- TDI_QUERY_CONNECTION_INFO
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_CONNECTION_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ƯÁ¤ ¿¬°á¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
IrpSp->FileObject´Â Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ ¿¬°áÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.
- TDI_QUERY_BROADCAST_ADDRESS
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TRANSPORT_ADDRESS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ºê·Îµåij½ºÆ® ÁÖ¼Ò¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.
- TDI_QUERY_NETWORK_ADDRESS
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TRANSPORT_ADDRESS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ·ÎÄà ÁÖ¼Ò¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.
- TDI_QUERY_DATA_LINK_ADDRESS
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TRANSPORT_ADDRESS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ µ¥ÀÌŸ¸µÅ© ÁÖ¼Ò¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.
- TDI_QUERY_PROVIDER_INFO ȤÀº TDI_QUERY_PROVIDER_INFORMATION
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_PROVIDER_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ÀÚ½ÅÀÇ ´É·Â¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.
- TDI_QUERY_PROVIDER_STATISTICS
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_PROVIDER_STATISTICS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ ÀÚ¿ø»ç¿ë¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.
- TDI_QUERY_DATAGRAM_INFO
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_DATAGRAM_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ »çÀÌÁîÀÇ Á¦ÇѰú µ¥ÀÌŸ±×·¥ÀÇ ¼ö¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù. ¶ÇÇÑ Æ®·£½ºÆ÷Æ®´Â Æ®·¡½ºÆ÷Æ® °³¹ßÀÚÀÇ °áÁ¤¿¡¼ ¿¸° Æ®·£½ºÆ÷Æ® ÁÖ¼Ò »ó¿¡¼ ÀÌ Äõ¸®¸¦ Áö¿øÇÒ ¼ö ÀÖ´Ù.
- TDI_QUERY_MAX_DATAGRAM_INFO
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ TDI_MAX_DATAGRAM_INFO ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ µ¥ÀÌŸ±×·¥ »çÀÌÁîÀÇ Á¦ÇÑ¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·¡½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
IrpSp->FileObject´Â ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù. ¶ÇÇÑ Æ®·£½ºÆ÷Æ®´Â Æ®·¡½ºÆ÷Æ® °³¹ßÀÚÀÇ °áÁ¤¿¡¼ ¿¸° Æ®·£½ºÆ÷Æ® ÁÖ¼Ò »ó¿¡¼ ÀÌ Äõ¸®¸¦ Áö¿øÇÒ ¼ö ÀÖ´Ù.
¸ðµç Æ®·£½ºÆ÷Æ®°¡ Áö¿øÇؾßÇÏ´Â ¾ÕÀÇ Äõ¸®¿¡ Ãß°¡Çؼ ƯÁ¤ Æ®·£½ºÆ÷Æ®´Â ´Ù¸¥ °ÍµéÀ» Áö¿øÇÑ´Ù. ¿¹¸¦µé¾î NetBIOS Æ®·£½ºÆ÷Æ®´Â ³ªÁß¿¡ ¼¼ú(ÁÖ¼®À» ºÁ¶ó)µÇµíÀÌ ¼¼ °³ÀÇ Ãß°¡ÀûÀÎ ½Ã½ºÅÛ Á¤ÀÇ TDI_QUERY_XXX¿¡ ´ëÇØ¼ ÀÀ´äÇØ¾ßÇÑ´Ù.
- Irp->MdlAddress
- Ŭ¶óÀÌ¾ðÆ® Á¦°ø ³»¿ëÀÌ ¸®Äù½ºÆ®¸¦ ¼öÇàÇϱâ À§Çؼ ¿ä±¸ÇÏ´Â ¹«¾ùÀΰ¡¸¦ Æ÷ÇÔÇϴ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¸¦ ¸ÅÇÎÇÏ´Â MDLÀÇ Ã¼Àο¡¼ °¡´ÉÇÏ´Ù¸é óÀ½ MDLÀ» °¡¸®Å²´Ù. ÀÔ·Â ³»¿ë°ú ÀÌ ¹öÆÛÀÇ Æ÷¸ËÀº ÁÖ¾îÁø QueryType¿¡ ÀÇÁ¸ÇÑ´Ù.
ÁÖ¼®
NetBIOS Æ®·£½ºÆ÷Æ®¿¡ ´ëÇØ¼ QueryTypeÀº ´ÙÀ½Áß Çϳª¸¦ ¼¼úÇÒ ¼ö ÀÖ´Ù:
- TDI_QUERY_FIND_NAME
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ FIND_NAME_BUFFER ±¸Á¶Ã¼¸¦ µû¸£´Â FIND_NAME_HEADER ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ NetBIOS Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù. ÀÌ Äõ¸® ŸÀÔ¿¡ ´ëÇØ¼ RequestConnectionInformationÀº À¯È¿ÇÑ TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼¸¦ °¡¸®ÄѾßÇÑ´Ù.
- TDI_QUERY_SESSION_STATUS
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ SESSION_BUFFER ±¸Á¶Ã¼¸¦ µû¸£´Â SESSION_HEADER ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
- TDI_QUERY_ADAPTER_STATUS
- MdlAddress¿¡ ¸ÊµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ¹öÆÛ¾È¿¡ ADAPTER_STATUS ±¸Á¶Ã¼·Î½á Æ÷¸ËµÈ Á¤º¸¸¦ ¸®ÅÏÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®¸¦ ¸®Äù½ºÆ®ÇÑ´Ù.
¾ÕÀÇ NetBIOS ƯÁ¤ ±¸Á¶Ã¼¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸¸¦ À§Çؼ´Â Ç÷§Æû SDK¸¦ ºÁ¶ó.
´ëºÎºÐÀÇ °æ¿ì¿¡ TdiBuildQueryInformation ÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ IRP¾È¿¡ ä¿ì±â À§Çؼ »ç¿ëÇÏ´Â ¸ÅÅ©·ÎÀÌ´Ù.
TdiBuildQueryInformation ¸ÅÅ©·Î°¡ TDI_REQUEST_KERNEL_QUERY_INFORMATION ±¸Á¶Ã¼ÀÇ RequestConnectionInformation ¸â¹ö¸¦ NULL·Î ¼³Á¤Çϱ⠶§¹®¿¡ NetBIOS Æ®·£½ºÆ÷Æ®ÀÇ Å¬¶óÀÌ¾ðÆ®´Â TDI_QUERY_FIND_NAME Äõ¸® ŸÀÔÀ» °¡Áö°í TdiBuildQueryInformation ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. TDI_QUERY_FIND_NAMEÀ» »ç¿ëÇÏ¿© TDI_QUERY_INFORMATION ¸®Äù½ºÆ®¸¦ À§ÇÑ IRP¸¦ ¼³Á¤Çϱâ À§Çؼ NetBIOS Æ®·£½ºÆ÷Æ®ÀÇ Å¬¶óÀÌ¾ðÆ®´Â TdiBuildQueryInformation ÇÔ¼ö¿¡ ´ëÇÑ ÄÚµå¿Í À¯»çÇÑ Äڵ带 »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ RequestConnectionInformation¿¡ ´ëÇØ¼ TDI_CONNECTION_INFORMATION ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ¼¼úÇØ¾ßÇÑ´Ù.
|