Die MoveFileEx API
Die API MoveFileEx läuft teilweise über die Registry und das Verschieben wird nicht direkt ausgeführt. Hier funktioniert deshalb das Schlüsselwort SysNative nicht. Um unter 64Bit ein korektes Umbenennen / löschen zu erreichen, ist die API Wow64DisableWow64FsRedirection anzuwenden.
Hier Code dazu:
Code
'#####################################################################################
'######### Code von AHT #########
'######### Gepostet für [URL='http://www.paules-pc-forum.de']Startseite - Paules-PC-Forum.de[/URL] #########
'#####################################################################################
DEF GetProcAddress(2) !"KERNEL32.dll", "GetProcAddress"
DEF GetModuleHandle(1) !"KERNEL32", "GetModuleHandleA"
Declare Wow64DisableWow64FsRedirection&, OldValue&
Declare Wow64EnableWow64FsRedirection&
Declare Module$, MHANDLE&, Funktion$
Declare 64Bit&, MoveFileEx&, Quelle$, Ziel$
'Adressen der APIs ermitteln
Module$ = "Kernel32.DLL"
MHANDLE& = GetModuleHandle(ADDR(Module$))
Funktion$ = "Wow64DisableWow64FsRedirection"
Wow64DisableWow64FsRedirection& = GetProcAddress(MHANDLE&, ADDR(FUNKTION$))
Funktion$ = "Wow64EnableWow64FsRedirection"
Wow64EnableWow64FsRedirection& = GetProcAddress(MHANDLE&, ADDR(FUNKTION$))
Funktion$ = "MoveFileExA"
MoveFileEx& = GetProcAddress(MHANDLE&, ADDR(FUNKTION$))
'Auf 64Bit testen
Funktion$ = "IsWow64Process"
MHANDLE& = GetModuleHandle(ADDR(Module$))
IF GetProcAddress(MHANDLE&, ADDR(FUNKTION$))<>0
External("Kernel32.dll", "IsWow64Process", External("Kernel32", "GetCurrentProcess"), Addr(64Bit&))
endif
Quelle$ = $SYSPATH + "\Test.txt"
Ziel$ = $ProgDir + "\Test.txt"
'Umleitung deaktivieren
IF 64Bit& = 1 : Set("FastMode", 1) : Call(Wow64DisableWow64FsRedirection&, addr(OldValue&)) : endif
Call(MoveFileEx&, addr(Quelle$), addr(Ziel$), 4) 'Beim nächsten Reboot verschieben. Datei muss existieren und das Programm muss Adminrechte besitzen.
'Umleitung aktivieren
IF 64Bit& = 1 : Call(Wow64EnableWow64FsRedirection&, 1) : Set("FastMode", 0) : endif
Alles anzeigen