mirror of
https://github.com/reactos/reactos.git
synced 2024-07-23 12:48:01 +00:00
several fixes
svn path=/trunk/; revision=488
This commit is contained in:
parent
77360caec8
commit
0495cfd8d4
|
@ -9,16 +9,14 @@
|
||||||
* Created 01/11/98
|
* Created 01/11/98
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* FIXME: the large integer manipulations in this file dont handle overflow */
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
/* INCLUDES ****************************************************************/
|
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <ddk/ntddk.h>
|
#include <ddk/ntddk.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
//#define NDEBUG
|
#define NDEBUG
|
||||||
#include <kernel32/kernel32.h>
|
#include <kernel32/kernel32.h>
|
||||||
|
|
||||||
#define LPPROGRESS_ROUTINE void*
|
#define LPPROGRESS_ROUTINE void*
|
||||||
|
@ -34,16 +32,19 @@ VOID STDCALL SetFileApisToOEM(VOID)
|
||||||
bIsFileApiAnsi = FALSE;
|
bIsFileApiAnsi = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBASEAPI VOID WINAPI SetFileApisToANSI(VOID)
|
WINBASEAPI VOID WINAPI SetFileApisToANSI(VOID)
|
||||||
{
|
{
|
||||||
bIsFileApiAnsi = TRUE;
|
bIsFileApiAnsi = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL AreFileApisANSI(VOID)
|
WINBOOL STDCALL AreFileApisANSI(VOID)
|
||||||
{
|
{
|
||||||
return(bIsFileApiAnsi);
|
return(bIsFileApiAnsi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HFILE STDCALL OpenFile(LPCSTR lpFileName,
|
HFILE STDCALL OpenFile(LPCSTR lpFileName,
|
||||||
LPOFSTRUCT lpReOpenBuff,
|
LPOFSTRUCT lpReOpenBuff,
|
||||||
UINT uStyle)
|
UINT uStyle)
|
||||||
|
@ -115,6 +116,7 @@ HFILE STDCALL OpenFile(LPCSTR lpFileName,
|
||||||
return (HFILE)FileHandle;
|
return (HFILE)FileHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL FlushFileBuffers(HANDLE hFile)
|
WINBOOL STDCALL FlushFileBuffers(HANDLE hFile)
|
||||||
{
|
{
|
||||||
NTSTATUS errCode;
|
NTSTATUS errCode;
|
||||||
|
@ -140,10 +142,14 @@ DWORD STDCALL SetFilePointer(HANDLE hFile,
|
||||||
FILE_END_OF_FILE_INFORMATION FileEndOfFile;
|
FILE_END_OF_FILE_INFORMATION FileEndOfFile;
|
||||||
NTSTATUS errCode;
|
NTSTATUS errCode;
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
|
LARGE_INTEGER Distance;
|
||||||
|
|
||||||
DPRINT("SetFilePointer(hFile %x, lDistanceToMove %d, dwMoveMethod %d)\n",
|
DPRINT("SetFilePointer(hFile %x, lDistanceToMove %d, dwMoveMethod %d)\n",
|
||||||
hFile,lDistanceToMove,dwMoveMethod);
|
hFile,lDistanceToMove,dwMoveMethod);
|
||||||
|
|
||||||
|
Distance.u.LowPart = lDistanceToMove;
|
||||||
|
Distance.u.HighPart = (lpDistanceToMoveHigh) ? *lpDistanceToMoveHigh : 0;
|
||||||
|
|
||||||
if (dwMoveMethod == FILE_CURRENT)
|
if (dwMoveMethod == FILE_CURRENT)
|
||||||
{
|
{
|
||||||
NtQueryInformationFile(hFile,
|
NtQueryInformationFile(hFile,
|
||||||
|
@ -151,42 +157,21 @@ DWORD STDCALL SetFilePointer(HANDLE hFile,
|
||||||
&FilePosition,
|
&FilePosition,
|
||||||
sizeof(FILE_POSITION_INFORMATION),
|
sizeof(FILE_POSITION_INFORMATION),
|
||||||
FilePositionInformation);
|
FilePositionInformation);
|
||||||
FilePosition.CurrentByteOffset.u.LowPart += lDistanceToMove;
|
FilePosition.CurrentByteOffset.QuadPart += Distance.QuadPart;
|
||||||
if (lpDistanceToMoveHigh != NULL)
|
|
||||||
{
|
|
||||||
FilePosition.CurrentByteOffset.u.HighPart =
|
|
||||||
FilePosition.CurrentByteOffset.u.HighPart +
|
|
||||||
*lpDistanceToMoveHigh;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (dwMoveMethod == FILE_END)
|
else if (dwMoveMethod == FILE_END)
|
||||||
{
|
{
|
||||||
NtQueryInformationFile(hFile,&IoStatusBlock,&FileEndOfFile, sizeof(FILE_END_OF_FILE_INFORMATION),FileEndOfFileInformation);
|
NtQueryInformationFile(hFile,
|
||||||
FilePosition.CurrentByteOffset.u.LowPart =
|
&IoStatusBlock,
|
||||||
FileEndOfFile.EndOfFile.u.LowPart - lDistanceToMove;
|
&FileEndOfFile,
|
||||||
if ( lpDistanceToMoveHigh != NULL )
|
sizeof(FILE_END_OF_FILE_INFORMATION),
|
||||||
{
|
FileEndOfFileInformation);
|
||||||
FilePosition.CurrentByteOffset.u.HighPart =
|
FilePosition.CurrentByteOffset.QuadPart =
|
||||||
FileEndOfFile.EndOfFile.u.HighPart - *lpDistanceToMoveHigh;
|
FileEndOfFile.EndOfFile.QuadPart - Distance.QuadPart;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FilePosition.CurrentByteOffset.u.HighPart =
|
|
||||||
FileEndOfFile.EndOfFile.u.HighPart;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if ( dwMoveMethod == FILE_BEGIN )
|
else if ( dwMoveMethod == FILE_BEGIN )
|
||||||
{
|
{
|
||||||
FilePosition.CurrentByteOffset.u.LowPart = lDistanceToMove;
|
FilePosition.CurrentByteOffset.QuadPart = Distance.QuadPart;
|
||||||
if ( lpDistanceToMoveHigh != NULL )
|
|
||||||
{
|
|
||||||
FilePosition.CurrentByteOffset.u.HighPart =
|
|
||||||
*lpDistanceToMoveHigh;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FilePosition.CurrentByteOffset.u.HighPart = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
errCode = NtSetInformationFile(hFile,
|
errCode = NtSetInformationFile(hFile,
|
||||||
|
@ -207,9 +192,10 @@ DWORD STDCALL SetFilePointer(HANDLE hFile,
|
||||||
return FilePosition.CurrentByteOffset.u.LowPart;
|
return FilePosition.CurrentByteOffset.u.LowPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL GetFileType(HANDLE hFile)
|
DWORD STDCALL GetFileType(HANDLE hFile)
|
||||||
{
|
{
|
||||||
return FILE_TYPE_UNKNOWN;
|
return FILE_TYPE_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -219,7 +205,6 @@ DWORD STDCALL GetFileSize(HANDLE hFile,
|
||||||
NTSTATUS errCode;
|
NTSTATUS errCode;
|
||||||
FILE_STANDARD_INFORMATION FileStandard;
|
FILE_STANDARD_INFORMATION FileStandard;
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
|
|
||||||
|
|
||||||
errCode = NtQueryInformationFile(hFile,
|
errCode = NtQueryInformationFile(hFile,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
|
@ -228,7 +213,6 @@ DWORD STDCALL GetFileSize(HANDLE hFile,
|
||||||
FileStandardInformation);
|
FileStandardInformation);
|
||||||
if (!NT_SUCCESS(errCode))
|
if (!NT_SUCCESS(errCode))
|
||||||
{
|
{
|
||||||
CloseHandle(hFile);
|
|
||||||
SetLastError(RtlNtStatusToDosError(errCode));
|
SetLastError(RtlNtStatusToDosError(errCode));
|
||||||
if ( lpFileSizeHigh == NULL )
|
if ( lpFileSizeHigh == NULL )
|
||||||
{
|
{
|
||||||
|
@ -242,10 +226,10 @@ DWORD STDCALL GetFileSize(HANDLE hFile,
|
||||||
if ( lpFileSizeHigh != NULL )
|
if ( lpFileSizeHigh != NULL )
|
||||||
*lpFileSizeHigh = FileStandard.AllocationSize.u.HighPart;
|
*lpFileSizeHigh = FileStandard.AllocationSize.u.HighPart;
|
||||||
|
|
||||||
CloseHandle(hFile);
|
|
||||||
return FileStandard.AllocationSize.u.LowPart;
|
return FileStandard.AllocationSize.u.LowPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL GetCompressedFileSizeA(LPCSTR lpFileName,
|
DWORD STDCALL GetCompressedFileSizeA(LPCSTR lpFileName,
|
||||||
LPDWORD lpFileSizeHigh)
|
LPDWORD lpFileSizeHigh)
|
||||||
{
|
{
|
||||||
|
@ -264,6 +248,7 @@ DWORD STDCALL GetCompressedFileSizeA(LPCSTR lpFileName,
|
||||||
return GetCompressedFileSizeW(FileNameW,lpFileSizeHigh);
|
return GetCompressedFileSizeW(FileNameW,lpFileSizeHigh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL GetCompressedFileSizeW(LPCWSTR lpFileName,
|
DWORD STDCALL GetCompressedFileSizeW(LPCWSTR lpFileName,
|
||||||
LPDWORD lpFileSizeHigh)
|
LPDWORD lpFileSizeHigh)
|
||||||
{
|
{
|
||||||
|
@ -296,7 +281,6 @@ DWORD STDCALL GetCompressedFileSizeW(LPCWSTR lpFileName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL GetFileInformationByHandle(HANDLE hFile,
|
WINBOOL STDCALL GetFileInformationByHandle(HANDLE hFile,
|
||||||
LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
|
LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
|
||||||
{
|
{
|
||||||
|
@ -317,6 +301,7 @@ WINBOOL STDCALL GetFileInformationByHandle(HANDLE hFile,
|
||||||
SetLastError(RtlNtStatusToDosError(errCode));
|
SetLastError(RtlNtStatusToDosError(errCode));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpFileInformation->dwFileAttributes = (DWORD)FileDirectory.FileAttributes;
|
lpFileInformation->dwFileAttributes = (DWORD)FileDirectory.FileAttributes;
|
||||||
memcpy(&lpFileInformation->ftCreationTime,&FileDirectory.CreationTime,sizeof(LARGE_INTEGER));
|
memcpy(&lpFileInformation->ftCreationTime,&FileDirectory.CreationTime,sizeof(LARGE_INTEGER));
|
||||||
memcpy(&lpFileInformation->ftLastAccessTime,&FileDirectory.LastAccessTime,sizeof(LARGE_INTEGER));
|
memcpy(&lpFileInformation->ftLastAccessTime,&FileDirectory.LastAccessTime,sizeof(LARGE_INTEGER));
|
||||||
|
@ -334,6 +319,7 @@ WINBOOL STDCALL GetFileInformationByHandle(HANDLE hFile,
|
||||||
SetLastError(RtlNtStatusToDosError(errCode));
|
SetLastError(RtlNtStatusToDosError(errCode));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpFileInformation->nFileIndexHigh = FileInternal.IndexNumber.u.HighPart;
|
lpFileInformation->nFileIndexHigh = FileInternal.IndexNumber.u.HighPart;
|
||||||
lpFileInformation->nFileIndexLow = FileInternal.IndexNumber.u.LowPart;
|
lpFileInformation->nFileIndexLow = FileInternal.IndexNumber.u.LowPart;
|
||||||
|
|
||||||
|
@ -347,6 +333,7 @@ WINBOOL STDCALL GetFileInformationByHandle(HANDLE hFile,
|
||||||
SetLastError(RtlNtStatusToDosError(errCode));
|
SetLastError(RtlNtStatusToDosError(errCode));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpFileInformation->dwVolumeSerialNumber = FileFsVolume.VolumeSerialNumber;
|
lpFileInformation->dwVolumeSerialNumber = FileFsVolume.VolumeSerialNumber;
|
||||||
|
|
||||||
errCode = NtQueryInformationFile(hFile,
|
errCode = NtQueryInformationFile(hFile,
|
||||||
|
@ -356,20 +343,16 @@ WINBOOL STDCALL GetFileInformationByHandle(HANDLE hFile,
|
||||||
FileStandardInformation);
|
FileStandardInformation);
|
||||||
if (!NT_SUCCESS(errCode))
|
if (!NT_SUCCESS(errCode))
|
||||||
{
|
{
|
||||||
CloseHandle(hFile);
|
|
||||||
SetLastError(RtlNtStatusToDosError(errCode));
|
SetLastError(RtlNtStatusToDosError(errCode));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpFileInformation->nNumberOfLinks = FileStandard.NumberOfLinks;
|
lpFileInformation->nNumberOfLinks = FileStandard.NumberOfLinks;
|
||||||
CloseHandle(hFile);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL GetFileAttributesA(LPCSTR lpFileName)
|
DWORD STDCALL GetFileAttributesA(LPCSTR lpFileName)
|
||||||
{
|
{
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
@ -418,6 +401,7 @@ DWORD STDCALL GetFileAttributesW(LPCWSTR lpFileName)
|
||||||
return (DWORD)FileBasic.FileAttributes;
|
return (DWORD)FileBasic.FileAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL SetFileAttributesA(LPCSTR lpFileName,
|
WINBOOL STDCALL SetFileAttributesA(LPCSTR lpFileName,
|
||||||
DWORD dwFileAttributes)
|
DWORD dwFileAttributes)
|
||||||
{
|
{
|
||||||
|
@ -479,9 +463,6 @@ WINBOOL STDCALL SetFileAttributesW(LPCWSTR lpFileName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
UINT STDCALL GetTempFileNameA(LPCSTR lpPathName,
|
UINT STDCALL GetTempFileNameA(LPCSTR lpPathName,
|
||||||
LPCSTR lpPrefixString,
|
LPCSTR lpPrefixString,
|
||||||
UINT uUnique,
|
UINT uUnique,
|
||||||
|
@ -547,6 +528,7 @@ UINT STDCALL GetTempFileNameW(LPCWSTR lpPathName,
|
||||||
return uUnique;
|
return uUnique;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL GetFileTime(HANDLE hFile,
|
WINBOOL STDCALL GetFileTime(HANDLE hFile,
|
||||||
LPFILETIME lpCreationTime,
|
LPFILETIME lpCreationTime,
|
||||||
LPFILETIME lpLastAccessTime,
|
LPFILETIME lpLastAccessTime,
|
||||||
|
@ -566,12 +548,15 @@ WINBOOL STDCALL GetFileTime(HANDLE hFile,
|
||||||
SetLastError(RtlNtStatusToDosError(errCode));
|
SetLastError(RtlNtStatusToDosError(errCode));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(lpCreationTime,&FileBasic.CreationTime,sizeof(FILETIME));
|
memcpy(lpCreationTime,&FileBasic.CreationTime,sizeof(FILETIME));
|
||||||
memcpy(lpLastAccessTime,&FileBasic.LastAccessTime,sizeof(FILETIME));
|
memcpy(lpLastAccessTime,&FileBasic.LastAccessTime,sizeof(FILETIME));
|
||||||
memcpy(lpLastWriteTime,&FileBasic.LastWriteTime,sizeof(FILETIME));
|
memcpy(lpLastWriteTime,&FileBasic.LastWriteTime,sizeof(FILETIME));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL SetFileTime(HANDLE hFile,
|
WINBOOL STDCALL SetFileTime(HANDLE hFile,
|
||||||
CONST FILETIME *lpCreationTime,
|
CONST FILETIME *lpCreationTime,
|
||||||
CONST FILETIME *lpLastAccessTime,
|
CONST FILETIME *lpLastAccessTime,
|
||||||
|
@ -601,6 +586,7 @@ WINBOOL STDCALL SetFileTime(HANDLE hFile,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL SetEndOfFile(HANDLE hFile)
|
WINBOOL STDCALL SetEndOfFile(HANDLE hFile)
|
||||||
{
|
{
|
||||||
int x = -1;
|
int x = -1;
|
||||||
|
|
Loading…
Reference in a new issue