阅读:2001回复:16
5000块钱报酬,小问题:文件夹同步
想让C盘的一个目录A里面的所有操作,转移到D:盘的A目录,我用了这样的代码。
RtlInitEmptyUnicodeString( &NewFileName, NameBuf, sizeof(NameBuf) ); RtlAppendUnicodeToString( &NewFileName, L"\\??\\" ); RtlAppendUnicodeToString( &NewFileName, pFileName); // pFileName = c:\a\xxxxxxx FileNameBuffer = ExAllocatePool(NonPagedPool, NewFileName.MaximumLength); if (FileNameBuffer==NULL) { KdPrint(("fail to get enough buffer\n")); goto Done; } ExFreePool(pFileObject->FileName.Buffer); pFileObject->FileName.Length = 0; pFileObject->FileName.Buffer = (PWCHAR)FileNameBuffer; pFileObject->FileName.MaximumLength = NewFileName.MaximumLength; RtlCopyUnicodeString(&pFileObject->FileName, &NewFileName ); pFileObject->FileName.Buffer[4] = L'D'; pFileObject->FileName.Buffer[pFileObject->FileName.Length/2] = UNICODE_NULL; pFileObject->RelatedFileObject = NULL; KdPrint(("Redirect to %wZ\n", &pFileObject->FileName)); status = STATUS_REPARSE; Irp->IoStatus.Status = status; Irp->IoStatus.Information = IO_REPARSE; IoCompleteRequest( Irp, IO_NO_INCREMENT ); return status; 但是在资源管理器里面,经常出现“文件已经存在无法创建”的错误,从别的文件夹拖文件到这个A目录,会出现A目录里面看不到拖入的文件夹。D:\A里面也看不到。 请大家帮忙啊。 |
|
驱动小牛
|
沙发#
发布于:2008-01-22 17:14
要处理很多IRP.不是那么简单的.
|
|
板凳#
发布于:2008-01-22 19:40
楼上的兄弟,请不吝赐教啊
|
|
地板#
发布于:2008-01-23 00:15
try failing FastIoQueryOpen() as well.
|
|
地下室#
发布于:2008-01-23 00:56
出5000,有兄弟来接单吗?
|
|
5楼#
发布于:2008-01-23 01:46
不是那么简单的,要重建fileobject....
|
|
|
6楼#
发布于:2008-01-23 01:47
可以用重建整个irp请求的方法~
|
|
|
7楼#
发布于:2008-01-23 08:35
时限是多少?考虑一下.
|
|
|
8楼#
发布于:2008-01-23 09:29
引用第6楼killvxk于2008-01-23 01:47发表的 :以前的IRP请求都不干正事,Rebuild一个新的IRP描述以前的请求,然后返回新的IRP请求的返回值。不知道做起来效果如何,没尝试过。呵呵。回头试下。 |
|
9楼#
发布于:2008-01-23 09:48
不知道返回STATUS_REPARSE行不行?
|
|
10楼#
发布于:2008-01-23 09:58
如果C盘是NTFS,可以考虑用符号链接来做,不用驱动。
|
|
11楼#
发布于:2008-01-23 10:22
怎么交钱和交货?我有现成的。
|
|
12楼#
发布于:2008-01-23 16:16
楼上的朋友,发论坛内部消息给我,留下联系方式。
|
|
13楼#
发布于:2008-01-28 09:40
需要处理的irp很多
|
|
14楼#
发布于:2008-04-02 17:32
搞定了?
|
|
15楼#
发布于:2008-04-10 19:41
逆一下微软的SIS
sis.sys |
|
|
16楼#
发布于:2008-04-10 19:42
如果C盘是NTFS,
可以参考sis.sys |
|
|