阅读:964回复:2
Zwxxx删除文件尾的代码(哪里错了?)
我用下面函数删除文件最后512字节,但是调试发现读到StandardInfo中的数据并非文件长度等信息,而是文件尾部内容,请帮我看看代码哪里有错?
NTSTATUS deleteass( IN PCWSTR FileName ) { OBJECT_ATTRIBUTES ObjectAttributes; UNICODE_STRING ObjectName; HANDLE FileHandle; IO_STATUS_BLOCK IoStatus; NTSTATUS Status; FILE_STANDARD_INFORMATION StandardInfo; FILE_END_OF_FILE_INFORMATION FileEnd; RtlInitUnicodeString(&ObjectName,FileName); InitializeObjectAttributes( &ObjectAttributes, &ObjectName, OBJ_KERNEL_HANDLE, NULL, NULL ); IoStatus.Status = STATUS_SUCCESS; IoStatus.Information = 0; Status=ZwOpenFile( &FileHandle, GENERIC_WRITE | GENERIC_READ | SYNCHRONIZE, &ObjectAttributes, &IoStatus, 0, FILE_WRITE_THROUGH | FILE_SYNCHRONOUS_IO_NONALERT ); //if(NT_SUCCESS(Status)) { IoStatus.Status = STATUS_SUCCESS; IoStatus.Information = 0; Status=ZwQueryInformationFile( FileHandle, &IoStatus, &StandardInfo, sizeof(FILE_STANDARD_INFORMATION), FileStandardInformation ); } //if(NT_SUCCESS(Status)) { IoStatus.Status = STATUS_SUCCESS; IoStatus.Information = 0; FileEnd.EndOfFile = StandardInfo.EndOfFile; FileEnd.EndOfFile.QuadPart -= 512; Status=ZwSetInformationFile( FileHandle, &IoStatus, &FileEnd, sizeof(FILE_END_OF_FILE_INFORMATION), FileEndOfFileInformation ); } ZwClose(FileHandle); return Status; } |
|
沙发#
发布于:2007-04-28 13:09
太麻烦,何不直接使用FCB中的FILESIZE信息?
|
|
|
板凳#
发布于:2007-04-28 19:39
是不是只需要修改fcb的filesize就可以完全实现去除文件尾呢?
|
|