TdiDispatchInternalDeviceControl
NTSTATUS
TdiDispatchInternalDeviceControl (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
TdiDispatchInternalDeviceControl ÇÔ¼ö´Â Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ TDI_XXX ÀåÄ¡ ÅëÁ¦ ¸®Äù½ºÆ®¸¦ ó¸®ÇÑ´Ù.
¸Å°³º¯¼ö
- DeviceObject
- TDI µå¶óÀ̹ö¿¡ ÀÇÇØ¼ »ý¼ºµÈ ÀåÄ¡ °´Ã¼¸¦ °¡¸®Å²´Ù.
- Irp
- IRP¸¦ °¡¸®Å²´Ù.
Æ®·£½ºÆ÷Æ®´Â IrpSp·Î½á ´ÙÀ½¿¡ ¸®½ºÆ®µÈ IRP¾È¿¡ ÀÚ½ÅÀÇ I/O ½ºÅà ·ÎÄÉÀ̼ǿ¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¾ò±â À§Çؼ ÁÖ¾îÁø Irp¸¦ °¡Áö°í IoGetCurrentIrpStackLocation ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â ÁøÇàÁßÀÎ ³»ºÎÀÇ ÀåÄ¡ ÅëÁ¦ ¸®Äù½ºÆ®¿¡¼ IRPÀÇ ´ÙÀ½ÀÇ ¸â¹ö·Î ¼³Á¤µÈ Á¤º¸¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù:
- IoStatus.Status
- ¿¬»êÀÇ ¸¶Áö¸· »óŸ¦ ¼¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®´Â TdiDispatchInternalDeviceControl ÇÔ¼ö¿¡ ÀÇÇØ¼ ¸®ÅϵǴ ¶È°°Àº °ªÀ¸·Î ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù.
- IoStatus.Information
- º¸Åë ÀÌ ¸â¹ö´Â 0 À¸·Î ÃʱâȵȴÙ. IrpSp->MinorFunction °ª¿¡ ÀÇÁ¸ÇÏ¿© Æ®·£½ºÆ÷Æ®´Â ÀÌ ¸â¹ö¸¦ Ŭ¶óÀÌ¾ðÆ®·Î ¸®ÅϵǴ µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö·Î ¸®¼ÂÇϰųª Æ®·£½ºÆ÷Æ®°¡ ÀÌ IRP¸¦ ¿Ï·áÇϱâ Àü¿¡ Àü¼ÛµÈ µ¥ÀÌŸÀÇ ¹ÙÀÌÆ® ¼ö·Î ¸®¼ÂÇÑ´Ù.
- IrpSp->MajorFunction
- IRP_MJ_INTERNAL_DEVICE_CONTROLÀ» ¼¼úÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ ÀÌ ¸®Äù½ºÆ®¸¸À» ´Ù·ç´Â TdiDispatchInternalDeviceControl ÇÔ¼ö¸¦ ÀͽºÆ÷Æ® ÇÑ´Ù¸é ÀÌ ¸â¹ö¸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù.
- IrpSp->MinorFunction
- ¼öÇàµÇ´Â ¿¬»êÀ» À§ÇÑ TDI_XXX Äڵ带 ¼¼úÇÑ´Ù.
- IrpSp->FileObject
- ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù. ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³Î¿¡¼ÀÇ ¿¬»êÀ» À§ÇÑ µå¶óÀ̹ö ÇÒ´ç »óŸ¦ Á¢±ÙÇϱâ À§Çؼ Æ®·£½ºÆ÷Æ®´Â ÀÌ ÆÄÀÏ °´Ã¼¾ÈÀÇ FsContext¿Í °¡´ÉÇÏ´Ù¸é FsContext2 ÇʵåÀÇ °ªÀ» »ç¿ëÇÑ´Ù.
¸®Åϰª
TdiDispatchInternalDeviceControl ÇÔ¼ö°¡ ¸®Äù½ºÆ®µÈ ¿¬»êÀ» ¼º°øÀûÀ¸·Î ¿Ï·áÇÑ´Ù¸é STATUS_SUCCESS¸¦ ¸®ÅÏÇÑ´Ù. ¹Ý¸é¿¡ ±×·¸Áö ¾Ê´Ù¸é STATUS_INVALID_DEVICE_REQUEST ȤÀº STATUS_INVALID_DEVICE_STATE°°Àº µå¶óÀ̹ö °áÁ¤ ¿¡·¯ »óŸ¦ ¸®ÅÏÇÑ´Ù.
ÁÖ¼®
¸®Äù½ºÆ®¸¦ ÁغñÇÒ ¶§ Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â TdiBuildInternalDeviceControlIrp ÇÔ¼ö¸¦ °¡Áö°í IRP¸¦ ÇÒ´çÇϰųª »óÀ§ÀÇ ³×´À¿÷ ÃþÀ¸·ÎºÎÅÍ Àü´ÞµÈ IRP¸¦ »ç¿ëÇÑ´Ù. IRP¾È¿¡ MajorFunction ÄÚµå·Î½á IRP_MJ_INTERNAL_DEVICE_CONTROL°ú MinorFunction ÄÚµå·Î½á ´ëÀÀÇÏ´Â TDI_XXX¸¦ °¡Áø ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®¸¦ À§ÇØ IRP¸¦ ¼³Á¤Çϱâ À§Çؼ Ŭ¶óÀÌ¾ðÆ®´Â TdiBuildXxx ¸ÅÅ©·Î¸¦ È£ÃâÇÑ´Ù. IRP°¡ ¼³Á¤µÆÀ» ¶§ Ŭ¶óÀÌ¾ðÆ®´Â ÇϺΠƮ·£½ºÆ÷Æ®ÀÇ TdiDispatchInternalDeviceControl ·çƾÀ¸·Î ¸®Äù½ºÆ®¸¦ Á¦ÃâÇϱâ À§Çؼ IoCallDriver ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
¾î¶² TDI_XXX´Â ÁÖ¼ÒÇÏ°í¸¸ ¿¬°üÀÌ ÀÖ°í ³ª¸ÓÁö´Â ¿¬°á ¿£µåÆ÷ÀÎÆ®¿Í ¿¬°üÀÌ ÀÖ´Ù. ±×¸®°í TDI_XXX ÄÚµåÀÇ ¼ºê¼ÂÀº ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³Î°ú ¿¬°üÀÌ Àֱ⠶§¹®¿¡ Æ®·£½ºÆ÷Æ®ÀÇ TdiDispatchInternalDeviceControl ·çƾÀº IrpSp->FileObject¿¡ ÁÖ¾îÁø ÆÄÀÏ °´Ã¼°¡ ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´ÂÁö¿¡ ´ëÇÑ °áÁ¤À» ÇÑ´Ù. ´ÙÀ½Àº TDI_XXX Äڵ尡 °¢°¢À» À§Çؼ 󸮵Ǵ °ÍÀ» ¿ä¾àÇÑ´Ù:
- ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â FileObject
- TDI_SEND_DATAGRAM
TDI_RECEIVE_DATAGRAM
TDI_SET_EVENT_HANDLER
- ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ±¸ÇöÇÏ´Â FileObject
- TDI_SEND
TDI_RECEIVE
TDI_ASSOCIATE_ADDRESS
TDI_DISASSOCIATE_ADDRESS
TDI_CONNECT
TDI_DISCONNECT
TDI_LISTEN
TDI_ACCEPT
- ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â FileObject
- TDI_QUERY_INFORMATION
TDI_SET_INFORMATION
TDI_ACTION
Æ®·£½ºÆ÷Æ®°¡ ó¸®ÇÏ´Â °¢°¢ÀÇ TDI_XXX¸¦ À§Çؼ TdiDispatchInternalDeviceControl ·çƾÀº º¸Åë ¸®Äù½ºÆ®µÈ ¿¬»êÀ» ¼öÇàÇϱâ À§Çؼ ³»ºÎÀÇ µå¶óÀ̹ö ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ƯÈ÷ ÀÌ ¸â¹ö°¡ 0 À¸·Î ¼³Á¤µÈ IRP¸¦ ¿Ï·áÇϱâ À§Çؼ TdiDispatchInternalDeviceControl ÇÔ¼ö¸¦ ¶°³ª´Â IoStatus.InformationÀ» ÀûÀýÇÑ °ªÀ¸·Î ¼³Á¤ÇÒ ¼ö Àֱ⠶§¹®¿¡ ±× ÇÔ¼ö°¡ µ¥ÀÌŸ¸¦ Àü¼ÛÇÑ´Ù¸é ³»ºÎÀÇ µå¶óÀ̹ö ÇÔ¼ö´Â IRP¸¦ ¿Ï·áÇÑ´Ù. °¢°¢ÀÇ ±×·¯ÇÑ ³»ºÎ ÇÔ¼ö´Â ÅëÁ¦¸¦ ¸®ÅÏÇϱâ Àü¿¡ TdiDispatchInternalDeviceControl ÇÔ¼ö°¡ º¸±ÞÇÏ´Â NTSTATUS ŸÀÔÀÇ °ªÀ» ¸®ÅÏÇÑ´Ù.
¿©±â¼ ¾ð±ÞµÈ °¢°¢ÀÇ TDI_XXX¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â ´ÙÀ½¿¡ ÀÖ´Â Chapter 2¸¦ ºÁ¶ó.
±âº»ÀûÀ¸·Î TdiDispatchInternalDeviceControl ÇÔ¼ö´Â IRQL PASSIVE_LEVEL¿¡¼ ½ÇÇàµÈ´Ù.
|