Ветеран
![Contributor](http://forum.oszone.net/images/groups/contributor.gif)
Сообщения: 1803
Благодарности: 714
|
Профиль
|
Отправить PM
| Цитировать
В качестве примера. Под Вашу ответственность!
Отключение перенаправления
Код: ![Выделить весь код](images/misc/selectcode.png)
//========================================================================================
// Отключение перенаправления при работе 32-битного приложения в 64-битной ОС ////////////
//========================================================================================
// результат, определение разрядности ОС
function IsWow64: Boolean;
type
TIsWow64Process = function(Handle: Windows.THandle; var Res: Windows.BOOL)
: Windows.BOOL; stdcall;
var
IsWow64Result: Windows.BOOL;
IsWow64Process: TIsWow64Process;
begin
IsWow64Process := Windows.GetProcAddress
(Windows.GetModuleHandle('kernel32.dll'), 'IsWow64Process');
if Assigned(IsWow64Process) then
begin
if not IsWow64Process(Windows.GetCurrentProcess, IsWow64Result) then
raise SysUtils.Exception.Create('IsWow64: bad process handle');
Result := IsWow64Result;
end
else
Result := False;
end;
// результат, отключение/включение перенаправления
function ChangeFSRedirection(bDisable: boolean): boolean;
type
TWow64DisableWow64FsRedirection = function(Var Wow64FsEnableRedirection
: LongBool): LongBool; stdcall;
TWow64EnableWow64FsRedirection = function(var Wow64FsEnableRedirection
: LongBool): LongBool; stdcall;
var
hHandle: THandle;
Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection;
Wow64EnableWow64FsRedirection: TWow64EnableWow64FsRedirection;
Wow64FsEnableRedirection: LongBool;
begin
Result := True;
if not IsWow64 then
exit;
try
hHandle := GetModuleHandle('kernel32.dll');
@Wow64EnableWow64FsRedirection := GetProcAddress(hHandle,
'Wow64EnableWow64FsRedirection');
@Wow64DisableWow64FsRedirection := GetProcAddress(hHandle,
'Wow64DisableWow64FsRedirection');
if bDisable then
begin
If ((hHandle <> 0) and (@Wow64EnableWow64FsRedirection <> nil) and
(@Wow64DisableWow64FsRedirection <> nil)) Then
Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection);
end;
if not bDisable then
If ((hHandle <> 0) and (@Wow64EnableWow64FsRedirection <> nil) and
(@Wow64DisableWow64FsRedirection <> nil)) Then
Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);
Except
Result := False;
end;
end;
{применение}
// отключаем перенаправление
ChangeFSRedirection(true);
// что-то делаем с файлами или реестром
...
// например, открываем файл в \system32, а не в \SysWOW64
OpenFile('C:\Windows\system32\einedatei.txt');
...
// включаем перенаправление
ChangeFSRedirection(false);
|
-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.
Отправлено: 00:56, 28-02-2016
| #33
|