mirror of
https://github.com/reactos/reactos.git
synced 2025-06-01 07:28:19 +00:00
Fixed some bugs in GetFileInformationByHandle().
svn path=/trunk/; revision=2331
This commit is contained in:
parent
998550e404
commit
1dafd03c3d
1 changed files with 24 additions and 18 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: file.c,v 1.27 2001/08/06 18:35:15 hbirr Exp $
|
/* $Id: file.c,v 1.28 2001/11/01 10:35:15 hbirr Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS system libraries
|
* PROJECT: ReactOS system libraries
|
||||||
|
@ -388,31 +388,35 @@ WINBOOL STDCALL
|
||||||
GetFileInformationByHandle(HANDLE hFile,
|
GetFileInformationByHandle(HANDLE hFile,
|
||||||
LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
|
LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
|
||||||
{
|
{
|
||||||
FILE_DIRECTORY_INFORMATION FileDirectory;
|
struct
|
||||||
|
{
|
||||||
|
FILE_FS_VOLUME_INFORMATION FileFsVolume;
|
||||||
|
WCHAR Name[255];
|
||||||
|
}
|
||||||
|
FileFsVolume;
|
||||||
|
|
||||||
|
FILE_BASIC_INFORMATION FileBasic;
|
||||||
FILE_INTERNAL_INFORMATION FileInternal;
|
FILE_INTERNAL_INFORMATION FileInternal;
|
||||||
FILE_FS_VOLUME_INFORMATION FileFsVolume;
|
|
||||||
FILE_STANDARD_INFORMATION FileStandard;
|
FILE_STANDARD_INFORMATION FileStandard;
|
||||||
NTSTATUS errCode;
|
NTSTATUS errCode;
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
|
|
||||||
errCode = NtQueryInformationFile(hFile,
|
errCode = NtQueryInformationFile(hFile,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
&FileDirectory,
|
&FileBasic,
|
||||||
sizeof(FILE_DIRECTORY_INFORMATION),
|
sizeof(FILE_BASIC_INFORMATION),
|
||||||
FileDirectoryInformation);
|
FileBasicInformation);
|
||||||
if (!NT_SUCCESS(errCode))
|
if (!NT_SUCCESS(errCode))
|
||||||
{
|
{
|
||||||
SetLastErrorByStatus(errCode);
|
SetLastErrorByStatus(errCode);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpFileInformation->dwFileAttributes = (DWORD)FileDirectory.FileAttributes;
|
lpFileInformation->dwFileAttributes = (DWORD)FileBasic.FileAttributes;
|
||||||
memcpy(&lpFileInformation->ftCreationTime,&FileDirectory.CreationTime,sizeof(LARGE_INTEGER));
|
memcpy(&lpFileInformation->ftCreationTime,&FileBasic.CreationTime,sizeof(LARGE_INTEGER));
|
||||||
memcpy(&lpFileInformation->ftLastAccessTime,&FileDirectory.LastAccessTime,sizeof(LARGE_INTEGER));
|
memcpy(&lpFileInformation->ftLastAccessTime,&FileBasic.LastAccessTime,sizeof(LARGE_INTEGER));
|
||||||
memcpy(&lpFileInformation->ftLastWriteTime, &FileDirectory.LastWriteTime,sizeof(LARGE_INTEGER));
|
memcpy(&lpFileInformation->ftLastWriteTime, &FileBasic.LastWriteTime,sizeof(LARGE_INTEGER));
|
||||||
lpFileInformation->nFileSizeHigh = FileDirectory.AllocationSize.u.HighPart;
|
|
||||||
lpFileInformation->nFileSizeLow = FileDirectory.AllocationSize.u.LowPart;
|
|
||||||
|
|
||||||
errCode = NtQueryInformationFile(hFile,
|
errCode = NtQueryInformationFile(hFile,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
&FileInternal,
|
&FileInternal,
|
||||||
|
@ -426,11 +430,11 @@ GetFileInformationByHandle(HANDLE hFile,
|
||||||
|
|
||||||
lpFileInformation->nFileIndexHigh = FileInternal.IndexNumber.u.HighPart;
|
lpFileInformation->nFileIndexHigh = FileInternal.IndexNumber.u.HighPart;
|
||||||
lpFileInformation->nFileIndexLow = FileInternal.IndexNumber.u.LowPart;
|
lpFileInformation->nFileIndexLow = FileInternal.IndexNumber.u.LowPart;
|
||||||
|
|
||||||
errCode = NtQueryVolumeInformationFile(hFile,
|
errCode = NtQueryVolumeInformationFile(hFile,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
&FileFsVolume,
|
&FileFsVolume,
|
||||||
sizeof(FILE_FS_VOLUME_INFORMATION),
|
sizeof(FileFsVolume),
|
||||||
FileFsVolumeInformation);
|
FileFsVolumeInformation);
|
||||||
if (!NT_SUCCESS(errCode))
|
if (!NT_SUCCESS(errCode))
|
||||||
{
|
{
|
||||||
|
@ -438,8 +442,8 @@ GetFileInformationByHandle(HANDLE hFile,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpFileInformation->dwVolumeSerialNumber = FileFsVolume.VolumeSerialNumber;
|
lpFileInformation->dwVolumeSerialNumber = FileFsVolume.FileFsVolume.VolumeSerialNumber;
|
||||||
|
|
||||||
errCode = NtQueryInformationFile(hFile,
|
errCode = NtQueryInformationFile(hFile,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
&FileStandard,
|
&FileStandard,
|
||||||
|
@ -452,6 +456,8 @@ GetFileInformationByHandle(HANDLE hFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
lpFileInformation->nNumberOfLinks = FileStandard.NumberOfLinks;
|
lpFileInformation->nNumberOfLinks = FileStandard.NumberOfLinks;
|
||||||
|
lpFileInformation->nFileSizeHigh = FileStandard.AllocationSize.u.HighPart;
|
||||||
|
lpFileInformation->nFileSizeLow = FileStandard.AllocationSize.u.LowPart;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue