Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:8986回复:32

在驱动里面如何对更改文件名?ZwSetInformationFile?

楼主#
更多 发布于:2003-03-20 16:28
在驱动开发网上找到下面这个代码,试了试好像不行

NTSTATUS Rename(PCHAR szFileName1,PCHAR szFileName2)
{
NTSTATUS            status;
CHAR                szFileNameL[MAXPATHLEN];
OBJECT_ATTRIBUTES   oa;
IO_STATUS_BLOCK     iostatus;
HANDLE              hfile =NULL;
UNICODE_STRING      pathnameW;
ANSI_STRING         pathnameA;
PFILE_RENAME_INFORMATION fri;

strcpy(szFileNameL,\"\\\\??\\\\\");
    strcat(szFileNameL,szFileName1);
    RtlInitAnsiString (&pathnameA,szFileNameL );
    RtlAnsiStringToUnicodeString(&pathnameW,&pathnameA,TRUE);
    InitializeObjectAttributes(&oa, &pathnameW, OBJ_CASE_INSENSITIVE, NULL, NULL);
    status = ZwCreateFile(&hfile,
DELETE,
&oa,
&iostatus,
NULL,
0,
FILE_SHARE_READ,
FILE_OPEN,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,0);
RtlFreeUnicodeString(&pathnameW);
    if(!NT_SUCCESS(status))
{
if(hfile) ZwClose(hfile);
   return status;
}

// RtlZeroMemory(szFileName,MAXPATHLEN];
strcpy(szFileNameL,\"\\\\??\\\\\");
strcat(szFileNameL,szFileName2);
RtlInitAnsiString (&pathnameA,szFileNameL );
RtlAnsiStringToUnicodeString(&pathnameW,&pathnameA,TRUE);

fri=ExAllocatePool(NonPagedPool,sizeof(FILE_RENAME_INFORMATION)+pathnameW.Length+1);
fri->FileNameLength=pathnameW.Length;
memcpy(fri->FileName,pathnameW.Buffer,pathnameW.Length);
fri->ReplaceIfExists=0;
fri->RootDirectory=0;
status = ZwSetInformationFile(hfile,
&iostatus,
&fri,
sizeof(fri),
FileDispositionInformation);
RtlFreeUnicodeString(&pathnameW);

if(hfile) ZwClose(hfile);
return status;
}



ZwSetInformationFile好像只能set以下几个information

FileBasicInformation
FileDispositionInformation
FilePositionInformation
FileEndOfFileInformation

郁闷中!

最新喜欢:

ljh1021ljh102... cyliucyliu
好好学习 天天向上
zyanswer@21cn.c
驱动牛犊
驱动牛犊
  • 注册日期2008-02-15
  • 最后登录2010-06-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望94点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-01-10 18:44
pjf 向来低调.呵呵
ljh1021
驱动小牛
驱动小牛
  • 注册日期2007-05-30
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分936分
  • 威望126点
  • 贡献值0点
  • 好评度92点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-04-12 15:56
引用第23楼killvxk于2008-01-24 23:38发表的  :
pjf的帖子要拍照,鞭尸,挖坟~~

来来来,大家一起鞭尸~~~霍霍
消灭人类暴政,世界属于三体!
showt1me
驱动牛犊
驱动牛犊
  • 注册日期2008-03-11
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分161分
  • 威望88点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-04-11 14:45
留念~
clrheart
驱动牛犊
驱动牛犊
  • 注册日期2008-03-29
  • 最后登录2010-01-25
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望72点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-04-04 16:29
看了这篇帖子以后 我的心情久久不能平静 楼主的一个问题问的好 就是你是怎么知道的 看书和资料当然能知道很多东西 但要想知道更多的东西就得靠自己了 就像pjf一样 其实牛人就是这么容易做只要你肯努力 我也要当牛人
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
5楼#
发布于:2008-02-03 21:23
我把他挖出来是纪念pjf多年不来发帖~
没有战争就没有进步 X3工作组 为您提供最好的军火
chagoogle
驱动牛犊
驱动牛犊
  • 注册日期2005-11-22
  • 最后登录2011-11-23
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望97点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-02-03 21:18
哦,只看我楼上的回复时间了,是很久远了!呵呵
luoluo5555
驱动牛犊
驱动牛犊
  • 注册日期2008-01-30
  • 最后登录2008-01-30
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-01-30 19:54
楼上的好玩,也不看看这贴是哪年的
是不是有点装*
chagoogle
驱动牛犊
驱动牛犊
  • 注册日期2005-11-22
  • 最后登录2011-11-23
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望97点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-01-30 18:43
为什么就没有人看看nt4,win2k,reactos中的MoveFile这个函数是怎么实现的呢!昏!做开发想速成,想什么都别人帮你搞定是不行地!你学会的只是复制,粘帖,F7。如何解决问题还是没有搞清楚!除非必要我几乎不看反汇编代码,因为源代码里有。
wuyanfeng
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2011-05-06
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望127点
  • 贡献值0点
  • 好评度103点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-01-26 12:41
高手都在关注相同的东西
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
10楼#
发布于:2008-01-24 23:38
pjf的帖子要拍照,鞭尸,挖坟~~
没有战争就没有进步 X3工作组 为您提供最好的军火
newkey
驱动小牛
驱动小牛
  • 注册日期2002-10-03
  • 最后登录2013-10-13
  • 粉丝1
  • 关注0
  • 积分45分
  • 威望392点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2008-01-24 20:33
老兄,能贴一下调试通过的Rename代码吗
3ks
www.xDrv.com
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-04-01 13:55
谢谢老大,行了。


是一个参数传递错误,Thank you.
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-03-31 22:50
to pjf:

 你的代码有测试过吗????

 原封不对用了你的代码,发现不行,提示:错误:
((NTSTATUS)0xC0000034L)
//
// MessageId: STATUS_OBJECT_NAME_NOT_FOUND
//
// MessageText:
//
//  Object Name not found.
//
#define STATUS_OBJECT_NAME_NOT_FOUND     ((NTSTATUS)0xC0000034L)


用了以下改良的代码,如下错误:

0x0000000D,不知是何错误,在ntstatus.h没有这个错误码。

平台:2k,没有打sp

老大有MAIL吗?


我给你发MAIL。
 


放心,未经测试的代码我从来不贴。用Zw***和直接发IRP包我都通过测试的。(这个程序在2k sp2上测试)

你原封不动吗?开始以为copy出了纰漏,但原封不动的copy下来,还是行。
F:上是noname.txt,建一个名为c的目录,运行后noname.txt被移到c中改名为rename.txt。还有问题的话,讨论一下你的系统环境。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-03-31 21:14
to pjf:

 你的代码有测试过吗????

 原封不对用了你的代码,发现不行,提示:错误:
((NTSTATUS)0xC0000034L)
//
// MessageId: STATUS_OBJECT_NAME_NOT_FOUND
//
// MessageText:
//
//  Object Name not found.
//
#define STATUS_OBJECT_NAME_NOT_FOUND     ((NTSTATUS)0xC0000034L)


用了以下改良的代码,如下错误:

0x0000000D,不知是何错误,在ntstatus.h没有这个错误码。

平台:2k,没有打sp

老大有MAIL吗?


我给你发MAIL。
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-03-30 23:06


再问一个老大,你这些信息一般是从哪儿得到? :D :D :D


crack :cool:
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-03-30 23:05
谢谢!!!


我试试。

不过有点不解,那就是,如果我使用构造IRP来进行move,那个Parameters.SetFile.FileObject我该如何构造?,也用IoCreateFile???


谢谢老大的回答。以学到东东。


很对,用IoCreateFile。
提示就到这里吧,调用的参数与平常可是不同的,呵呵。

good luck.
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-03-29 18:51


再问一个老大,你这些信息一般是从哪儿得到? :D :D :D
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-03-29 18:50
谢谢!!!


我试试。

不过有点不解,那就是,如果我使用构造IRP来进行move,那个Parameters.SetFile.FileObject我该如何构造?,也用IoCreateFile???


谢谢老大的回答。以学到东东。
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-03-29 11:17
另外ZwSetInformationFile也可以用,只是你们都没有使用正确的ACCESS_MASK。有一个未公开标志,加上即可。????


在哪儿,pjf老在能提个示吗?

老大,我在调用ZwSetInformationFile中指定FileRenameInformation,程序返回无效的参数,按老大所说,那在ZwCreateFile哪儿加入Access_mask??,能不能提一下?

(我已实现同一目录rename,不过我是构造IRP,但move就不可以,不是同目录,程序失败,我始始终不解其:IrpSp->Parameters.SetFile.FileObject的含义??),能讲解一下吗?

哪位兄弟帮一下呀!!!!!!
(我也遇到这问题呀!!!!)
 


给你写一小段,将f:\\noname.txt MOVE到F:\\c\\rename.txt,注意到ACCESS_MASK:
char file[255];
HANDLE handle;
IO_STATUS_BLOCK ios;
OBJECT_ATTRIBUTES oa;
UNICODE_STRING pathnameW;
wchar_t *str=L\"\\\\??\\\\f:\\\\c\\\\rename.txt\";
PFILE_RENAME_INFORMATION ii=(PFILE_RENAME_INFORMATION)file;
RtlInitUnicodeString(&pathnameW,L\"\\\\??\\\\f:\\\\noname.txt\");
InitializeObjectAttributes(&oa, &pathnameW, OBJ_CASE_INSENSITIVE, NULL, NULL);
ii->ReplaceIfExists=TRUE;
ii->RootDirectory=0;
wcscpy(ii->FileName,str);
ii->FileNameLength=wcslen(ii->FileName)*2;
ntStatus = ZwCreateFile(&handle,
0x110080,
&oa,
&ios,
NULL,
0,
FILE_SHARE_READ,
FILE_OPEN,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,0);

if (NT_SUCCESS(ntStatus))
ZwSetInformationFile(handle,&ios,ii,1000,10);
ZwClose(handle);

若不在同一卷,不能成功(0xc00000d4)。
实际上系统的MoveFile在检查到0xc00000d4后自动用CreateFile/DeleteFile代替。

至于那个SetFile.FileObject,系统是用IoCreateFile打开的,即改过路径、名称后的文件对象。

[编辑 -  3/29/03 by  pjf]
上一页
游客

返回顶部