diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 5182e71fc1a..fc3b6ae38b3 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -1144,6 +1144,7 @@ @ stdcall WaitNamedPipeW (wstr long) @ stdcall WideCharToMultiByte(long long wstr long ptr long ptr ptr) @ stdcall WinExec(str long) +@ stdcall Wow64EnableWow64FsRedirection(long) @ stdcall Wow64DisableWow64FsRedirection(ptr) @ stdcall Wow64RevertWow64FsRedirection(ptr) @ stdcall WriteConsoleA(long ptr long ptr ptr) diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c index 2633d901df5..0b3a87e6d98 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -1539,24 +1539,37 @@ UINT WINAPI GetSystemWow64DirectoryA( LPSTR lpBuffer, UINT uSize ) return 0; } + +/*********************************************************************** + * Wow64EnableWow64FsRedirection (KERNEL32.@) + */ +BOOLEAN WINAPI Wow64EnableWow64FsRedirection( BOOLEAN enable ) +{ + NTSTATUS status = RtlWow64EnableFsRedirection( enable ); + if (status) SetLastError( RtlNtStatusToDosError(status) ); + return !status; +} + + /*********************************************************************** * Wow64DisableWow64FsRedirection (KERNEL32.@) */ BOOL WINAPI Wow64DisableWow64FsRedirection( PVOID *old_value ) { - FIXME("%p\n", old_value); - - if (old_value) *old_value = (void *)0xdeadbeef; - return TRUE; + NTSTATUS status = RtlWow64EnableFsRedirectionEx( TRUE, (ULONG *)old_value ); + if (status) SetLastError( RtlNtStatusToDosError(status) ); + return !status; } + /*********************************************************************** * Wow64RevertWow64FsRedirection (KERNEL32.@) */ BOOL WINAPI Wow64RevertWow64FsRedirection( PVOID old_value ) { - FIXME("%p\n", old_value); - return TRUE; + NTSTATUS status = RtlWow64EnableFsRedirection( (UINT_PTR)old_value ); + if (status) SetLastError( RtlNtStatusToDosError(status) ); + return !status; } diff --git a/include/winbase.h b/include/winbase.h index 0794fc6dd4d..a7eaf9db926 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -2143,6 +2143,9 @@ WINBASEAPI BOOL WINAPI WaitNamedPipeA(LPCSTR,DWORD); WINBASEAPI BOOL WINAPI WaitNamedPipeW(LPCWSTR,DWORD); #define WaitNamedPipe WINELIB_NAME_AW(WaitNamedPipe) WINBASEAPI UINT WINAPI WinExec(LPCSTR,UINT); +WINBASEAPI BOOL WINAPI Wow64DisableWow64FsRedirection(PVOID*); +WINBASEAPI BOOLEAN WINAPI Wow64EnableWow64FsRedirection(BOOLEAN); +WINBASEAPI BOOL WINAPI Wow64RevertWow64FsRedirection(PVOID); WINBASEAPI BOOL WINAPI WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED); WINBASEAPI BOOL WINAPI WriteFileEx(HANDLE,LPCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE); WINBASEAPI BOOL WINAPI WriteFileGather(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);