Full Version: Using SetFileInformationByHandle and ZwSetInformationFile for re

From: guest (YURI) [#1]
 23 Nov 2009
To: ALL

((>
1)Anyone used SetFileInformationByHandle in practice for renaming of the files ,so
that it worked - i.e. renamed the files? With what parameter to open handle file? Beside me this function DELETES the files , but does
NOT RENAME them. Can be this function does not work? Possible bring detailed working example of the use
SetFileInformationByHandle for renaming of the file? It Beforehand is much thanked.
!my code:
STRDISK="c" ! disk name
str251="ABC.txt"
STR251=ADJUSTL(STR251)
string0="\??\"//STRDISK//":"
filedir="\??\"//STRDISK//":"
filename1="\??\"//STRDISK//":\"//TRIM(STR251)

hFile1=CreateFile(trim(filename1)//blob(0),GENERIC_ALL + SYNCHRONIZE ,FILE_SHARE_READ + FILE_SHARE_WRITE , &
0,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0)

hdir=CreateFile(trim(Filedir)//blob(0), SYNCHRONIZE ,FILE_SHARE_READ+FILE_SHARE_WRITE, &
0,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0)

filename2="\??\"//STRDISK//":\"//TRIM(STR251)
IRET = MultiByteToWideChar(CP_ACP,0,trim(filename2)//blob(0),-1 , path2,SIZEOF(path2) ) !//blob(0) !12 !\1\1.txt


IRET = MultiByteToWideChar(CP_ACP,0,trim(string0)//blob(0),-1 , path,SIZEOF(path) ) !//blob(0) !12 !\1\1.txt

ierror=getlasterror()

string3='ABCDE.txt'
string3=adjustl(string3)
IRET = MultiByteToWideChar(CP_ACP,0 ,trim(string3)//blob(0),-1 , path3,SIZEOF(path3) )


fdi%RootDirectory=hdir
fdi%ReplaceIfExists=1
fdi%FileName=loc(path3)
fdi%FileNameLength=sizeof(path3)

IERROR=-1
IRET= SetFileInformationByHandle(hFile1 , &
4, &
LOC(fdi), &
sizeof(fdi) &
); ! FileRenameInfo=4
! beside me IRET=1

IERROR=GETLASTERROR() ! beside me IERROR=0

flag=CloseHandle(hdir)
flag=CloseHandle(hFile1)
!========================================

2) Was Not got also use the function ZwSetInformationFile - is given ierror= #C0000008 -STATUS_INVALID_HANDLE but handle is

opened:

!my code:
ierror=-1
IRET = MultiByteToWideChar(CP_ACP,0,trim(filename1)//blob(0),-1 , path1,SIZEOF(path1) ) !//blob(0) !12 !\1\1.txt
US%Buffer = LOC(path1)
US%length=2*LEN_TRIM(STRING0)
US%MaximumLength = SIZEOF(us)

ObjectAttributes%Length = SIZEOF(ObjectAttributes)
ObjectAttributes%RootDirectory =0
ObjectAttributes%ObjectName =LOC(us)
ObjectAttributes%Attributes=OBJ_KERNEL_HANDLE ! Z'0200' - OBJ_KERNEL_HANDLE !Z'0040' - OBJ_CASE_INSENSITIVE
ObjectAttributes%SecurityDescriptor = 0
ObjectAttributes%SecurityQualityOfService = 0

ierror=-1
irethandle =ZwOpenFile(FileHandle,GENERIC_READ + GENERIC_WRITE + SYNCHRONIZE &
,ObjectAttributes,IoStatusBlock,FILE_SHARE_READ+FILE_SHARE_WRITE+FILE_SHARE_DELETE &
,FILE_SYNCHRONOUS_IO_NONALERT) ! here irethandle=0 FileHandle=308 (i.e.>0)
ierror=getlasterror()

IRET = MultiByteToWideChar(CP_ACP,0,trim("\??\c:\ABCD.txt")//blob(0),-1 , path2,SIZEOF(path2) )
fdizw%RootDirectory=0
fdizw%ReplaceIfExists=1
fdizw%FileName=loc(path2)
fdizw%FileNameLength=sizeof(path2)

ierror=-1
iret= ZwSetInformationFile( FileHandle,IoStatusBlock ,LOC(fdizw),SIZEOF(fdizw),4) ! here iret=#C0000008
ierror=getlasterror() ! here beside me ierror=0
iret=closehandle(FileHandle)
ierror=getlasterror()


!---------------------------------------------------------
!Tried to use instead of ZwOpenFile function ZwCreateFile:
irethandle = ZwCreateFile(FileHandle, GENERIC_WRITE + SYNCHRONIZE+DELETE ,ObjectAttributes &
,IoStatusBlock,NULL, &
FILE_ATTRIBUTE_NORMAL,FILE_SHARE_READ+FILE_SHARE_WRITE+FILE_SHARE_DELETE, FILE_OPEN, &
FILE_SYNCHRONOUS_IO_NONALERT,0, 0 )
! here irethandle=#C000000D- STATUS_INVALID_PARAMETER
!---------------------------------------------------------

Operating system- Windows Vista. (in XP do not work too,Tried on miscellaneous computer)
Anyone can me to help?Time has spent plenty of and do not understand - as possible correct?
It Beforehand is much thanked.

Reply


Reply to All

Back to thread list | Login

© 2010 Project BeehiveForum