阅读:4615回复:15
sfilter的重定向操作的源码,大家帮忙看看
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] |
|
最新喜欢:wangza... |
沙发#
发布于:2005-01-24 21:38
自己搞定了,今天幸运。
|
|
板凳#
发布于:2005-01-24 22:35
如何解决问题的,请说明下??
|
|
|
地板#
发布于:2005-01-25 16:32
请讲明如何解决的!!!!
|
|
地下室#
发布于:2005-01-26 10:08
这个代码是好使的。包括不同盘,网络盘。
上次的错误很幼稚,呵呵,我把目标目录设置为F:\\user\\globaluser.txt,而实际我在F盘建立的是F:\\usr\\globaluser.txt,所以就显示找不到指定路径了。 我现在在做查询目录的重解析,不知道哪位考虑过,给点建议呀。不知道能不能实现,正在瞎捣鼓。等我做出来了也把源码贴出来。 |
|
5楼#
发布于:2005-01-26 11:25
顶。。
|
|
|
6楼#
发布于:2005-04-01 10:49
这位大老
你说的网络重定向实现了吗 如果实现了给点经验啊 |
|
7楼#
发布于:2005-04-01 11:15
我做了试验,网络文件也是可以重定向的。但是如过你共享这个文件所在的目录,再通过网络来访问这个文件,就会down掉。
|
|
8楼#
发布于:2005-04-01 16:31
OnebyOnePlease 大大大佬
你是说,如果我在把,本地这个被重定向的文件的父目录再共享 第三台机器来访问就会挂掉 是这个意思吗? 啊!!!我的算盘又落空啦 哈哈哈! |
|
9楼#
发布于:2005-05-26 16:17
各位大佬,请教一下,下面这句话实现了什么功能?不好意思,不太明白。
FileObject->FileName.Buffer[FileObject->FileName.Length/2] = UNICODE_NULL; |
|
10楼#
发布于:2005-05-27 08:32
支持!!!
|
|
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; } |
|
12楼#
发布于:2005-05-27 16:39
我也是靠这个帖子学了一手,不错不错!支持。
|
|
13楼#
发布于:2005-05-29 08:44
SFILTER是文件过滤驱动?
FILEMON也是啊,他们有什么不一样的:)? |
|
14楼#
发布于:2005-05-30 00:09
重定向如果是在ifs filter,可简单,改路径,如果不同符,fsd object也改一下也可以.
|
|
15楼#
发布于:2005-06-25 05:56
不就是将那个文件的文件名加了一个结尾符;
|
|