/* * @implemented */ BOOLEAN NTAPI CreateSymbolicLinkA(IN LPCSTR lpSymlinkFileName, IN LPCSTR lpTargetFileName, IN DWORD dwFlags) { PWCHAR SymlinkW, TargetW; BOOLEAN Ret; if(!lpSymlinkFileName || !lpTargetFileName) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } if (!(SymlinkW = FilenameA2W(lpSymlinkFileName, FALSE))) return FALSE; if (!(TargetW = FilenameA2W(lpTargetFileName, TRUE))) return FALSE; Ret = CreateSymbolicLinkW(SymlinkW, TargetW, dwFlags); RtlFreeHeap(RtlGetProcessHeap(), 0, SymlinkW); RtlFreeHeap(RtlGetProcessHeap(), 0, TargetW); return Ret; }
/* * @implemented */ BOOL WINAPI MoveFileWithProgressA ( LPCSTR lpExistingFileName, LPCSTR lpNewFileName, LPPROGRESS_ROUTINE lpProgressRoutine, LPVOID lpData, DWORD dwFlags ) { PWCHAR ExistingFileNameW; PWCHAR NewFileNameW; BOOL ret; if (!(ExistingFileNameW = FilenameA2W(lpExistingFileName, FALSE))) return FALSE; if (!(NewFileNameW= FilenameA2W(lpNewFileName, TRUE))) return FALSE; ret = MoveFileWithProgressW (ExistingFileNameW , NewFileNameW, lpProgressRoutine, lpData, dwFlags); RtlFreeHeap (RtlGetProcessHeap (), 0, NewFileNameW); return ret; }
/* * @implemented */ BOOL WINAPI SetVolumeLabelA(IN LPCSTR lpRootPathName, IN LPCSTR lpVolumeName OPTIONAL) /* NULL if deleting label */ { PWCHAR RootPathNameW; PWCHAR VolumeNameW = NULL; BOOL Result; if (!(RootPathNameW = FilenameA2W(lpRootPathName, FALSE))) return FALSE; if (lpVolumeName) { if (!(VolumeNameW = FilenameA2W(lpVolumeName, TRUE))) return FALSE; } Result = SetVolumeLabelW (RootPathNameW, VolumeNameW); if (VolumeNameW) { RtlFreeHeap (RtlGetProcessHeap (), 0, VolumeNameW ); } return Result; }
/* * @implemented */ BOOL WINAPI SetFileShortNameA( HANDLE hFile, LPCSTR lpShortName) { PWCHAR ShortNameW; if(IsConsoleHandle(hFile)) { SetLastError(ERROR_INVALID_HANDLE); return FALSE; } if(!lpShortName) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } if (!(ShortNameW = FilenameA2W(lpShortName, FALSE))) return FALSE; return SetFileShortNameW(hFile, ShortNameW); }
/* * @implemented */ HANDLE WINAPI CreateFileA (LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { PWCHAR FileNameW; HANDLE FileHandle; TRACE("CreateFileA(lpFileName %s)\n",lpFileName); if (!(FileNameW = FilenameA2W(lpFileName, FALSE))) return INVALID_HANDLE_VALUE; FileHandle = CreateFileW (FileNameW, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); return FileHandle; }
/* * @implemented */ BOOL WINAPI SetCurrentDirectoryA ( LPCSTR lpPathName ) { PWCHAR PathNameW; TRACE("setcurrdir: %s\n",lpPathName); if (!(PathNameW = FilenameA2W(lpPathName, FALSE))) return FALSE; return SetCurrentDirectoryW(PathNameW); }
/* * @implemented */ BOOL WINAPI GetVolumePathNameA(IN LPCSTR lpszFileName, IN LPSTR lpszVolumePathName, IN DWORD cchBufferLength) { PWCHAR FileNameW = NULL; WCHAR VolumePathName[MAX_PATH]; BOOL Result; if (lpszFileName) { if (!(FileNameW = FilenameA2W(lpszFileName, FALSE))) return FALSE; } Result = GetVolumePathNameW(FileNameW, VolumePathName, cchBufferLength); if (Result) FilenameW2A_N(lpszVolumePathName, MAX_PATH, VolumePathName, -1); return Result; }
/* * @implemented */ BOOL WINAPI GetVolumeInformationA(IN LPCSTR lpRootPathName, IN LPSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize) { UNICODE_STRING FileSystemNameU; UNICODE_STRING VolumeNameU = { 0, 0, NULL }; ANSI_STRING VolumeName; ANSI_STRING FileSystemName; PWCHAR RootPathNameW; BOOL Result; if (!(RootPathNameW = FilenameA2W(lpRootPathName, FALSE))) return FALSE; if (lpVolumeNameBuffer) { VolumeNameU.MaximumLength = (USHORT)nVolumeNameSize * sizeof(WCHAR); VolumeNameU.Buffer = RtlAllocateHeap (RtlGetProcessHeap (), 0, VolumeNameU.MaximumLength); if (VolumeNameU.Buffer == NULL) { goto FailNoMem; } } if (lpFileSystemNameBuffer) { FileSystemNameU.Length = 0; FileSystemNameU.MaximumLength = (USHORT)nFileSystemNameSize * sizeof(WCHAR); FileSystemNameU.Buffer = RtlAllocateHeap (RtlGetProcessHeap (), 0, FileSystemNameU.MaximumLength); if (FileSystemNameU.Buffer == NULL) { if (VolumeNameU.Buffer != NULL) { RtlFreeHeap(RtlGetProcessHeap(), 0, VolumeNameU.Buffer); } FailNoMem: SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } } Result = GetVolumeInformationW (RootPathNameW, lpVolumeNameBuffer ? VolumeNameU.Buffer : NULL, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer ? FileSystemNameU.Buffer : NULL, nFileSystemNameSize); if (Result) { if (lpVolumeNameBuffer) { VolumeNameU.Length = wcslen(VolumeNameU.Buffer) * sizeof(WCHAR); VolumeName.Length = 0; VolumeName.MaximumLength = (USHORT)nVolumeNameSize; VolumeName.Buffer = lpVolumeNameBuffer; } if (lpFileSystemNameBuffer) { FileSystemNameU.Length = wcslen(FileSystemNameU.Buffer) * sizeof(WCHAR); FileSystemName.Length = 0; FileSystemName.MaximumLength = (USHORT)nFileSystemNameSize; FileSystemName.Buffer = lpFileSystemNameBuffer; } /* convert unicode strings to ansi (or oem) */ if (bIsFileApiAnsi) { if (lpVolumeNameBuffer) { RtlUnicodeStringToAnsiString (&VolumeName, &VolumeNameU, FALSE); } if (lpFileSystemNameBuffer) { RtlUnicodeStringToAnsiString (&FileSystemName, &FileSystemNameU, FALSE); } } else { if (lpVolumeNameBuffer) { RtlUnicodeStringToOemString (&VolumeName, &VolumeNameU, FALSE); } if (lpFileSystemNameBuffer) { RtlUnicodeStringToOemString (&FileSystemName, &FileSystemNameU, FALSE); } } } if (lpVolumeNameBuffer) { RtlFreeHeap (RtlGetProcessHeap (), 0, VolumeNameU.Buffer); } if (lpFileSystemNameBuffer) { RtlFreeHeap (RtlGetProcessHeap (), 0, FileSystemNameU.Buffer); } return Result; }