/* * @implemented */ BOOL WINAPI CopyFileExA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName, IN LPPROGRESS_ROUTINE lpProgressRoutine OPTIONAL, IN LPVOID lpData OPTIONAL, IN LPBOOL pbCancel OPTIONAL, IN DWORD dwCopyFlags) { BOOL Result = FALSE; UNICODE_STRING lpNewFileNameW; PUNICODE_STRING lpExistingFileNameW; lpExistingFileNameW = Basep8BitStringToStaticUnicodeString(lpExistingFileName); if (!lpExistingFileName) { return FALSE; } if (Basep8BitStringToDynamicUnicodeString(&lpNewFileNameW, lpNewFileName)) { Result = CopyFileExW(lpExistingFileNameW->Buffer, lpNewFileNameW.Buffer, lpProgressRoutine, lpData, pbCancel, dwCopyFlags); RtlFreeUnicodeString(&lpNewFileNameW); } return Result; }
/*********************************************************************** * GetTempFileNameA (KERNEL32.@) */ UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName) { UINT ID; NTSTATUS Status; LPWSTR lpTempFileNameW; PUNICODE_STRING lpPathNameW; ANSI_STRING TempFileNameStringA; UNICODE_STRING lpPrefixStringW, TempFileNameStringW; /* Convert strings */ lpPathNameW = Basep8BitStringToStaticUnicodeString(lpPathName); if (!lpPathNameW) { return 0; } if (!Basep8BitStringToDynamicUnicodeString(&lpPrefixStringW, lpPrefixString)) { return 0; } lpTempFileNameW = RtlAllocateHeap(RtlGetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); if (!lpTempFileNameW) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); RtlFreeUnicodeString(&lpPrefixStringW); return 0; } /* Call Unicode */ ID = GetTempFileNameW(lpPathNameW->Buffer, lpPrefixStringW.Buffer, uUnique, lpTempFileNameW); if (ID) { RtlInitUnicodeString(&TempFileNameStringW, lpTempFileNameW); TempFileNameStringA.Buffer = lpTempFileName; TempFileNameStringA.MaximumLength = MAX_PATH; Status = BasepUnicodeStringTo8BitString(&TempFileNameStringA, &TempFileNameStringW, FALSE); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); ID = 0; } } /* Cleanup */ RtlFreeUnicodeString(&lpPrefixStringW); RtlFreeHeap(RtlGetProcessHeap(), 0, lpTempFileNameW); return ID; }
/* * @implemented */ BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName) { PUNICODE_STRING FileName; /* Convert the string to unicode, and call the wide function */ FileName = Basep8BitStringToStaticUnicodeString(lpFileName); if (FileName) return DeleteFileW(FileName->Buffer); return FALSE; }
/* * @implemented */ HINSTANCE WINAPI LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) { PUNICODE_STRING FileNameW; /* Convert file name to unicode */ if (!(FileNameW = Basep8BitStringToStaticUnicodeString(lpLibFileName))) return NULL; /* And call W version of the API */ return LoadLibraryExW(FileNameW->Buffer, hFile, dwFlags); }