/* FUNCTIONS ****************************************************************/
+/*
+ * @implemented
+ */
VOID STDCALL
SetFileApisToOEM(VOID)
{
}
+/*
+ * @implemented
+ */
VOID STDCALL
SetFileApisToANSI(VOID)
{
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
AreFileApisANSI(VOID)
{
}
+/*
+ * @implemented
+ */
HFILE STDCALL
OpenFile(LPCSTR lpFileName,
LPOFSTRUCT lpReOpenBuff,
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
FlushFileBuffers(HANDLE hFile)
{
}
+/*
+ * @implemented
+ */
DWORD STDCALL
SetFilePointer(HANDLE hFile,
LONG lDistanceToMove,
}
+/*
+ * @implemented
+ */
DWORD STDCALL
GetFileType(HANDLE hFile)
{
}
+/*
+ * @implemented
+ */
DWORD STDCALL
GetFileSize(HANDLE hFile,
LPDWORD lpFileSizeHigh)
}
+/*
+ * @implemented
+ */
DWORD STDCALL
GetCompressedFileSizeA(LPCSTR lpFileName,
LPDWORD lpFileSizeHigh)
}
+/*
+ * @implemented
+ */
DWORD STDCALL
GetCompressedFileSizeW(LPCWSTR lpFileName,
LPDWORD lpFileSizeHigh)
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
GetFileInformationByHandle(HANDLE hFile,
LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
}
-DWORD STDCALL
-GetFileAttributesA(LPCSTR lpFileName)
-{
- UNICODE_STRING FileNameU;
- ANSI_STRING FileName;
- WINBOOL Result;
-
- RtlInitAnsiString (&FileName,
- (LPSTR)lpFileName);
-
- /* convert ansi (or oem) string to unicode */
- if (bIsFileApiAnsi)
- RtlAnsiStringToUnicodeString (&FileNameU,
- &FileName,
- TRUE);
- else
- RtlOemStringToUnicodeString (&FileNameU,
- &FileName,
- TRUE);
-
- Result = GetFileAttributesW (FileNameU.Buffer);
-
- RtlFreeUnicodeString (&FileNameU);
-
- return Result;
-}
-
-
-DWORD STDCALL
-GetFileAttributesW(LPCWSTR lpFileName)
+/*
+ * @implemented
+ */
+BOOL STDCALL
+GetFileAttributesExW(LPCWSTR lpFileName,
+ GET_FILEEX_INFO_LEVELS fInfoLevelId,
+ LPVOID lpFileInformation)
{
- FILE_BASIC_INFORMATION FileInformation;
+ FILE_NETWORK_OPEN_INFORMATION FileInformation;
OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK IoStatusBlock;
UNICODE_STRING FileName;
HANDLE FileHandle;
NTSTATUS Status;
+ WIN32_FILE_ATTRIBUTE_DATA* FileAttributeData;
- DPRINT ("GetFileAttributeW(%S) called\n", lpFileName);
+ DPRINT ("GetFileAttributesExW(%S) called\n", lpFileName);
+
+
+ if (fInfoLevelId != GetFileExInfoStandard || lpFileInformation == NULL)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
/* Validate and translate the filename */
if (!RtlDosPathNameToNtPathName_U ((LPWSTR)lpFileName,
{
DPRINT ("Invalid path\n");
SetLastError (ERROR_BAD_PATHNAME);
- return 0xFFFFFFFF;
+ return FALSE;
}
- DPRINT ("FileName: \'%wZ\'\n", &FileName);
/* build the object attributes */
InitializeObjectAttributes (&ObjectAttributes,
{
DPRINT ("NtOpenFile() failed (Status %lx)\n", Status);
SetLastErrorByStatus (Status);
- return 0xFFFFFFFF;
+ return FALSE;
}
/* Get file attributes */
Status = NtQueryInformationFile (FileHandle,
&IoStatusBlock,
&FileInformation,
- sizeof(FILE_BASIC_INFORMATION),
- FileBasicInformation);
+ sizeof(FILE_NETWORK_OPEN_INFORMATION),
+ FileNetworkOpenInformation);
NtClose (FileHandle);
+
if (!NT_SUCCESS (Status))
{
DPRINT ("NtQueryInformationFile() failed (Status %lx)\n", Status);
SetLastErrorByStatus (Status);
- return 0xFFFFFFFF;
+ return FALSE;
}
- return (DWORD)FileInformation.FileAttributes;
+ FileAttributeData = (WIN32_FILE_ATTRIBUTE_DATA*)lpFileInformation;
+ FileAttributeData->dwFileAttributes = FileInformation.FileAttributes;
+ FileAttributeData->ftCreationTime.dwLowDateTime = FileInformation.CreationTime.u.LowPart;
+ FileAttributeData->ftCreationTime.dwHighDateTime = FileInformation.CreationTime.u.HighPart;
+ FileAttributeData->ftLastAccessTime.dwLowDateTime = FileInformation.LastAccessTime.u.LowPart;
+ FileAttributeData->ftLastAccessTime.dwHighDateTime = FileInformation.LastAccessTime.u.HighPart;
+ FileAttributeData->ftLastWriteTime.dwLowDateTime = FileInformation.LastWriteTime.u.LowPart;
+ FileAttributeData->ftLastWriteTime.dwHighDateTime = FileInformation.LastWriteTime.u.HighPart;
+ FileAttributeData->nFileSizeLow = FileInformation.EndOfFile.u.LowPart;
+ FileAttributeData->nFileSizeHigh = FileInformation.EndOfFile.u.HighPart;
+
+ return TRUE;
}
+/*
+ * @implemented
+ */
+BOOL STDCALL
+GetFileAttributesExA(LPCSTR lpFileName,
+ GET_FILEEX_INFO_LEVELS fInfoLevelId,
+ LPVOID lpFileInformation)
+{
+ UNICODE_STRING FileNameU;
+ ANSI_STRING FileName;
+ BOOL Result;
+ RtlInitAnsiString (&FileName,
+ (LPSTR)lpFileName);
+
+ /* convert ansi (or oem) string to unicode */
+ if (bIsFileApiAnsi)
+ RtlAnsiStringToUnicodeString (&FileNameU,
+ &FileName,
+ TRUE);
+ else
+ RtlOemStringToUnicodeString (&FileNameU,
+ &FileName,
+ TRUE);
+
+ Result = GetFileAttributesExW(FileNameU.Buffer, fInfoLevelId, lpFileInformation);
+
+ RtlFreeUnicodeString (&FileNameU);
+
+ return Result;
+}
+
+
+/*
+ * @implemented
+ */
+DWORD STDCALL
+GetFileAttributesA(LPCSTR lpFileName)
+{
+ WIN32_FILE_ATTRIBUTE_DATA FileAttributeData;
+ UNICODE_STRING FileNameU;
+ ANSI_STRING FileName;
+ BOOL Result;
+
+ RtlInitAnsiString (&FileName,
+ (LPSTR)lpFileName);
+
+ /* convert ansi (or oem) string to unicode */
+ if (bIsFileApiAnsi)
+ RtlAnsiStringToUnicodeString (&FileNameU,
+ &FileName,
+ TRUE);
+ else
+ RtlOemStringToUnicodeString (&FileNameU,
+ &FileName,
+ TRUE);
+
+ Result = GetFileAttributesExW(FileNameU.Buffer, GetFileExInfoStandard, &FileAttributeData);
+
+ RtlFreeUnicodeString (&FileNameU);
+
+ return Result ? FileAttributeData.dwFileAttributes : 0xffffffff;
+}
+
+
+/*
+ * @implemented
+ */
+DWORD STDCALL
+GetFileAttributesW(LPCWSTR lpFileName)
+{
+ WIN32_FILE_ATTRIBUTE_DATA FileAttributeData;
+ BOOL Result;
+
+ DPRINT ("GetFileAttributeW(%S) called\n", lpFileName);
+
+ Result = GetFileAttributesExW(lpFileName, GetFileExInfoStandard, &FileAttributeData);
+
+ return Result ? FileAttributeData.dwFileAttributes : 0xffffffff;
+}
WINBOOL STDCALL
SetFileAttributesA(LPCSTR lpFileName,
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
SetFileAttributesW(LPCWSTR lpFileName,
DWORD dwFileAttributes)
}
+/*
+ * @implemented
+ */
UINT STDCALL
GetTempFileNameA(LPCSTR lpPathName,
LPCSTR lpPrefixString,
}
+/*
+ * @implemented
+ */
UINT STDCALL
GetTempFileNameW(LPCWSTR lpPathName,
LPCWSTR lpPrefixString,
HANDLE hFile;
UINT unique = uUnique;
UINT len;
- const WCHAR *format = L"%.*S\\~%.3S%4.4x.TMP";
+ const WCHAR *format = L"%.*s\\~%.3s%4.4x.TMP";
DPRINT("GetTempFileNameW(lpPathName %S, lpPrefixString %.*S, "
"uUnique %x, lpTempFileName %x)\n", lpPathName, 4,
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
GetFileTime(HANDLE hFile,
LPFILETIME lpCreationTime,
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
SetFileTime(HANDLE hFile,
CONST FILETIME *lpCreationTime,
/*
-The caller must have opened the file with the DesiredAccess FILE_WRITE_DATA flag set.
-*/
+ * The caller must have opened the file with the DesiredAccess FILE_WRITE_DATA flag set.
+ *
+ * @implemented
+ */
WINBOOL STDCALL
SetEndOfFile(HANDLE hFile)
{