|
|
|||||||||||
Как узнать объект ярлыка в 64-битной ОС19.03.2014, 02:42. Показов 3857. Ответов 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 | |
|
Как узнать объект события? Внедрение из 32-битной программы 64-битной dll в 64-битный процесс, возможно ли? 'Какой размер имеет переменная типа int в 32 битной и в 64 битной OC? Как узнать, открыт ли объект SELECT? Как узнать находится ли объект в фокусе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|