阅读:1488回复:1
[s:8] 怎么用ZwSetInformationFile重命名文件呀,大侠
怎么用ZwSetInformationFile重命名文件呀,给个例子呀
|
|
|
沙发#
发布于:2007-01-25 10:15
原来有呀,找到了
NTSTATUS SfRenameFile( IN PWSTR SrcFileName, IN PWSTR DstFileName ) /*++ Arguments: SrcFileName - \??\x:\xxx\...\xxx.xxx DstFileName - \??\x:\xxx\...\xxx.xxx --*/ { HANDLE FileHandle = NULL; OBJECT_ATTRIBUTES ObjectAttributes; IO_STATUS_BLOCK IoStatus; NTSTATUS Status; PFILE_RENAME_INFORMATION RenameInfo = NULL; UNICODE_STRING ObjectName; RenameInfo = (PFILE_RENAME_INFORMATION) ExAllocatePoolWithTag( NonPagedPool, sizeof(FILE_RENAME_INFORMATION) + MAX_PATH * sizeof(WCHAR), SFLT_POOL_TAG ); if (RenameInfo == NULL) { KdPrint(("SfRename: RenameInfo err")); return STATUS_INSUFFICIENT_RESOURCES; } RtlZeroMemory(RenameInfo, sizeof(FILE_RENAME_INFORMATION) + MAX_PATH * sizeof(WCHAR)); RenameInfo->FileNameLength = wcslen(DstFileName) * sizeof(WCHAR); wcscpy(RenameInfo->FileName, DstFileName); RenameInfo->ReplaceIfExists = 0; RenameInfo->RootDirectory = NULL; RtlInitUnicodeString(&ObjectName, SrcFileName); InitializeObjectAttributes( &ObjectAttributes, &ObjectName, OBJ_CASE_INSENSITIVE, NULL, NULL ); Status = ZwCreateFile( &FileHandle, SYNCHRONIZE | DELETE, &ObjectAttributes, &IoStatus, NULL, 0, FILE_SHARE_READ, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT | FILE_NO_INTERMEDIATE_BUFFERING, NULL, 0); if (!NT_SUCCESS(Status)) { KdPrint(("SfRename: ZwCreateFile err")); ExFreePoolWithTag(RenameInfo, SFLT_POOL_TAG); return Status; } Status = ZwSetInformationFile( FileHandle, &IoStatus, RenameInfo, sizeof(FILE_RENAME_INFORMATION) + MAX_PATH * sizeof(WCHAR), FileRenameInformation ); if (!NT_SUCCESS(Status)) { KdPrint(("SfRename: ZwSetInformationFile err")); ExFreePoolWithTag(RenameInfo, SFLT_POOL_TAG); ZwClose(FileHandle); return Status; } KdPrint(("SfRename success")); ZwClose(FileHandle); return Status; } |
|
|