kernel32: Move some directory functions to kernelbase.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
05d00276c6
commit
2c73a08655
|
@ -268,12 +268,12 @@
|
||||||
# @ stub CreateBoundaryDescriptorA
|
# @ stub CreateBoundaryDescriptorA
|
||||||
# @ stub CreateBoundaryDescriptorW
|
# @ stub CreateBoundaryDescriptorW
|
||||||
@ stdcall CreateConsoleScreenBuffer(long long ptr long ptr)
|
@ stdcall CreateConsoleScreenBuffer(long long ptr long ptr)
|
||||||
@ stdcall CreateDirectoryA(str ptr)
|
@ stdcall -import CreateDirectoryA(str ptr)
|
||||||
@ stdcall CreateDirectoryExA(str str ptr)
|
@ stdcall CreateDirectoryExA(str str ptr)
|
||||||
@ stdcall CreateDirectoryExW(wstr wstr ptr)
|
@ stdcall -import CreateDirectoryExW(wstr wstr ptr)
|
||||||
# @ stub CreateDirectoryTransactedA
|
# @ stub CreateDirectoryTransactedA
|
||||||
# @ stub CreateDirectoryTransactedW
|
# @ stub CreateDirectoryTransactedW
|
||||||
@ stdcall CreateDirectoryW(wstr ptr)
|
@ stdcall -import CreateDirectoryW(wstr ptr)
|
||||||
@ stdcall -import CreateEventA(ptr long long str)
|
@ stdcall -import CreateEventA(ptr long long str)
|
||||||
@ stdcall -import CreateEventExA(ptr str long long)
|
@ stdcall -import CreateEventExA(ptr str long long)
|
||||||
@ stdcall -import CreateEventExW(ptr wstr long long)
|
@ stdcall -import CreateEventExW(ptr wstr long long)
|
||||||
|
@ -835,8 +835,8 @@
|
||||||
@ stdcall GetSystemTimeAsFileTime(ptr) ntdll.NtQuerySystemTime
|
@ stdcall GetSystemTimeAsFileTime(ptr) ntdll.NtQuerySystemTime
|
||||||
@ stdcall GetSystemTimePreciseAsFileTime(ptr)
|
@ stdcall GetSystemTimePreciseAsFileTime(ptr)
|
||||||
@ stdcall GetSystemTimes(ptr ptr ptr)
|
@ stdcall GetSystemTimes(ptr ptr ptr)
|
||||||
@ stdcall GetSystemWindowsDirectoryA(ptr long)
|
@ stdcall -import GetSystemWindowsDirectoryA(ptr long)
|
||||||
@ stdcall GetSystemWindowsDirectoryW(ptr long)
|
@ stdcall -import GetSystemWindowsDirectoryW(ptr long)
|
||||||
@ stdcall GetSystemWow64DirectoryA(ptr long)
|
@ stdcall GetSystemWow64DirectoryA(ptr long)
|
||||||
@ stdcall GetSystemWow64DirectoryW(ptr long)
|
@ stdcall GetSystemWow64DirectoryW(ptr long)
|
||||||
@ stdcall GetTapeParameters(ptr long ptr ptr)
|
@ stdcall GetTapeParameters(ptr long ptr ptr)
|
||||||
|
@ -887,8 +887,8 @@
|
||||||
@ stdcall GetVolumePathNameW(wstr ptr long)
|
@ stdcall GetVolumePathNameW(wstr ptr long)
|
||||||
@ stdcall GetVolumePathNamesForVolumeNameA(str ptr long ptr)
|
@ stdcall GetVolumePathNamesForVolumeNameA(str ptr long ptr)
|
||||||
@ stdcall GetVolumePathNamesForVolumeNameW(wstr ptr long ptr)
|
@ stdcall GetVolumePathNamesForVolumeNameW(wstr ptr long ptr)
|
||||||
@ stdcall GetWindowsDirectoryA(ptr long)
|
@ stdcall -import GetWindowsDirectoryA(ptr long)
|
||||||
@ stdcall GetWindowsDirectoryW(ptr long)
|
@ stdcall -import GetWindowsDirectoryW(ptr long)
|
||||||
@ stdcall GetWriteWatch(long ptr long ptr ptr ptr)
|
@ stdcall GetWriteWatch(long ptr long ptr ptr ptr)
|
||||||
# @ stub GetXStateFeaturesMask
|
# @ stub GetXStateFeaturesMask
|
||||||
@ stdcall GlobalAddAtomA(str)
|
@ stdcall GlobalAddAtomA(str)
|
||||||
|
@ -1601,10 +1601,10 @@
|
||||||
@ stdcall WideCharToMultiByte(long long wstr long ptr long ptr ptr)
|
@ stdcall WideCharToMultiByte(long long wstr long ptr long ptr ptr)
|
||||||
@ stdcall WinExec(str long)
|
@ stdcall WinExec(str long)
|
||||||
@ stdcall Wow64EnableWow64FsRedirection(long)
|
@ stdcall Wow64EnableWow64FsRedirection(long)
|
||||||
@ stdcall Wow64DisableWow64FsRedirection(ptr)
|
@ stdcall -import Wow64DisableWow64FsRedirection(ptr)
|
||||||
@ stdcall Wow64GetThreadContext(long ptr)
|
@ stdcall Wow64GetThreadContext(long ptr)
|
||||||
# @ stub Wow64GetThreadSelectorEntry
|
# @ stub Wow64GetThreadSelectorEntry
|
||||||
@ stdcall Wow64RevertWow64FsRedirection(ptr)
|
@ stdcall -import Wow64RevertWow64FsRedirection(ptr)
|
||||||
@ stdcall Wow64SetThreadContext(long ptr)
|
@ stdcall Wow64SetThreadContext(long ptr)
|
||||||
# @ stub Wow64SuspendThread
|
# @ stub Wow64SuspendThread
|
||||||
@ stdcall WriteConsoleA(long ptr long ptr ptr)
|
@ stdcall WriteConsoleA(long ptr long ptr ptr)
|
||||||
|
|
|
@ -1604,67 +1604,6 @@ BOOL WINAPI CreateHardLinkA(LPCSTR lpFileName, LPCSTR lpExistingFileName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* CreateDirectoryW (KERNEL32.@)
|
|
||||||
* RETURNS:
|
|
||||||
* TRUE : success
|
|
||||||
* FALSE : failure
|
|
||||||
* ERROR_DISK_FULL: on full disk
|
|
||||||
* ERROR_ALREADY_EXISTS: if directory name exists (even as file)
|
|
||||||
* ERROR_ACCESS_DENIED: on permission problems
|
|
||||||
* ERROR_FILENAME_EXCED_RANGE: too long filename(s)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI CreateDirectoryW( LPCWSTR path, LPSECURITY_ATTRIBUTES sa )
|
|
||||||
{
|
|
||||||
OBJECT_ATTRIBUTES attr;
|
|
||||||
UNICODE_STRING nt_name;
|
|
||||||
IO_STATUS_BLOCK io;
|
|
||||||
NTSTATUS status;
|
|
||||||
HANDLE handle;
|
|
||||||
BOOL ret = FALSE;
|
|
||||||
|
|
||||||
TRACE( "%s\n", debugstr_w(path) );
|
|
||||||
|
|
||||||
if (!RtlDosPathNameToNtPathName_U( path, &nt_name, NULL, NULL ))
|
|
||||||
{
|
|
||||||
SetLastError( ERROR_PATH_NOT_FOUND );
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
attr.Length = sizeof(attr);
|
|
||||||
attr.RootDirectory = 0;
|
|
||||||
attr.Attributes = OBJ_CASE_INSENSITIVE;
|
|
||||||
attr.ObjectName = &nt_name;
|
|
||||||
attr.SecurityDescriptor = sa ? sa->lpSecurityDescriptor : NULL;
|
|
||||||
attr.SecurityQualityOfService = NULL;
|
|
||||||
|
|
||||||
status = NtCreateFile( &handle, GENERIC_READ | SYNCHRONIZE, &attr, &io, NULL,
|
|
||||||
FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ, FILE_CREATE,
|
|
||||||
FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0 );
|
|
||||||
|
|
||||||
if (status == STATUS_SUCCESS)
|
|
||||||
{
|
|
||||||
NtClose( handle );
|
|
||||||
ret = TRUE;
|
|
||||||
}
|
|
||||||
else SetLastError( RtlNtStatusToDosError(status) );
|
|
||||||
|
|
||||||
RtlFreeUnicodeString( &nt_name );
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* CreateDirectoryA (KERNEL32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI CreateDirectoryA( LPCSTR path, LPSECURITY_ATTRIBUTES sa )
|
|
||||||
{
|
|
||||||
WCHAR *pathW;
|
|
||||||
|
|
||||||
if (!(pathW = FILE_name_AtoW( path, FALSE ))) return FALSE;
|
|
||||||
return CreateDirectoryW( pathW, sa );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* CreateDirectoryExA (KERNEL32.@)
|
* CreateDirectoryExA (KERNEL32.@)
|
||||||
*/
|
*/
|
||||||
|
@ -1682,15 +1621,6 @@ BOOL WINAPI CreateDirectoryExA( LPCSTR template, LPCSTR path, LPSECURITY_ATTRIBU
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* CreateDirectoryExW (KERNEL32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI CreateDirectoryExW( LPCWSTR template, LPCWSTR path, LPSECURITY_ATTRIBUTES sa )
|
|
||||||
{
|
|
||||||
return CreateDirectoryW( path, sa );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* RemoveDirectoryW (KERNEL32.@)
|
* RemoveDirectoryW (KERNEL32.@)
|
||||||
*/
|
*/
|
||||||
|
@ -1827,56 +1757,6 @@ BOOL WINAPI SetCurrentDirectoryA( LPCSTR dir )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* GetWindowsDirectoryW (KERNEL32.@)
|
|
||||||
*
|
|
||||||
* See comment for GetWindowsDirectoryA.
|
|
||||||
*/
|
|
||||||
UINT WINAPI GetWindowsDirectoryW( LPWSTR path, UINT count )
|
|
||||||
{
|
|
||||||
UINT len = strlenW( DIR_Windows ) + 1;
|
|
||||||
if (path && count >= len)
|
|
||||||
{
|
|
||||||
strcpyW( path, DIR_Windows );
|
|
||||||
len--;
|
|
||||||
}
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* GetWindowsDirectoryA (KERNEL32.@)
|
|
||||||
*
|
|
||||||
* Return value:
|
|
||||||
* If buffer is large enough to hold full path and terminating '\0' character
|
|
||||||
* function copies path to buffer and returns length of the path without '\0'.
|
|
||||||
* Otherwise function returns required size including '\0' character and
|
|
||||||
* does not touch the buffer.
|
|
||||||
*/
|
|
||||||
UINT WINAPI GetWindowsDirectoryA( LPSTR path, UINT count )
|
|
||||||
{
|
|
||||||
return copy_filename_WtoA( DIR_Windows, path, count );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* GetSystemWindowsDirectoryA (KERNEL32.@) W2K, TS4.0SP4
|
|
||||||
*/
|
|
||||||
UINT WINAPI GetSystemWindowsDirectoryA( LPSTR path, UINT count )
|
|
||||||
{
|
|
||||||
return GetWindowsDirectoryA( path, count );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* GetSystemWindowsDirectoryW (KERNEL32.@) W2K, TS4.0SP4
|
|
||||||
*/
|
|
||||||
UINT WINAPI GetSystemWindowsDirectoryW( LPWSTR path, UINT count )
|
|
||||||
{
|
|
||||||
return GetWindowsDirectoryW( path, count );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetSystemDirectoryW (KERNEL32.@)
|
* GetSystemDirectoryW (KERNEL32.@)
|
||||||
*
|
*
|
||||||
|
@ -1958,28 +1838,6 @@ BOOLEAN WINAPI Wow64EnableWow64FsRedirection( BOOLEAN enable )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* Wow64DisableWow64FsRedirection (KERNEL32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI Wow64DisableWow64FsRedirection( PVOID *old_value )
|
|
||||||
{
|
|
||||||
NTSTATUS status = RtlWow64EnableFsRedirectionEx( TRUE, (ULONG *)old_value );
|
|
||||||
if (status) SetLastError( RtlNtStatusToDosError(status) );
|
|
||||||
return !status;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* Wow64RevertWow64FsRedirection (KERNEL32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI Wow64RevertWow64FsRedirection( PVOID old_value )
|
|
||||||
{
|
|
||||||
NTSTATUS status = RtlWow64EnableFsRedirection( !old_value );
|
|
||||||
if (status) SetLastError( RtlNtStatusToDosError(status) );
|
|
||||||
return !status;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* NeedCurrentDirectoryForExePathW (KERNEL32.@)
|
* NeedCurrentDirectoryForExePathW (KERNEL32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -42,6 +42,9 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(file);
|
WINE_DEFAULT_DEBUG_CHANNEL(file);
|
||||||
|
|
||||||
|
const WCHAR windows_dir[] = {'C',':','\\','w','i','n','d','o','w','s',0};
|
||||||
|
const WCHAR system_dir[] = {'C',':','\\','w','i','n','d','o','w','s','\\','s','y','s','t','e','m','3','2',0};
|
||||||
|
|
||||||
static const WCHAR krnl386W[] = {'k','r','n','l','3','8','6','.','e','x','e','1','6',0};
|
static const WCHAR krnl386W[] = {'k','r','n','l','3','8','6','.','e','x','e','1','6',0};
|
||||||
|
|
||||||
static BOOL oem_file_apis;
|
static BOOL oem_file_apis;
|
||||||
|
@ -59,6 +62,35 @@ static void WINAPI read_write_apc( void *apc_user, PIO_STATUS_BLOCK io, ULONG re
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* copy_filename_WtoA
|
||||||
|
*
|
||||||
|
* copy a file name back to OEM/Ansi, but only if the buffer is large enough
|
||||||
|
*/
|
||||||
|
static DWORD copy_filename_WtoA( LPCWSTR nameW, LPSTR buffer, DWORD len )
|
||||||
|
{
|
||||||
|
UNICODE_STRING strW;
|
||||||
|
DWORD ret;
|
||||||
|
|
||||||
|
RtlInitUnicodeString( &strW, nameW );
|
||||||
|
|
||||||
|
ret = oem_file_apis ? RtlUnicodeStringToOemSize( &strW ) : RtlUnicodeStringToAnsiSize( &strW );
|
||||||
|
if (buffer && ret <= len)
|
||||||
|
{
|
||||||
|
ANSI_STRING str;
|
||||||
|
|
||||||
|
str.Buffer = buffer;
|
||||||
|
str.MaximumLength = min( len, UNICODE_STRING_MAX_CHARS );
|
||||||
|
if (oem_file_apis)
|
||||||
|
RtlUnicodeStringToOemString( &str, &strW, FALSE );
|
||||||
|
else
|
||||||
|
RtlUnicodeStringToAnsiString( &str, &strW, FALSE );
|
||||||
|
ret = str.Length; /* length without terminating 0 */
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* file_name_AtoW
|
* file_name_AtoW
|
||||||
*
|
*
|
||||||
|
@ -117,6 +149,63 @@ BOOL WINAPI DECLSPEC_HOTPATCH AreFileApisANSI(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* CreateDirectoryA (kernelbase.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DECLSPEC_HOTPATCH CreateDirectoryA( LPCSTR path, LPSECURITY_ATTRIBUTES sa )
|
||||||
|
{
|
||||||
|
WCHAR *pathW;
|
||||||
|
|
||||||
|
if (!(pathW = file_name_AtoW( path, FALSE ))) return FALSE;
|
||||||
|
return CreateDirectoryW( pathW, sa );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* CreateDirectoryW (kernelbase.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DECLSPEC_HOTPATCH CreateDirectoryW( LPCWSTR path, LPSECURITY_ATTRIBUTES sa )
|
||||||
|
{
|
||||||
|
OBJECT_ATTRIBUTES attr;
|
||||||
|
UNICODE_STRING nt_name;
|
||||||
|
IO_STATUS_BLOCK io;
|
||||||
|
NTSTATUS status;
|
||||||
|
HANDLE handle;
|
||||||
|
|
||||||
|
TRACE( "%s\n", debugstr_w(path) );
|
||||||
|
|
||||||
|
if (!RtlDosPathNameToNtPathName_U( path, &nt_name, NULL, NULL ))
|
||||||
|
{
|
||||||
|
SetLastError( ERROR_PATH_NOT_FOUND );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
attr.Length = sizeof(attr);
|
||||||
|
attr.RootDirectory = 0;
|
||||||
|
attr.Attributes = OBJ_CASE_INSENSITIVE;
|
||||||
|
attr.ObjectName = &nt_name;
|
||||||
|
attr.SecurityDescriptor = sa ? sa->lpSecurityDescriptor : NULL;
|
||||||
|
attr.SecurityQualityOfService = NULL;
|
||||||
|
|
||||||
|
status = NtCreateFile( &handle, GENERIC_READ | SYNCHRONIZE, &attr, &io, NULL,
|
||||||
|
FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ, FILE_CREATE,
|
||||||
|
FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0 );
|
||||||
|
if (status == STATUS_SUCCESS) NtClose( handle );
|
||||||
|
|
||||||
|
RtlFreeUnicodeString( &nt_name );
|
||||||
|
return set_ntstatus( status );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* CreateDirectoryEx (kernelbase.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DECLSPEC_HOTPATCH CreateDirectoryExW( LPCWSTR template, LPCWSTR path,
|
||||||
|
LPSECURITY_ATTRIBUTES sa )
|
||||||
|
{
|
||||||
|
return CreateDirectoryW( path, sa );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* CreateFile2 (kernelbase.@)
|
* CreateFile2 (kernelbase.@)
|
||||||
*/
|
*/
|
||||||
|
@ -552,6 +641,72 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetFileAttributesExW( LPCWSTR name, GET_FILEEX_INF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetSystemDirectoryA (kernelbase.@)
|
||||||
|
*/
|
||||||
|
UINT WINAPI DECLSPEC_HOTPATCH GetSystemDirectoryA( LPSTR path, UINT count )
|
||||||
|
{
|
||||||
|
return copy_filename_WtoA( system_dir, path, count );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetSystemDirectoryW (kernelbase.@)
|
||||||
|
*/
|
||||||
|
UINT WINAPI DECLSPEC_HOTPATCH GetSystemDirectoryW( LPWSTR path, UINT count )
|
||||||
|
{
|
||||||
|
UINT len = lstrlenW( system_dir ) + 1;
|
||||||
|
if (path && count >= len)
|
||||||
|
{
|
||||||
|
lstrcpyW( path, system_dir );
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetSystemWindowsDirectoryA (kernelbase.@)
|
||||||
|
*/
|
||||||
|
UINT WINAPI DECLSPEC_HOTPATCH GetSystemWindowsDirectoryA( LPSTR path, UINT count )
|
||||||
|
{
|
||||||
|
return GetWindowsDirectoryA( path, count );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetSystemWindowsDirectoryW (kernelbase.@)
|
||||||
|
*/
|
||||||
|
UINT WINAPI DECLSPEC_HOTPATCH GetSystemWindowsDirectoryW( LPWSTR path, UINT count )
|
||||||
|
{
|
||||||
|
return GetWindowsDirectoryW( path, count );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetWindowsDirectoryA (kernelbase.@)
|
||||||
|
*/
|
||||||
|
UINT WINAPI DECLSPEC_HOTPATCH GetWindowsDirectoryA( LPSTR path, UINT count )
|
||||||
|
{
|
||||||
|
return copy_filename_WtoA( windows_dir, path, count );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetWindowsDirectoryW (kernelbase.@)
|
||||||
|
*/
|
||||||
|
UINT WINAPI DECLSPEC_HOTPATCH GetWindowsDirectoryW( LPWSTR path, UINT count )
|
||||||
|
{
|
||||||
|
UINT len = lstrlenW( windows_dir ) + 1;
|
||||||
|
if (path && count >= len)
|
||||||
|
{
|
||||||
|
lstrcpyW( path, windows_dir );
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* SetFileApisToANSI (kernelbase.@)
|
* SetFileApisToANSI (kernelbase.@)
|
||||||
*/
|
*/
|
||||||
|
@ -624,6 +779,24 @@ BOOL WINAPI DECLSPEC_HOTPATCH SetFileAttributesW( LPCWSTR name, DWORD attributes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* Wow64DisableWow64FsRedirection (kernelbase.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DECLSPEC_HOTPATCH Wow64DisableWow64FsRedirection( PVOID *old_value )
|
||||||
|
{
|
||||||
|
return set_ntstatus( RtlWow64EnableFsRedirectionEx( TRUE, (ULONG *)old_value ));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* Wow64RevertWow64FsRedirection (kernelbase.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DECLSPEC_HOTPATCH Wow64RevertWow64FsRedirection( PVOID old_value )
|
||||||
|
{
|
||||||
|
return set_ntstatus( RtlWow64EnableFsRedirection( !old_value ));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* Operations on file handles
|
* Operations on file handles
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
|
@ -27,6 +27,9 @@
|
||||||
extern WCHAR *file_name_AtoW( LPCSTR name, BOOL alloc ) DECLSPEC_HIDDEN;
|
extern WCHAR *file_name_AtoW( LPCSTR name, BOOL alloc ) DECLSPEC_HIDDEN;
|
||||||
extern DWORD file_name_WtoA( LPCWSTR src, INT srclen, LPSTR dest, INT destlen ) DECLSPEC_HIDDEN;
|
extern DWORD file_name_WtoA( LPCWSTR src, INT srclen, LPSTR dest, INT destlen ) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
extern const WCHAR windows_dir[] DECLSPEC_HIDDEN;
|
||||||
|
extern const WCHAR system_dir[] DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
static inline BOOL is_console_handle(HANDLE h)
|
static inline BOOL is_console_handle(HANDLE h)
|
||||||
{
|
{
|
||||||
return h != INVALID_HANDLE_VALUE && ((UINT_PTR)h & 3) == 3;
|
return h != INVALID_HANDLE_VALUE && ((UINT_PTR)h & 3) == 3;
|
||||||
|
|
|
@ -175,9 +175,9 @@
|
||||||
# @ stub CreateAppContainerToken
|
# @ stub CreateAppContainerToken
|
||||||
# @ stub CreateBoundaryDescriptorW
|
# @ stub CreateBoundaryDescriptorW
|
||||||
@ stdcall CreateConsoleScreenBuffer(long long ptr long ptr) kernel32.CreateConsoleScreenBuffer
|
@ stdcall CreateConsoleScreenBuffer(long long ptr long ptr) kernel32.CreateConsoleScreenBuffer
|
||||||
@ stdcall CreateDirectoryA(str ptr) kernel32.CreateDirectoryA
|
@ stdcall CreateDirectoryA(str ptr)
|
||||||
@ stdcall CreateDirectoryExW(wstr wstr ptr) kernel32.CreateDirectoryExW
|
@ stdcall CreateDirectoryExW(wstr wstr ptr)
|
||||||
@ stdcall CreateDirectoryW(wstr ptr) kernel32.CreateDirectoryW
|
@ stdcall CreateDirectoryW(wstr ptr)
|
||||||
# @ stub CreateEnclave
|
# @ stub CreateEnclave
|
||||||
@ stdcall CreateEventA(ptr long long str)
|
@ stdcall CreateEventA(ptr long long str)
|
||||||
@ stdcall CreateEventExA(ptr str long long)
|
@ stdcall CreateEventExA(ptr str long long)
|
||||||
|
@ -685,8 +685,8 @@
|
||||||
@ stdcall GetSystemDefaultLangID() kernel32.GetSystemDefaultLangID
|
@ stdcall GetSystemDefaultLangID() kernel32.GetSystemDefaultLangID
|
||||||
@ stdcall GetSystemDefaultLocaleName(ptr long) kernel32.GetSystemDefaultLocaleName
|
@ stdcall GetSystemDefaultLocaleName(ptr long) kernel32.GetSystemDefaultLocaleName
|
||||||
@ stdcall GetSystemDefaultUILanguage() kernel32.GetSystemDefaultUILanguage
|
@ stdcall GetSystemDefaultUILanguage() kernel32.GetSystemDefaultUILanguage
|
||||||
@ stdcall GetSystemDirectoryA(ptr long) kernel32.GetSystemDirectoryA
|
@ stdcall GetSystemDirectoryA(ptr long)
|
||||||
@ stdcall GetSystemDirectoryW(ptr long) kernel32.GetSystemDirectoryW
|
@ stdcall GetSystemDirectoryW(ptr long)
|
||||||
@ stdcall GetSystemFileCacheSize(ptr ptr ptr) kernel32.GetSystemFileCacheSize
|
@ stdcall GetSystemFileCacheSize(ptr ptr ptr) kernel32.GetSystemFileCacheSize
|
||||||
@ stdcall GetSystemFirmwareTable(long long ptr long) kernel32.GetSystemFirmwareTable
|
@ stdcall GetSystemFirmwareTable(long long ptr long) kernel32.GetSystemFirmwareTable
|
||||||
@ stdcall GetSystemInfo(ptr) kernel32.GetSystemInfo
|
@ stdcall GetSystemInfo(ptr) kernel32.GetSystemInfo
|
||||||
|
@ -700,8 +700,8 @@
|
||||||
@ stdcall GetSystemTimeAsFileTime(ptr) kernel32.GetSystemTimeAsFileTime
|
@ stdcall GetSystemTimeAsFileTime(ptr) kernel32.GetSystemTimeAsFileTime
|
||||||
@ stdcall GetSystemTimePreciseAsFileTime(ptr) kernel32.GetSystemTimePreciseAsFileTime
|
@ stdcall GetSystemTimePreciseAsFileTime(ptr) kernel32.GetSystemTimePreciseAsFileTime
|
||||||
@ stdcall GetSystemTimes(ptr ptr ptr) kernel32.GetSystemTimes
|
@ stdcall GetSystemTimes(ptr ptr ptr) kernel32.GetSystemTimes
|
||||||
@ stdcall GetSystemWindowsDirectoryA(ptr long) kernel32.GetSystemWindowsDirectoryA
|
@ stdcall GetSystemWindowsDirectoryA(ptr long)
|
||||||
@ stdcall GetSystemWindowsDirectoryW(ptr long) kernel32.GetSystemWindowsDirectoryW
|
@ stdcall GetSystemWindowsDirectoryW(ptr long)
|
||||||
# @ stub GetSystemWow64Directory2A
|
# @ stub GetSystemWow64Directory2A
|
||||||
# @ stub GetSystemWow64Directory2W
|
# @ stub GetSystemWow64Directory2W
|
||||||
@ stdcall GetSystemWow64DirectoryA(ptr long) kernel32.GetSystemWow64DirectoryA
|
@ stdcall GetSystemWow64DirectoryA(ptr long) kernel32.GetSystemWow64DirectoryA
|
||||||
|
@ -760,8 +760,8 @@
|
||||||
@ stdcall GetVolumePathNameW(wstr ptr long) kernel32.GetVolumePathNameW
|
@ stdcall GetVolumePathNameW(wstr ptr long) kernel32.GetVolumePathNameW
|
||||||
@ stdcall GetVolumePathNamesForVolumeNameW(wstr ptr long ptr) kernel32.GetVolumePathNamesForVolumeNameW
|
@ stdcall GetVolumePathNamesForVolumeNameW(wstr ptr long ptr) kernel32.GetVolumePathNamesForVolumeNameW
|
||||||
@ stdcall GetWindowsAccountDomainSid(ptr ptr ptr)
|
@ stdcall GetWindowsAccountDomainSid(ptr ptr ptr)
|
||||||
@ stdcall GetWindowsDirectoryA(ptr long) kernel32.GetWindowsDirectoryA
|
@ stdcall GetWindowsDirectoryA(ptr long)
|
||||||
@ stdcall GetWindowsDirectoryW(ptr long) kernel32.GetWindowsDirectoryW
|
@ stdcall GetWindowsDirectoryW(ptr long)
|
||||||
@ stdcall GetWriteWatch(long ptr long ptr ptr ptr) kernel32.GetWriteWatch
|
@ stdcall GetWriteWatch(long ptr long ptr ptr ptr) kernel32.GetWriteWatch
|
||||||
# @ stub GetWsChanges
|
# @ stub GetWsChanges
|
||||||
# @ stub GetWsChangesEx
|
# @ stub GetWsChangesEx
|
||||||
|
@ -1713,8 +1713,8 @@
|
||||||
# @ stub WerpNotifyLoadStringResource
|
# @ stub WerpNotifyLoadStringResource
|
||||||
# @ stub WerpNotifyUseStringResource
|
# @ stub WerpNotifyUseStringResource
|
||||||
@ stdcall WideCharToMultiByte(long long wstr long ptr long ptr ptr) kernel32.WideCharToMultiByte
|
@ stdcall WideCharToMultiByte(long long wstr long ptr long ptr ptr) kernel32.WideCharToMultiByte
|
||||||
@ stdcall Wow64DisableWow64FsRedirection(ptr) kernel32.Wow64DisableWow64FsRedirection
|
@ stdcall Wow64DisableWow64FsRedirection(ptr)
|
||||||
@ stdcall Wow64RevertWow64FsRedirection(ptr) kernel32.Wow64RevertWow64FsRedirection
|
@ stdcall Wow64RevertWow64FsRedirection(ptr)
|
||||||
# @ stub Wow64SetThreadDefaultGuestMachine
|
# @ stub Wow64SetThreadDefaultGuestMachine
|
||||||
# @ stub -arch=i386 Wow64Transition
|
# @ stub -arch=i386 Wow64Transition
|
||||||
@ stdcall WriteConsoleA(long ptr long ptr ptr) kernel32.WriteConsoleA
|
@ stdcall WriteConsoleA(long ptr long ptr ptr) kernel32.WriteConsoleA
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include "shlwapi.h"
|
#include "shlwapi.h"
|
||||||
#include "sddl.h"
|
#include "sddl.h"
|
||||||
|
|
||||||
|
#include "kernelbase.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "wine/heap.h"
|
#include "wine/heap.h"
|
||||||
#include "wine/list.h"
|
#include "wine/list.h"
|
||||||
|
@ -3075,7 +3076,6 @@ DWORD WINAPI EnumDynamicTimeZoneInformation(const DWORD index,
|
||||||
static const WCHAR mui_dltW[] = { 'M','U','I','_','D','l','t',0 };
|
static const WCHAR mui_dltW[] = { 'M','U','I','_','D','l','t',0 };
|
||||||
WCHAR keyname[ARRAY_SIZE(dtzi->TimeZoneKeyName)];
|
WCHAR keyname[ARRAY_SIZE(dtzi->TimeZoneKeyName)];
|
||||||
HKEY time_zones_key, sub_key;
|
HKEY time_zones_key, sub_key;
|
||||||
WCHAR sysdir[MAX_PATH];
|
|
||||||
LSTATUS ret;
|
LSTATUS ret;
|
||||||
DWORD size;
|
DWORD size;
|
||||||
struct tz_reg_data
|
struct tz_reg_data
|
||||||
|
@ -3103,13 +3103,12 @@ DWORD WINAPI EnumDynamicTimeZoneInformation(const DWORD index,
|
||||||
ret = RegOpenKeyExW( time_zones_key, keyname, 0, KEY_QUERY_VALUE, &sub_key );
|
ret = RegOpenKeyExW( time_zones_key, keyname, 0, KEY_QUERY_VALUE, &sub_key );
|
||||||
if (ret) goto cleanup;
|
if (ret) goto cleanup;
|
||||||
|
|
||||||
GetSystemDirectoryW(sysdir, ARRAY_SIZE(sysdir));
|
|
||||||
size = sizeof(dtzi->StandardName);
|
size = sizeof(dtzi->StandardName);
|
||||||
ret = RegLoadMUIStringW( sub_key, mui_stdW, dtzi->StandardName, size, NULL, 0, sysdir );
|
ret = RegLoadMUIStringW( sub_key, mui_stdW, dtzi->StandardName, size, NULL, 0, system_dir );
|
||||||
if (ret) goto cleanup;
|
if (ret) goto cleanup;
|
||||||
|
|
||||||
size = sizeof(dtzi->DaylightName);
|
size = sizeof(dtzi->DaylightName);
|
||||||
ret = RegLoadMUIStringW( sub_key, mui_dltW, dtzi->DaylightName, size, NULL, 0, sysdir );
|
ret = RegLoadMUIStringW( sub_key, mui_dltW, dtzi->DaylightName, size, NULL, 0, system_dir );
|
||||||
if (ret) goto cleanup;
|
if (ret) goto cleanup;
|
||||||
|
|
||||||
size = sizeof(tz_data);
|
size = sizeof(tz_data);
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
#include "winternl.h"
|
#include "winternl.h"
|
||||||
#include "lzexpand.h"
|
#include "lzexpand.h"
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
|
|
||||||
|
#include "kernelbase.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(ver);
|
WINE_DEFAULT_DEBUG_CHANNEL(ver);
|
||||||
|
@ -1267,7 +1269,6 @@ DWORD WINAPI VerFindFileW( DWORD flags, LPCWSTR filename, LPCWSTR win_dir, LPCWS
|
||||||
DWORD retval = 0;
|
DWORD retval = 0;
|
||||||
const WCHAR *curDir;
|
const WCHAR *curDir;
|
||||||
const WCHAR *destDir;
|
const WCHAR *destDir;
|
||||||
WCHAR winDir[MAX_PATH], systemDir[MAX_PATH];
|
|
||||||
|
|
||||||
TRACE("flags = %x filename=%s windir=%s appdir=%s curdirlen=%p(%u) destdirlen=%p(%u)\n",
|
TRACE("flags = %x filename=%s windir=%s appdir=%s curdirlen=%p(%u) destdirlen=%p(%u)\n",
|
||||||
flags, debugstr_w(filename), debugstr_w(win_dir), debugstr_w(app_dir),
|
flags, debugstr_w(filename), debugstr_w(win_dir), debugstr_w(app_dir),
|
||||||
|
@ -1276,12 +1277,11 @@ DWORD WINAPI VerFindFileW( DWORD flags, LPCWSTR filename, LPCWSTR win_dir, LPCWS
|
||||||
/* Figure out where the file should go; shared files default to the
|
/* Figure out where the file should go; shared files default to the
|
||||||
system directory */
|
system directory */
|
||||||
|
|
||||||
GetSystemDirectoryW(systemDir, ARRAY_SIZE(systemDir));
|
|
||||||
curDir = &emptyW;
|
curDir = &emptyW;
|
||||||
|
|
||||||
if(flags & VFFF_ISSHAREDFILE)
|
if(flags & VFFF_ISSHAREDFILE)
|
||||||
{
|
{
|
||||||
destDir = systemDir;
|
destDir = system_dir;
|
||||||
/* Were we given a filename? If so, try to find the file. */
|
/* Were we given a filename? If so, try to find the file. */
|
||||||
if(filename)
|
if(filename)
|
||||||
{
|
{
|
||||||
|
@ -1298,16 +1298,15 @@ DWORD WINAPI VerFindFileW( DWORD flags, LPCWSTR filename, LPCWSTR win_dir, LPCWS
|
||||||
destDir = app_dir ? app_dir : &emptyW;
|
destDir = app_dir ? app_dir : &emptyW;
|
||||||
if(filename)
|
if(filename)
|
||||||
{
|
{
|
||||||
GetWindowsDirectoryW( winDir, MAX_PATH );
|
|
||||||
if(file_existsW(destDir, filename, FALSE)) curDir = destDir;
|
if(file_existsW(destDir, filename, FALSE)) curDir = destDir;
|
||||||
else if(file_existsW(winDir, filename, FALSE))
|
else if(file_existsW(windows_dir, filename, FALSE))
|
||||||
{
|
{
|
||||||
curDir = winDir;
|
curDir = windows_dir;
|
||||||
retval |= VFF_CURNEDEST;
|
retval |= VFF_CURNEDEST;
|
||||||
}
|
}
|
||||||
else if(file_existsW(systemDir, filename, FALSE))
|
else if (file_existsW(system_dir, filename, FALSE))
|
||||||
{
|
{
|
||||||
curDir = systemDir;
|
curDir = system_dir;
|
||||||
retval |= VFF_CURNEDEST;
|
retval |= VFF_CURNEDEST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue