mirror of
https://github.com/reactos/reactos.git
synced 2024-10-15 13:45:58 +00:00
[KERNEL32]
Fixed implementation of both GetFileTime/SetFileTime svn path=/trunk/; revision=50983
This commit is contained in:
parent
fd989b27e9
commit
a815fa86d2
|
@ -1421,18 +1421,18 @@ GetTempFileNameW(IN LPCWSTR lpPathName,
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
GetFileTime(HANDLE hFile,
|
GetFileTime(IN HANDLE hFile,
|
||||||
LPFILETIME lpCreationTime,
|
OUT LPFILETIME lpCreationTime OPTIONAL,
|
||||||
LPFILETIME lpLastAccessTime,
|
OUT LPFILETIME lpLastAccessTime OPTIONAL,
|
||||||
LPFILETIME lpLastWriteTime)
|
OUT LPFILETIME lpLastWriteTime OPTIONAL)
|
||||||
{
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
FILE_BASIC_INFORMATION FileBasic;
|
FILE_BASIC_INFORMATION FileBasic;
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
if(IsConsoleHandle(hFile))
|
if(IsConsoleHandle(hFile))
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_INVALID_HANDLE);
|
BaseSetLastNTError(STATUS_INVALID_HANDLE);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1443,16 +1443,27 @@ GetFileTime(HANDLE hFile,
|
||||||
FileBasicInformation);
|
FileBasicInformation);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
SetLastErrorByStatus(Status);
|
BaseSetLastNTError(Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lpCreationTime)
|
if (lpCreationTime)
|
||||||
memcpy(lpCreationTime, &FileBasic.CreationTime, sizeof(FILETIME));
|
{
|
||||||
|
lpCreationTime->dwLowDateTime = FileBasic.CreationTime.LowPart;
|
||||||
|
lpCreationTime->dwHighDateTime = FileBasic.CreationTime.HighPart;
|
||||||
|
}
|
||||||
|
|
||||||
if (lpLastAccessTime)
|
if (lpLastAccessTime)
|
||||||
memcpy(lpLastAccessTime, &FileBasic.LastAccessTime, sizeof(FILETIME));
|
{
|
||||||
|
lpLastAccessTime->dwLowDateTime = FileBasic.LastAccessTime.LowPart;
|
||||||
|
lpLastAccessTime->dwHighDateTime = FileBasic.LastAccessTime.HighPart;
|
||||||
|
}
|
||||||
|
|
||||||
if (lpLastWriteTime)
|
if (lpLastWriteTime)
|
||||||
memcpy(lpLastWriteTime, &FileBasic.LastWriteTime, sizeof(FILETIME));
|
{
|
||||||
|
lpLastWriteTime->dwLowDateTime = FileBasic.LastWriteTime.LowPart;
|
||||||
|
lpLastWriteTime->dwHighDateTime = FileBasic.LastWriteTime.HighPart;
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1462,40 +1473,40 @@ GetFileTime(HANDLE hFile,
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
SetFileTime(HANDLE hFile,
|
SetFileTime(IN HANDLE hFile,
|
||||||
CONST FILETIME *lpCreationTime,
|
CONST FILETIME *lpCreationTime OPTIONAL,
|
||||||
CONST FILETIME *lpLastAccessTime,
|
CONST FILETIME *lpLastAccessTime OPTIONAL,
|
||||||
CONST FILETIME *lpLastWriteTime)
|
CONST FILETIME *lpLastWriteTime OPTIONAL)
|
||||||
{
|
{
|
||||||
FILE_BASIC_INFORMATION FileBasic;
|
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
|
FILE_BASIC_INFORMATION FileBasic;
|
||||||
|
|
||||||
if(IsConsoleHandle(hFile))
|
if(IsConsoleHandle(hFile))
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_INVALID_HANDLE);
|
BaseSetLastNTError(STATUS_INVALID_HANDLE);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = NtQueryInformationFile(hFile,
|
memset(&FileBasic, 0, sizeof(FILE_BASIC_INFORMATION));
|
||||||
&IoStatusBlock,
|
|
||||||
&FileBasic,
|
|
||||||
sizeof(FILE_BASIC_INFORMATION),
|
|
||||||
FileBasicInformation);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
SetLastErrorByStatus(Status);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lpCreationTime)
|
if (lpCreationTime)
|
||||||
memcpy(&FileBasic.CreationTime, lpCreationTime, sizeof(FILETIME));
|
{
|
||||||
if (lpLastAccessTime)
|
FileBasic.CreationTime.LowPart = lpCreationTime->dwLowDateTime;
|
||||||
memcpy(&FileBasic.LastAccessTime, lpLastAccessTime, sizeof(FILETIME));
|
FileBasic.CreationTime.HighPart = lpCreationTime->dwHighDateTime;
|
||||||
if (lpLastWriteTime)
|
}
|
||||||
memcpy(&FileBasic.LastWriteTime, lpLastWriteTime, sizeof(FILETIME));
|
|
||||||
|
|
||||||
// should i initialize changetime ???
|
if (lpLastAccessTime)
|
||||||
|
{
|
||||||
|
FileBasic.LastAccessTime.LowPart = lpLastAccessTime->dwLowDateTime;
|
||||||
|
FileBasic.LastAccessTime.HighPart = lpLastAccessTime->dwHighDateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lpLastWriteTime)
|
||||||
|
{
|
||||||
|
FileBasic.LastWriteTime.LowPart = lpLastWriteTime->dwLowDateTime;
|
||||||
|
FileBasic.LastWriteTime.HighPart = lpLastWriteTime->dwHighDateTime;
|
||||||
|
}
|
||||||
|
|
||||||
Status = NtSetInformationFile(hFile,
|
Status = NtSetInformationFile(hFile,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
|
@ -1504,7 +1515,7 @@ SetFileTime(HANDLE hFile,
|
||||||
FileBasicInformation);
|
FileBasicInformation);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
SetLastErrorByStatus(Status);
|
BaseSetLastNTError(Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue