|
|
|||||||||||
Как узнать объект ярлыка в 64-битной ОС19.03.2014, 02:42. Показов 3612. Ответов 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? Как узнать находится ли объект в фокусе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|