Seite 1 von 1

DisableWow64FsRedirection

Verfasst: 07.02.2009 03:09
von ts-soft
Kleines Beispiel, wie man unter Vista64+ die FileSystemRedirection umgeht.
Der Code ist lauffähig, bzw. macht nur Sinn in 32-Bit Anwendungen
aber Unterschiede ergeben sich nur unter Vista64 oder höherem x64
Windows.

Um die Unterschiede zu sehen muß man schon genauer schauen, z.B. das
"etc" Verzeichnis existiert nur auf der rechten (64-Bit Ordner) Seite.

Die DLL wird absichtlich Dynamisch geladen, damit der Code auf x86
Plattformen nicht zu fehlern führt.

Code: Alles auswählen

; Author:          Thomas Schulz (ts-soft)
; Date:            Februar 07, 2009
; Target OS:       Vista x64
; Target Compiler: PureBasic 4.0 and later, x86

EnableExplicit

Procedure DisableWow64FsRedirection(Flag)
  If OSVersion() >= #PB_OS_Windows_Vista
    Protected DLL = OpenLibrary(#PB_Any, "kernel32.dll")
    Protected IsWow64, Result
    If DLL
      If CallFunction(DLL, "IsWow64Process", GetCurrentProcess_(), @IsWow64)
        If IsWow64
          Result = CallFunction(DLL, "Wow64EnableWow64FsRedirection", Flag ! 1)
        EndIf
      EndIf
      CloseLibrary(DLL)
    EndIf
  EndIf
  ProcedureReturn Result
EndProcedure

Define SysDir.s{#MAX_PATH}
GetSystemDirectory_(@SysDir, #MAX_PATH)
SysDir + "\Drivers\"

If OpenWindow(0, 0, 0, 600, 300, "DisableWow64FsRedirection", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ExplorerTreeGadget(0, 10, 10, 280, 280, SysDir)
  DisableWow64FsRedirection(#True)
  ExplorerTreeGadget(1, 310, 10, 280, 280, SysDir)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf 
Vielleicht kanns ja einer brauchen :wink:

Gruß
Thomas

Verfasst: 07.02.2009 10:10
von Rings
thx