/* * @implemented */ BOOL WINAPI ReplaceFileA(IN LPCSTR lpReplacedFileName, IN LPCSTR lpReplacementFileName, IN LPCSTR lpBackupFileName OPTIONAL, IN DWORD dwReplaceFlags, IN LPVOID lpExclude, IN LPVOID lpReserved) { BOOL Ret; UNICODE_STRING ReplacedFileNameW, ReplacementFileNameW, BackupFileNameW; if (!lpReplacedFileName || !lpReplacementFileName || lpExclude || lpReserved || dwReplaceFlags & ~(REPLACEFILE_WRITE_THROUGH | REPLACEFILE_IGNORE_MERGE_ERRORS)) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } if (!Basep8BitStringToDynamicUnicodeString(&ReplacedFileNameW, lpReplacedFileName)) { return FALSE; } if (!Basep8BitStringToDynamicUnicodeString(&ReplacementFileNameW, lpReplacementFileName)) { RtlFreeUnicodeString(&ReplacedFileNameW); return FALSE; } if (lpBackupFileName) { if (!Basep8BitStringToDynamicUnicodeString(&BackupFileNameW, lpBackupFileName)) { RtlFreeUnicodeString(&ReplacementFileNameW); RtlFreeUnicodeString(&ReplacedFileNameW); return FALSE; } } else { BackupFileNameW.Buffer = NULL; } Ret = ReplaceFileW(ReplacedFileNameW.Buffer, ReplacementFileNameW.Buffer, BackupFileNameW.Buffer, dwReplaceFlags, 0, 0); if (lpBackupFileName) { RtlFreeUnicodeString(&BackupFileNameW); } RtlFreeUnicodeString(&ReplacementFileNameW); RtlFreeUnicodeString(&ReplacedFileNameW); return Ret; }
/* * @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 MoveFileWithProgressA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName OPTIONAL, IN LPPROGRESS_ROUTINE lpProgressRoutine OPTIONAL, IN LPVOID lpData OPTIONAL, IN DWORD dwFlags) { BOOL Ret; UNICODE_STRING ExistingFileNameW, NewFileNameW; if (!Basep8BitStringToDynamicUnicodeString(&ExistingFileNameW, lpExistingFileName)) { return FALSE; } if (lpNewFileName) { if (!Basep8BitStringToDynamicUnicodeString(&NewFileNameW, lpNewFileName)) { RtlFreeUnicodeString(&ExistingFileNameW); return FALSE; } } else { NewFileNameW.Buffer = NULL; } Ret = MoveFileWithProgressW(ExistingFileNameW.Buffer, NewFileNameW.Buffer, lpProgressRoutine, lpData, dwFlags); RtlFreeUnicodeString(&ExistingFileNameW); RtlFreeUnicodeString(&NewFileNameW); return Ret; }
/* * @implemented */ BOOL WINAPI WaitNamedPipeA(LPCSTR lpNamedPipeName, DWORD nTimeOut) { BOOL r; UNICODE_STRING NameU; /* Convert the name to Unicode */ Basep8BitStringToDynamicUnicodeString(&NameU, lpNamedPipeName); /* Call the Unicode API */ r = WaitNamedPipeW(NameU.Buffer, nTimeOut); /* Free the Unicode string */ RtlFreeUnicodeString(&NameU); /* Return result */ return r; }