简介
有时在开发中,会遇到这样一种情况,当非常需要对某些内核函数进行挂钩时,而常规基于PE的挂钩,往往达不到目的。在本文中将要探讨的,是怎样直接挂钩内核函数,另外,在示例中,还要演示在系统中显示为一个基本磁盘的可移动USB存储设备,并在其上创建及管理多个分区(因为这样或那样的原因,Windows既不允许,也不能识别可移动存储设备上的多个分区,所以我们要“欺骗”一下系统)。因为本文中的示例只用作演示目的,所以只对一个函数进行了挂钩,但可对文中阐述的方法进行扩展,以处理多个函数(例如,工程中可能需要直接挂钩好几个NDIS库中的函数)。再者,你应该清楚地认识到,本文是在讲述直接挂钩,而不是研究USB存储,所以,用作示例的问题当然还可有其他的方法来解决。
我们的问题
USB设备在系统中表示的方式,定义在STORAGE_DEVICE_DESCRIPTOR结构的RemovableMedia字段中,此结构通常会在USBSTOR.SYS响应IOCTL_STORAGE_QUERY_PROPERTY请求时返回。如果设备生产商想让此设备显示为一个基本磁盘,会在驱动程序中设置STORAGE_DEVICE_DESCRIPTOR 结构中RemovableMedia字段,并在响应IOCTL_STORAGE_QUERY_PROPERTY请求时返回FALSE。由此,设备在系统中就显示为一个基本磁盘,而DISK.SYS也不知道它实际上
有时在开发中,会遇到这样一种情况,当非常需要对某些内核函数进行挂钩时,而常规基于PE的挂钩,往往达不到目的。在本文中将要探讨的,是怎样直接挂钩内核函数,另外,在示例中,还要演示在系统中显示为一个基本磁盘的可移动USB存储设备,并在其上创建及管理多个分区(因为这样或那样的原因,Windows既不允许,也不能识别可移动存储设备上的多个分区,所以我们要“欺骗”一下系统)。因为本文中的示例只用作演示目的,所以只对一个函数进行了挂钩,但可对文中阐述的方法进行扩展,以处理多个函数(例如,工程中可能需要直接挂钩好几个NDIS库中的函数)。再者,你应该清楚地认识到,本文是在讲述直接挂钩,而不是研究USB存储,所以,用作示例的问题当然还可有其他的方法来解决。
我们的问题
USB设备在系统中表示的方式,定义在STORAGE_DEVICE_DESCRIPTOR结构的RemovableMedia字段中,此结构通常会在USBSTOR.SYS响应IOCTL_STORAGE_QUERY_PROPERTY请求时返回。如果设备生产商想让此设备显示为一个基本磁盘,会在驱动程序中设置STORAGE_DEVICE_DESCRIPTOR 结构中RemovableMedia字段,并在响应IOCTL_STORAGE_QUERY_PROPERTY请求时返回FALSE。由此,设备在系统中就显示为一个基本磁盘,而DISK.SYS也不知道它实际上