+/*
+ * @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;
+}