阅读:8979回复:32
在驱动里面如何对更改文件名?ZwSetInformationFile?
在驱动开发网上找到下面这个代码,试了试好像不行
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 郁闷中! |
|
|
沙发#
发布于:2003-03-21 09:21
能做到这步,何不构造个IRP向下值。 看不懂,能不能说仔细点。。 :D :D :D |
|
|
板凳#
发布于: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! |
|
|
地板#
发布于:2003-03-21 09:25
有哪位好心人帮忙看看我的代码?
感激不禁啊! |
|
|
地下室#
发布于:2003-03-21 20:14
ZwSetInformationFile是不行, 构造irp? 这个我不懂,能不能说说他的工作原理? 我的邮箱是swordbin@163.net,多多指教 |
|
|
5楼#
发布于:2003-03-23 16:10
NtSetInformationFile 是APP层的native API,在kernel不能用。 是不是说zwcreatefile里面的ACCESS_MASK? 应该是设成什么值? |
|
|