TdiMapUserRequest
NTSTATUS
TdiMapUserRequest(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp
);
TdiMapUserRequest ÇÔ¼ö´Â ÀÔ·Â IRP¿¡ ¼¼úµÈ IOCTL_TDI_XXX Äڵ带 ÀνÄÇÑ´Ù¸é MajorFunctionÀÌ IRP_MJ_DEVICE_CONTROL·Î ¼³Á¤µÈ ÁÖ¾îÁø IRP¸¦ IRP_MJ_INTERNAL_DEVICE_CONTROL ¸®Äù½ºÆ®·Î ¹Ù²Û´Ù.
¸Å°³º¯¼ö
- DeviceObject
- Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡ ÀÇÇØ¼ »ý¼ºµÈ ÀåÄ¡ °´Ã¼¸¦ °¡¸®Å²´Ù.
- Irp
- º¯È¯µÇ´Â »ç¿ëÀÚ IOCTL_XXX ¸®Äù½ºÆ®¸¦ °¡¸®Å²´Ù.
- IrpSp
- º¯È¯µÇ´Â I/O ½ºÅà ·ÎÄÉÀ̼ÇÀ» °¡¸®Å²´Ù.
Æ®·£½ºÆ÷Æ®ÀÇ TdiDispatchDeviceControl ·çƾÀº ÀÌ Æ÷ÀÎÅ͸¦ ¾ò±â À§Çؼ ¹Ì¸® IoGetCurrentIrpStackLocation ÇÔ¼ö¸¦ È£ÃâÇß´Ù.
¸®Åϰª
TdiMapUserRequest ÇÔ¼ö°¡ ÁÖ¾îÁø IOCTL_TDI_XXX ÀåÄ¡ÅëÁ¦ ¸®Äù½ºÆ®¸¦ TDI_XXX ³»ºÎ ÀåÄ¡ÅëÁ¦ ¸®Äù½ºÆ®·Î ¹Ù²Û´Ù¸é ÀÌ ÇÔ¼ö´Â STATUS_SUCCESS¸¦ ¸®ÅÏÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ´ÙÀ½Áß Çϳª¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù:
- STATUS_INVALID_PARAMETER
- IOCTL_TDI_SET_EVENT_HANDLER°¡ ÀÔ·Â IRPÀÇ ÁÖ¾îÁø I/O ½ºÅà ·ÎÄÉÀ̼ǿ¡ ¼¼úµÈ´Ù¸é »ç¿ëµÈ´Ù.
- STATUS_NOT_IMPLEMENTED
- TdiMapUserRequest ÇÔ¼ö°¡ ÀÔ·Â IRPÀÇ ÁÖ¾îÁø I/O ½ºÅà ·ÎÄÉÀ̼ǿ¡ ¼¼úµÈ IOCTL_XXX Äڵ带 ÀνÄÇÏÁö ¸øÇÑ´Ù¸é »ç¿ëµÈ´Ù.
ÁÖ¼®
Æ®·£½ºÆ÷Æ®ÀÇ TdiDispatchDeviceControl ·çƾÀ¸·Î Àü´ÞµÈ IRP¿¡ ¼³Á¤µÉ ¼ö ÀÖ´Â ½Ã½ºÅÛ Á¤ÀÇ IOCTL_TDI_XXX ÄÚµåÀÇ ´ëºÎºÐÀ» À§Çؼ TdiMapUserRequest ÇÔ¼ö´Â ´ëÀÀÇÏ´Â Ä¿³Î ¸ðµå TDI_XXX ¸®Äù½ºÆ®ÀÇ Æ÷¸ËÀ¸·Î ÇöÀç I/O ½ºÅà ·ÎÄÉÀ̼ÇÀ» ¹Ù²Û´Ù.
¿¹¸¦µé¾î IrpSp->Parameters.DeviceIoControl.IoControlCode°¡ ÀÔ·Â IRP¿¡ IOCTL_TDI_LISTENÀ¸·Î ¼³Á¤µÈ´Ù¸é TdiMapUserRequest ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ I/O ½ºÅà ·ÎÄÉÀ̼ÇÀ» ´Ù½Ã Æ÷¸ËÇÑ´Ù:
- IRP_MJ_INTERNAL_DEVICE_CONTROL·Î MajorFunctionÀ» ¸®¼ÂÇÑ´Ù.
- MinorFunctionÀ» TDI_LISTENÀ¸·Î ¼³Á¤ÇÑ´Ù.
- ÀÔ·Â Irp->AssociatedIrp.SystemBuffer°¡ NULLÀÌ ¾Æ´Ï¶ó¸é, IrpSp->Parameters¸¦ È£ÃâÀÚ Á¦°ø Á¤º¸¸¦ °¡Áö°í ¼³Á¤µÈ TDI_REQUEST_KERNEL_LISTEN ±¸Á¶Ã¼ÀÇ ÁÖ¼Ò·Î ¼³Á¤Çضó.
TdiDispatchDeviceControl ÇÔ¼ö´Â º¯ÇüµÈ IRP¸¦ °¡Áö°í TdiDispatchInternalDeviceControl ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. ±×·¡¼ ½Ã½ºÅÛ Á¤ÀÇ IOCTL_TDI_XXX¿Í ±×°Í¿¡ ´ëÀÀÇÏ´Â TDI_XXX ¸®Äù½ºÆ®ÀÇ Ã³¸®¸¦ À§Çؼ °¡Áö°í ÀÖ´Â º¹»çµÈ ÄÚµå°æ·Î·ÎºÎÅÍ Æ®·£½ºÆ÷Æ®¸¦ ÀúÀåÇÑ´Ù.
Ä¿³Î ¸ðµå TDI_REGISTER_EVENT_HANDLER°¡ ´ëÀÀÇÏ´Â »ç¿ëÀÚ IOCTL_TDI_REGISTER_EVENT_HANDLER¸¦ °¡Áö´Â µ¿¾È¿¡ TdiMapUserRequest ÇÔ¼ö´Â ±× ÀÔ·Â IRP¸¦ ¸ÊÇϱâ À§ÇÑ ½Ãµµ¸¦ ½ÇÆÐÇÑ´Ù. Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®¸¸ÀÌ TDI Æ®·£½ºÆ÷Æ®¸¦ °¡Áö°í À̺¥Æ® Çڵ鷯¸¦ µî·ÏÇÒ ¼ö ÀÖ´Ù. ±×·¡¼ Æ®·£½ºÆ÷Æ®ÀÇ TdiDispatchDeviceControl ·çƾÀº À̺¥Æ® Çڵ鷯¸¦ ¼³Á¤Çϱâ À§Çؼ À¯È¿ÇÑ ¸®Äù½ºÆ®¸¦ °¡Áö°í È£ÃâµÉ ¼ö ¾ø´Ù.
Æ®·£½ºÆ÷Æ®¿ÍÀÇ Åë½Å¿¡ ´ëÇØ¼ Æ®·£½ºÆ÷Æ®¿¡ Çå½ÅÀûÀÎ Win32 ¾îÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ¼ »ç¿ëµÇ´Â Àü¿ë IOCTL_XXX Äڵ带 Æ®·£½ºÆ÷Æ®°¡ Á¤ÀÇÇÑ´Ù¸é Æ®·£½ºÆ÷Æ®ÀÇ TdiDispatchDeviceControl ·çƾÀº TdiMapUserRequest ÇÔ¼ö°¡ STATUS_NOT_SUPPORTED¸¦ ¸®ÅÏÇÏµç ¾Æ´Ïµç ±×·¯ÇÑ ¸®Äù½ºÆ®¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù. Á¤ÀÇµÈ µå¶óÀ̹ö ƯÁ¤ Àü¿ë IOCTL¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â Ä¿³Î ¸ðµå µå¶óÀ̹ö ·¹ÆÛ·±½º¸¦ ºÁ¶ó.
TdiMapUserRequest ÇÔ¼öÀÇ È£ÃâÀÚ´Â IRQL PASSIVE_LEVEL¿¡¼ ½ÇÇàÇÑ´Ù.
|