![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
wadim |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.10.2006 Где: г.Тамбов Репутация: нет Всего: нет |
Народ, помогите узнать путь/имя файла чужого DOS-приложения по его окну.
Моё 32-разрядное приложение должно работать в Windows 98/2k/XP/Vista Поиск дал ответ на тот же вопрос но только для 32-разрядного чужого приложения. Перечислить окна, процессы, модули, потоки - могу. Попытка использования под XP функции VDMEnumTaskWOWEx из VDMDBG.DLL мне не помогла: 1) перечислены не все DOS-задачи, хотя вызывалась для всех PID, у которых имя модуля ntvdm.exe или класс окна ConsoleWindowClass 2) неизвестно, как ассоциировать даже и найденные 16-разрядные модули с каким-то конкретным окном. Спасибо. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
так что простого способа нет. при беглом осмотре в экспортах ntvdm.exe была обнаружена недокументированная функция GetDOSAppName, которая, возможно и "скажет правду". но чтобы ее вызывать, надо находиться в адресном пространстве целевого ntvdm.exe. т.е. нужно создать поток через CreateRemoteThread(ну или вгружаться через AppInit и там локально создавать) и в контексте этого потока вызывать эту функцию. возникает вопрос: а оно тебе надо? ![]() |
|||
|
||||
wadim |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.10.2006 Где: г.Тамбов Репутация: нет Всего: нет |
ДА, НАДО И ОЧЕНЬ. (заголовок окна может быть изменён после запуска DOS-приложения или с помощью pif-файлов, поэтому мне нужно привязываться к имени файла) По первой части. Попробую перечислить копии VDM и их исследовать. По второй части: Я готов использовать CreateRemoteThread для создания потока в ntvdm.exe - проблемы не вижу, передать полученную в этом потоке информацию в своё приложение смогу. Но не понял, как мне это поможет. Ведь: 1) параметры GetDOSAppName неизвестны 2) как насчёт ассоциации с окном ? 3) а как это в Win98 ? Ответ на вопрос пока не получен. Может быть необходимо породить 16-разрядное приложение и из него получить требуемое ? Если так - подскажите как в 16-разрядном приложении можно получить по окну имя файла программы - его владельца. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
там один параметр - буфер для получения имени
из того же созданного потока вызови GetConsoleWindow именно это - никак. там, возможно, есть альтернативное решение(возможно даже более простое).
такие фразы лучше приберечь для какой-либо платной поддержки, ага. |
|||
|
||||
wadim |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.10.2006 Где: г.Тамбов Репутация: нет Всего: нет |
Извини, dumb, обидеть не хотел
![]() Ожидал, честно говоря, что ответов будет больше и инвариантнее. |
|||
|
||||
dumb |
|
||||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
немного покопал GetDOSAppName - она берет путь к программе из блока окружения(environment block - сегментный адрес оного находится в PSP(program segment prefix) по смещению 0x2C). соответственно, если дос-программа освободит этот блок окружения(так делают, например, резиденты и экстендеры), то функция вернет пустую строку. но случай этот нечастый. чаще пустая строка получается, если активным является command.com(не cmd.exe, а именно command.com).
попутно набросал болванку(правда на асме, готовая .dll в аттаче):
эта .dll, будучи вгруженной в процесс(посредством CreateRemoteThread или AppInit_DLLs), создает поток, в котором периодически "дергает" GetDOSAppName и записывает результаты в MMF(TMappedLog):
как использовать(схематично ![]()
Добавлено через 1 минуту и 40 секунд ps. кстати, в win98, по идее, дос-процессы должны перечисляться(обычными методами) наравне с win-процессами. Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
||||||
|
|||||||
wadim |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.10.2006 Где: г.Тамбов Репутация: нет Всего: нет |
спасибо. бум испытать...
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |