Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Существование файла и переадресация System32

37K
11 января 2014 года
Shad0w64bit
3 / / 24.03.2009
Добрый день!
Возник вопрос: нужно узнать существует ли файл в папке system32.

 
Код:
if (GetFileAttributes(PChar('C:\Windows\System32\unrar64.dll')) <> INVALID_FILE_ATTRIBUTES) then
   showmessage('64');
if (GetFileAttributes(PChar('C:\Windows\Syswow64\unrar.dll')) <> INVALID_FILE_ATTRIBUTES) then
    showmessage('32'); // system32 для x86 приложений
Если приложение 64 разрядное то проблем не возникает.
Я же хочу собрать x86 приложение, что бы можно было запускать его как на старых так и на новых компьютерах.

Проблема заключается в том что Windows врубает переадресацию в папку SysWOW64 для x86 приложений
На данный момент нашел не самый хороший способ решения проблемы через функцию wow64disablewow64fsredirection и createfile.

Может быть я не вижу слона и есть более красивое решение?
P.S. Проверяю на Win8 64
37K
12 января 2014 года
Shad0w64bit
3 / / 24.03.2009
Нашел обходной и на мой взгляд более красивый путь
Источник
Цитата:
32-bit applications can access the native system directory by substituting %windir%Sysnative for %windir%System32. WOW64 recognizes Sysnative as a special alias used to indicate that the file system should not redirect the access. This mechanism is flexible and easy to use, therefore, it is the recommended mechanism to bypass file system redirection. Note that 64-bit applications cannot use the Sysnative alias as it is a virtual directory not a real one.


То есть для x86 процессов на x64 системе получить доступ можно из папки %WinDir%system32 для (x86) и %WinDir%SysNative для (x64)
А для x64 процессов на x64 системах папки SysNative не существует, так как она виртуальная и в ней папка %WinDir%system32 для (x64) , а %WinDir%SysWOW64 для (x86)

Для x86 процессов:
%WinDir%system32 - x86
%WinDir%SysNative - x64

Для x64 процессов:
%WinDir%system32 - x64
%WinDir%SysWOW64 - x86

10
12 января 2014 года
Freeman
3.2K / / 06.03.2004
Если мне не изменяет память, это и есть штатный способ. Вызовом функции ты же не запрещаешь перенаправление вообще, а только отключаешь его для своего приложения, давая знать системе, что в твоей 32-битной программе запуск из-под 64-битной ОС предусмотрен как отдельный случай.
20K
13 января 2014 года
ellor!
198 / / 24.05.2012
MSDN:
GetWindowsDirectory
GetSystemDirectory
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог