Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:8970回复: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
好好学习 天天向上
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-20 21:28
能做到这步,何不构造个IRP向下值。


我也遇到,就准备使用IRP。
fengmm
驱动牛犊
驱动牛犊
  • 注册日期2001-07-25
  • 最后登录2008-10-21
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-20 21:42
Use ZwSetInformationFile with FileRenameInformation as class information. maybe can resolve your problem...
free bird
Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-21 09:21
能做到这步,何不构造个IRP向下值。


我也遇到,就准备使用IRP。



看不懂,能不能说仔细点。。

 :D :D :D
好好学习 天天向上
Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-21 09:23
Use ZwSetInformationFile with FileRenameInformation as class information. maybe can resolve your problem...
 


Just as you say I have used the FileRenameInformation class,
but I still can\'t resolve my problem!
好好学习 天天向上
Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-21 09:25
有哪位好心人帮忙看看我的代码?

感激不禁啊!
好好学习 天天向上
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-21 12:53
我也看过DDK的帮助,ZwSetInformationFile是没有FileRenameInformation,除非MS文档说的不准,不过奇怪的是,IFS KIT的OSR DOC\\irpman.pdf 却是用这种方法(用ntxxx函数),不知道是不是ntxxx函数可以,但Zwxxxx就不知道,不过到这步,何不构造个IRP,然后向下传,我想这是可以的方法。


  先建议你还是再用你的代码改一改,至于方法,你参考一下irpman.pdf的做法,我想也许可能行。实在不行,只好走最后一步,构造IRP向下传。

  我也遇到这个问题,今天我试一下,到时交流。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-21 20:00
ZwSetInformationFile是不行,



555~~~~~~~~~,看来要用构造IRP了,,,,该死的MS,为什么没有rename??????????



我扁MS!!!!!!!!!
Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-21 20:14
ZwSetInformationFile是不行,



555~~~~~~~~~,看来要用构造IRP了,,,,该死的MS,为什么没有rename??????????



我扁MS!!!!!!!!!



构造irp?
这个我不懂,能不能说说他的工作原理?

我的邮箱是swordbin@163.net,多多指教
好好学习 天天向上
fengmm
驱动牛犊
驱动牛犊
  • 注册日期2001-07-25
  • 最后登录2008-10-21
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-22 12:00
参考一下... 别人说可以的...
http://groups.google.com/groups?hl=zh-CN&lr=&ie=UTF-8&oe=UTF-8&threadm=6i4b8h%24iil%241%40nnrp1.dejanews.com&rnum=1&prev=/groups%3Fq%3DFileRenameInformation%26hl%3Dzh-CN%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3D6i4b8h%2524iil%25241%2540nnrp1.dejanews.com%26rnum%3D1
free bird
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-03-22 12:28
楼上你搞错了,

NtSetInformationFile 是APP层的native API,在kernel不能用。


上面的代码就是使用构造IRP来做的呀!!!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-03-23 10:31
NtSetInformationFile 是APP层的native API,在kernel不能用。
----------------------------------------------------------
都有,不是同一个。


在驱动开发网上找到下面这个代码,试了试好像不行
----------------------------------------------------------
另外ZwSetInformationFile也可以用,只是你们都没有使用正确的ACCESS_MASK。有一个未公开标志,加上即可。
很简单,自己crack一下吧,不多说了
Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-03-23 16:10
NtSetInformationFile 是APP层的native API,在kernel不能用。
----------------------------------------------------------
都有,不是同一个。


在驱动开发网上找到下面这个代码,试了试好像不行
----------------------------------------------------------
另外ZwSetInformationFile也可以用,只是你们都没有使用正确的ACCESS_MASK。有一个未公开标志,加上即可。
很简单,自己crack一下吧,不多说了



是不是说zwcreatefile里面的ACCESS_MASK?
应该是设成什么值?
好好学习 天天向上
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-03-27 23:11
另外ZwSetInformationFile也可以用,只是你们都没有使用正确的ACCESS_MASK。有一个未公开标志,加上即可。????


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

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

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

哪位兄弟帮一下呀!!!!!!
(我也遇到这问题呀!!!!)
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
14楼#
发布于: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]
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-03-29 18:50
谢谢!!!


我试试。

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


谢谢老大的回答。以学到东东。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-03-29 18:51


再问一个老大,你这些信息一般是从哪儿得到? :D :D :D
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-03-30 23:05
谢谢!!!


我试试。

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


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


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

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


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


crack :cool:
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
19楼#
发布于: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。
上一页
游客

返回顶部