|
|
|||||||||||
Как узнать объект ярлыка в 64-битной ОС19.03.2014, 02:42. Показов 3471. Ответов 30
Метки x64 shortcut (Все метки)
Имею ярлык к Internet Explorer. Браузер находится в папке C:\program files
При выполнении кода:
Воспользовался файловой переадресацией = не помогает. Кликните здесь для просмотра всего текста
1) Какие будут советы? 2) Может есть где спецификация самого формата данных?
0
|
|||||||||||
| 19.03.2014, 02:42 | |
|
Ответы с готовыми решениями:
30
Как узнать, подвержена ли 64-битной переадресации указанная ветвь реестра?
Как узнать существует ли объект ? |
|
Модератор
|
|
| 29.03.2014, 22:15 | |
|
0
|
|
|
|
||
| 30.03.2014, 02:45 [ТС] | ||
|
Видел. Да, действительно, пишут только о System32/SysWow64.
Вопрос только, является ли преадресация Program Files -> Program Files(x86) частью этого механизма (но ее не упомянули в статье) или проблема с определением ярлыка - это особый частный случай. (я склоняюсь ко второму) Вот факт - из 32-битного процесса: Kill "c:\windows\system32\file.txt" удаляет файл в папке syswow64 kill "c:\program files\file.txt" этот самый файл и удаляет. Переадресации нет. P.S. Скомпилировал код C++ от Peter Thoemmes для выдергивания пути из ярлыка согласно спецификации. Еще пригодится для будущих экспериментов.
0
|
||
|
Ушел с форума
|
||||||
| 31.03.2014, 22:18 | ||||||
Сообщение было отмечено The trick как решение
Решение
Насколько мне известно, файловые WOW64-редиректы работают только
для системных папок. Для Program Files действует другой механизм. Во-первых, у WOW64-процессов системная переменная ProgramFiles указывает на "C:\Program Files (x86)". Во-вторых, системные функции получения стандартных путей типа SHGetFolderPath для WOW64-процессов тоже возвращают 32-битную "Program Files (x86)". В-третьих, если WOW64-процесс пишет в реестр строковое значение, содержащее путь к одной из системных папок, в том числе и "Program Files", он автоматически преобразуется системой к 32-битному варианту. За это уже отвечает registry redirector. Но в остальном нет никаких препятствий, чтобы 32-битный exe поставить и запускать из 64-битной "нативной" папки "Program Files", то же самое, по идее, должно действовать и для ярлыков. Хотя если 32-битная программа захочет "узнать", где находится "Program Files", система неизбежно "подсунет" ей "Program Files (x86)". Вот таким скриптом я создаю ярлык на запуск 64-битного Internet Explorer, и не имеет значения, ни из-под какого процесса этот ярлык создается и запускается (32 или 64 бита) - во всех случаях наблюдаю запуск именно 64-битной версии IE, никаких редиректов в "Program Files (x86)" нету:
Dragokas, кстати, откуда в исходном коде, приведенном в первом сообщении темы, берется Program Files ? Не нашел. Может, он уже "приходит" туда в 32-битном обличии (x86) ?
2
|
||||||
|
Модератор
|
||||||
| 31.03.2014, 22:36 | ||||||
|
На "обычные" API переадресация не работает с Program Files (CreateFile, FindFirstFile, GetFileAttributes и т.п.), работает только с функциями SHELL, так в MSDN и написано. Например написав в VB
Dragokas, ты писал парсер, проверь чем отличается (изнутри) ярлык созданный через Explorer и через скрипт Убежденного (если он у тебя отрабатывает).
0
|
||||||
|
|
||||||
| 31.03.2014, 23:43 [ТС] | ||||||
|
Убежденный, превосходное наблюдение.
Ярлык создается примерно в 2х раза меньшего размера, при этом папка Program Files считывается из него без "переадресации" в отличие от ярлыка нативно созданного через explorer. Создавал таким кодом под x32 процессом
Есть различия в 1 байте (смещение 16), а также всех байтов, начиная с 2DF (ярлыки приаттачил). Пробую соотнести со спецификацией. ________________________ смещение 14 (4 байта) - LinkFlags, задающий наличие секций. 9B 00 00 00 (vbs) - отсутствует секция "EnableTargetMetadata". 9B 00 08 00 (explorer) Да, похоже виноват алгоритм обработки KnownFolder. Заодно еще один парсер нашел - shellify.
1
|
||||||
|
|
|
| 01.04.2014, 00:45 [ТС] | |
|
А вот похоже и сам код, который Microsoft использует в ОС
для получения пути для указанного Known Folder GUID: CppShellKnownFolders В нем используется функция SHGetKnownFolderPath. Скомпилировал под x32 и x64 кому интересно. x32 версия всегда выдает Program Files (x86). Похоже тупо подставляет нужное значение переменной в зависимости от разрядности процесса, как и описано здесь.
0
|
|
|
|
||||||
| 08.06.2015, 12:46 [ТС] | ||||||
|
Чтобы дать теме логическое завершение, скажу, что ярлыки, создаваемые Explorer,
цель которых пролегает через специальные папки, создаются с добавлением Extra Data Block. Когда система начинает разбор пути и видит наличие одной из секций: - 2.5.6. KnownFolderDataBlock - 2.5.9. SpecialFolderDataBlock то формирование пути происходит с участием раскрытия переменной окружения, указанной в этих секциях (что приводит к получению другого значения под WOW64). Чтобы однозначно идентифицировать реальный путь, можно, к примеру прочитать SpecialFolderDataBlock и по номеру CSIDL узнать: '38 = %ProgramFiles% '42 = %ProgramFiles(x86)% Другие значения: CSIDL - http://code.snapstream.com/api... CSIDL.html Аналогичная ситуация с переменной %CommonProgramFiles%. Касаемо KnownFolderDataBlock, ее GUID можно также проверить по этому списку: https://msdn.microsoft.com/en-... s.85).aspx Например, {6D809377-6AF0-444b-8957-A3773F02200E} - ProgramFilesX64 {7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E} - ProgramFilesX86 Парсинг этих секций можно провести примерно так: Кликните здесь для просмотра всего текста
2
|
||||||
| 08.06.2015, 13:53 | |
|
Не по теме: Dragokas, не перестаешь удивлять своими знаниями и
0
|
|
| 08.06.2015, 20:58 [ТС] | |
|
Не по теме:
0
|
|
| 08.06.2015, 20:58 | |
|
Помогаю со студенческими работами здесь
31
Как узнать объект события? Внедрение из 32-битной программы 64-битной dll в 64-битный процесс, возможно ли? 'Какой размер имеет переменная типа int в 32 битной и в 64 битной OC? Как узнать, открыт ли объект SELECT? Как узнать находится ли объект в фокусе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|