jkgear
驱动牛犊
驱动牛犊
  • 注册日期2004-09-24
  • 最后登录2005-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4615回复:15

sfilter的重定向操作的源码,大家帮忙看看

楼主#
更多 发布于:2005-01-24 17:40
    PDEVICE_EXTENSION      deviceExtension;
PDEVICE_OBJECT         attachedDevice;
PIO_STACK_LOCATION     irpSp = IoGetCurrentIrpStackLocation(Irp);
NTSTATUS               status;
PFILE_OBJECT           FileObject  = irpSp->FileObject;
LARGE_INTEGER          offset = irpSp->Parameters.Read.ByteOffset;
ULONG                  length = irpSp->Parameters.Read.Length;
    WCHAR                  nameBuf[512];
UNICODE_STRING         name;
UNICODE_STRING         sourceName;
UNICODE_STRING         destinationName;

if(!(DeviceObject->DriverObject==FsDriverObject))
{
   Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
        Irp->IoStatus.Information = 0;
   status = Irp->IoStatus.Status;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
   return status;
}


deviceExtension        =    DeviceObject->DeviceExtension;
attachedDevice   =    deviceExtension->FileSystemDeviceObject;

if(deviceExtension->RealDeviceObject==NULL)
{
   IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(attachedDevice,Irp);
}


RtlInitUnicodeString( &sourceName, L"\\\\globaluser.txt" );

    RtlInitEmptyUnicodeString(&name,nameBuf,512);

    if (FileObject&&RtlCompareUnicodeString( &sourceName, &FileObject->FileName, TRUE ) == 0)
{

RtlCopyUnicodeString(&name,&FileObject->FileName);
            
DbgPrint("File Name: %ws",(&name)->Buffer);

ExFreePool(FileObject->FileName.Buffer);
FileObject->FileName.Length = 0;
FileObject->FileName.MaximumLength = name.MaximumLength;
FileObject->FileName.Buffer=(PWCHAR)ExAllocatePool(NonPagedPool, name.MaximumLength);

            RtlInitUnicodeString( &destinationName, L"\\\\??\\\\G:\\\\user\\\\globaluser.txt" );
RtlCopyUnicodeString(&FileObject->FileName, &destinationName);

FileObject->FileName.Buffer[FileObject->FileName.Length/2] = UNICODE_NULL;

Irp->IoStatus.Status = STATUS_REPARSE;
            Irp->IoStatus.Information = IO_REPARSE;
            IoCompleteRequest( Irp, IO_NO_INCREMENT );


            return STATUS_REPARSE;
        
}
    else
{
        IoSkipCurrentIrpStackLocation(Irp);
        return IoCallDriver(attachedDevice,Irp);
}

这段代码添加在sfcreate中。现在可以实现同盘文件的重定向,例如,当发打开G:\\globaluser.txt的请求,实际打开的是G:\\user\\globaluser.txt
但将G:\\user\\globaluser.txt改为不同盘的文件时就显示“系统找不到指定路径”,应该是可以实现不同盘重定向操作的,大家帮帮忙。
另外一个问题:请问sfilter可不可以实现网络文件的重定向。


[编辑 -  1/24/05 by  jkgear]

[编辑 -  1/24/05 by  jkgear]
附件名称/大小 下载次数 最后更新
2005-01-24_sfilter.c (96KB)  360

最新喜欢:

wangzaiwangza...
jkgear
驱动牛犊
驱动牛犊
  • 注册日期2004-09-24
  • 最后登录2005-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-24 21:38
自己搞定了,今天幸运。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2005-01-24 22:35
如何解决问题的,请说明下??
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
gz818
驱动小牛
驱动小牛
  • 注册日期2002-02-26
  • 最后登录2008-11-15
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-25 16:32
请讲明如何解决的!!!!
jkgear
驱动牛犊
驱动牛犊
  • 注册日期2004-09-24
  • 最后登录2005-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-26 10:08
这个代码是好使的。包括不同盘,网络盘。
上次的错误很幼稚,呵呵,我把目标目录设置为F:\\user\\globaluser.txt,而实际我在F盘建立的是F:\\usr\\globaluser.txt,所以就显示找不到指定路径了。
我现在在做查询目录的重解析,不知道哪位考虑过,给点建议呀。不知道能不能实现,正在瞎捣鼓。等我做出来了也把源码贴出来。
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-26 11:25
顶。。
Ideas for life!
wqmmmmm
驱动牛犊
驱动牛犊
  • 注册日期2004-09-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-01 10:49
这位大老
你说的网络重定向实现了吗
如果实现了给点经验啊
OnebyOnePlease
驱动牛犊
驱动牛犊
  • 注册日期2004-05-13
  • 最后登录2010-03-19
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望31点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-01 11:15
我做了试验,网络文件也是可以重定向的。但是如过你共享这个文件所在的目录,再通过网络来访问这个文件,就会down掉。
wqmmmmm
驱动牛犊
驱动牛犊
  • 注册日期2004-09-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-04-01 16:31
OnebyOnePlease   大大大佬
你是说,如果我在把,本地这个被重定向的文件的父目录再共享
第三台机器来访问就会挂掉
是这个意思吗?
啊!!!我的算盘又落空啦 哈哈哈!
kevin73
驱动牛犊
驱动牛犊
  • 注册日期2004-10-27
  • 最后登录2005-06-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-05-26 16:17
各位大佬,请教一下,下面这句话实现了什么功能?不好意思,不太明白。
FileObject->FileName.Buffer[FileObject->FileName.Length/2] = UNICODE_NULL;
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-05-27 08:32
支持!!!
lydzyw
驱动牛犊
驱动牛犊
  • 注册日期2004-06-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分257分
  • 威望40点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-05-27 10:08
请各位指教,他这段代码中,将FileObject->FileName中的内容换成重定向的内容后,怎么只return而不调用IoCallDriver往下发?

if (FileObject&&RtlCompareUnicodeString( &sourceName, &FileObject->FileName, TRUE ) == 0)
{
.........

Irp->IoStatus.Status = STATUS_REPARSE;
Irp->IoStatus.Information = IO_REPARSE;
IoCompleteRequest( Irp, IO_NO_INCREMENT );

return STATUS_REPARSE;

}
liyf_shanghai
驱动牛犊
驱动牛犊
  • 注册日期2005-05-27
  • 最后登录2005-05-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-05-27 16:39
我也是靠这个帖子学了一手,不错不错!支持。
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-05-29 08:44
SFILTER是文件过滤驱动?
FILEMON也是啊,他们有什么不一样的:)?
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-05-30 00:09
重定向如果是在ifs filter,可简单,改路径,如果不同符,fsd object也改一下也可以.
jackxin
驱动牛犊
驱动牛犊
  • 注册日期2002-07-29
  • 最后登录2009-06-16
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分1分
  • 专家分0分
15楼#
发布于:2005-06-25 05:56
不就是将那个文件的文件名加了一个结尾符;
游客

返回顶部