Alexandre Julliard : kernel32: Forward the Wow64 redirection functions to ntdll.

Alexandre Julliard julliard at winehq.org
Mon Jul 6 09:34:00 CDT 2009


Module: wine
Branch: master
Commit: 26caf2fdda95f1934e329aa27f4d681d09390ebe
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=26caf2fdda95f1934e329aa27f4d681d09390ebe

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Jul  6 15:09:29 2009 +0200

kernel32: Forward the Wow64 redirection functions to ntdll.

---

 dlls/kernel32/kernel32.spec |    1 +
 dlls/kernel32/path.c        |   25 +++++++++++++++++++------
 include/winbase.h           |    3 +++
 3 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 5182e71..fc3b6ae 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 2633d90..0b3a87e 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 0794fc6..a7eaf9d 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);




More information about the wine-cvs mailing list