-
-
[旧帖] [求助]对驱动程序中Dispatch函数的理解 0.00雪花
-
发表于: 2007-11-29 16:46 3891
-
在Sfilter中默认的分派函数是DriverObject->MajorFunction[i]=SfPassThrough,SfPassThrough函数的定义如下:
NTSTATUS
SfPassThrough (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
其中的DeviceObject对象有时候是控制设备对象,有时候是过滤设备对象,我对这个总是不很理解,今天突然觉得想明白了,不知道对不对。。。
如果是Win32应用程序发送的IRP访问本驱动程序,那这个默认的分派函数中的DeviceObject应该是指的控制设备对象,因为Win32程序通过注册的设备接口访问设备,那个符号链接名的实际指向就是DriverEntry函数中的命名的控制设备对象。
如果是发送给文件系统的IRP被Sfilter拦截的话,那这个DeviceObject应该是过滤设备对象,因为Sfilter创建了一个过滤设备对象来绑定到文件系统上,截获所有发送给文件系统的IRP。
这是我今天突然理解到的,我不知道理解的对不对,请大家帮我看看,给我点建议或我哪理解有误的地方。
还有初学者理解点东西不容易,您觉得太简单不愿回答就当看个乐儿吧。
NTSTATUS
SfPassThrough (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
其中的DeviceObject对象有时候是控制设备对象,有时候是过滤设备对象,我对这个总是不很理解,今天突然觉得想明白了,不知道对不对。。。
如果是Win32应用程序发送的IRP访问本驱动程序,那这个默认的分派函数中的DeviceObject应该是指的控制设备对象,因为Win32程序通过注册的设备接口访问设备,那个符号链接名的实际指向就是DriverEntry函数中的命名的控制设备对象。
如果是发送给文件系统的IRP被Sfilter拦截的话,那这个DeviceObject应该是过滤设备对象,因为Sfilter创建了一个过滤设备对象来绑定到文件系统上,截获所有发送给文件系统的IRP。
这是我今天突然理解到的,我不知道理解的对不对,请大家帮我看看,给我点建议或我哪理解有误的地方。
还有初学者理解点东西不容易,您觉得太简单不愿回答就当看个乐儿吧。
赞赏
赞赏
雪币:
留言: