| Посл.ответ |
Сообщение |
|
Создано: 11 мая 2006 13:06:13 Личное сообщение #1
Народ, как узнать рабочий каталог другого процесса в системе?
Ни в WinAPI, ни в Thelp этой ф-ции нет.
Можно ли докопаться до этой инфы из r3 ?
|
|
|
Создано: 11 мая 2006 13:36:16 Личное сообщение #2
Йопт, не судьба поискать в гугле?? Скоро авторы топиков, ответ на вопрос которых находится в гугле в течении нескольких минут, будут баниться.
1.
Самый надежный способ узнать полное имя исполняемого файла (путь к экзешнику) - это получить идентификатор его процесса (GetCurrentProcessId) найти его среди запущенных процессов (Process32First, Process32Next)... Полное имя файла будет содержаться в структуре PROCESSENTRY32->szExeFile.
Как экстримальный вариант можно из CWinApp->m_pszHelpFilePath... Я чесно говоря не пользовался и не знаю при каких условиях он переопределяется... Запустил диалог вроде пути правильные...
(Ответ Straight) Хм... GetModuleFileName тоже работает , может я чего-то торможу... Надо проверить на подводные камни... Век живи век учись!
2. Путь откуда была запущена программа можно узнать (как тут уже правильно подсказали) путем GetCurrentDirectory, однако это совсем не значит что там лежит исполняемый экзешник! Напимер можно запустить экзеху с ярлыка на рабочем столе, тогда курриент директори будет рабочий стол!
Чтобы указать путь к файлу совсем не нужна знать полный путь, вы просто пишете ОткрытьФайл("МойФайл.тэкст"), путь сложеться как Текущая дирректория + ИмяОткрываемогоФайла, т.к. Текущая дирректория в частном случае и есть дирректория где лежит экзешник. Если Вы уверены что будете запускать экзеху только путем двойного на нее нажатия то Вас вполне устроит этот вариант.
Естественно понятно, что приятней читать ОткрытьФайл("файл.тэкст") чем ОткрытьФайл("С:\Програм Файлз\Моя мега крутая компания\Моя мега крутая прога\файл.тэкст"). Чтобы этого издежать нам нужно бить уверенным что текущая дирректроия - это дирректория с экзехой, для этого из пункта 1 моей писанины добываем путь, полученную деррикторию ставим текущей SetCurrentDirectory.
В некоторых своих программах я часто обращаюсь к файлам в дирректории с исполняемым, считаю данный способ оптимальным, т.к. улучшает читабельность. Однако если у Вас файл открывается всего один раз, то смысла проделывать все эти процедуры нет, лучше просто указать полный путь к файлу, дирректорию экзешника можно узнать из пункта 1.
(ц)гугл
|
|
Создано: 11 мая 2006 13:50:35 Личное сообщение #3
Пользователь открывает WINCMD и переходит в дир. X
Как узнать X, если моя программа запущенна не из
WINCMD, и сам он запущен из папки Y!=X ???
ЗЫ В Гугле выдается куча всякой фигни  , либо по линуху, либо по ТХЕЛП,
но пользы от этого никакой.
|
|
Создано: 11 мая 2006 13:58:44 Личное сообщение #4
kkcos пишет:
Пользователь открывает WINCMD и переходит в дир. X
kkcos пишет:
Как узнать X, если моя программа запущенна не из
WINCMD, и сам он запущен из папки Y!=X ???
Нифига не понял...При чем тут cmd, если оно тебе не нужно? =) К слову чтоли написал?
|
|
Создано: 11 мая 2006 14:06:15 Личное сообщение #5
Мне нужно узнать текущий рабочий каталог процесса.
Например, если открыт cmd, то отслеживать выполнение команды cd.
Только не конкретно для cmd, а для любого процесса, вызывающего
SetCurrentDirectory
|
|
Создано: 11 мая 2006 14:12:30 Личное сообщение #6
kkcos пишет:
Только не конкретно для cmd, а для любого процесса, вызывающего
SetCurrentDirectory
Тогда хучь АПИ, инфы дохрена в гугле.
|
|
Создано: 11 мая 2006 14:23:05 · Поправил: kkcos Личное сообщение #7
См. первый пост
Гугл выдаёт фигню.
Ф-ции WinAPI позволяют узнать текущий раб. каталог только текущего процесса.
По крайней мере ф-ции, описанные в SDK к Win2k (из C++ Builder6)
И ТХЕЛП позволяет максимум узнать путь к экзешнику программы.
В Гугле мож и есть куча инфы, только эта инфа где-нить на 55 странице, и то не обязательно.
Где то в системе храниться таблица етих currdir, ведь как-то работает GetCurrentDir
А как узнать не свою или все записи - знает, похоже, один БГ
Или просто SDK устарел
Так что, кто знает, please help
и не надо всяких "go to google.com ..." или "смотри SDK"
|
|
Создано: 11 мая 2006 14:44:06 Личное сообщение #8
kkcos пишет:
Ф-ции WinAPI позволяют узнать текущий раб. каталог только текущего процесса.
Бля. Читай второй пост.
|
|
Создано: 11 мая 2006 14:45:26 Личное сообщение #9
kkcos
Тебе же Ara обьяснил: ставшишь хук на Апи в другом процессе и фильтруеш вхождения. Лишь таким способом ты сможешь реагировать на изменение текущей директории процесса. Не стоит забывать, что текущая директория одна, а потоков может быть много...
Для начала поробуй это в дебагере, а уж потом и сам догадаешься какую строку поиска нужно ввести в гугл для предотвращения "эффекта 55 страници"
|
|
Создано: 11 мая 2006 14:50:40 Личное сообщение #10
Step
спасибо
это будет вариант № 1
правда он будет полезен только, если
сам запускаешь другую прогу (или её
запускает пользователь, но после запуска
"шпиона" )
|
|
Создано: 11 мая 2006 17:20:48 Личное сообщение #11
А что, так проблемно грузить шпион при загрузке машины?
|
|
Создано: 11 мая 2006 17:22:20 Личное сообщение #12
kkcos
Похоже ты сам не знаешь, что хочешь. Сделай драйвер с глобальным перехватом API
|
|
Создано: 11 мая 2006 18:26:57 Личное сообщение #13
Как же мне надоели трояно и шпионо писатели, особенно такие которые с ассемблером
и Win API только вчера познакомились..
И вообще не понятно каким боком такая деятельность относится к кряку?
|
|
Создано: 12 мая 2006 06:23:53 · Поправил: kropalik Личное сообщение #14
в качестве варианта:
OpenProcess(...); // выбираем процесс
VirtualAllocEx(...); /* выделим в нем децл памяти
можно не выделять а использовать ненужный самой
проге участок например выравнивание между
секциями в какой нибудь dll */
WriteProcessMemory(...); /* запишем туда кусок кода который
вызовет GetCurrentDirectory() и затем ExitThread() */
CreateRemoteThread(...); // выполним этот код
ReadProcessMemory(...); // прочитаем результат
|
|
Создано: 12 мая 2006 11:46:06 Личное сообщение #15
kropalik пишет:
вызовет GetCurrentDirectory()
Попытаюсь поянить, что спрашивают. GetCurrentDirectory() берет инфу из каких-то системных таблиц. Товарища интересует доступ к этим таблицам, минуя длинную цепочку АПИ и всяческие хуки.
|
|
Создано: 12 мая 2006 14:27:32 Личное сообщение #16
tundra37 пишет:
GetCurrentDirectory() берет инфу из каких-то системных таблиц. Товарища интересует доступ к этим таблицам, минуя длинную цепочку АПИ и всяческие хуки.
Ради интереса поковырялся сейчас в недрах GetCurrentDirectoryA... Ну что я могу сказать - за 5 минут можно выдрать алго для своей винды, за час - сделать общий немного поковырявшись в мануалах. Вывод: делать вес ручками - полезно будет.
|
|
Создано: 12 мая 2006 17:44:23 Личное сообщение #17
а вот еще вариант!
kkcos
Ты хотя бы подробней написал, зачем оно тебе все это надо!
А вообще тебе на wasm.ru там Ms-Rem тебе подробно объяснит в своих статьях как тебе найти то, что ты так долго искал, да и еще в исходниках покажет.(таким как kkcos всем туда!)
Сам я такое не читаю, потому что знаю, а смотрел так быстрым взглядом, думал, может, что-то новое для себя найду.
Ну а если лень как там выше "Скоро авторы топиков, ответ на вопрос которых находится в гугле в течение нескольких минут, будут баниться!" то тогда вот кусок кода, который выдернет директорию другого процесса хоть из
GetWindowThreadProcessId,здесь хендл окна того процесса, что создал это окно  ,ADDR ProcessID
invoke OpenProcess,410h,0,ProcessID
push eax
mov edi,[esp]
invoke EnumProcessModules,edi,ADDR ProcessInstance,128,ADDR ProcessID
invoke GetModuleFileNameEx,edi,ProcessInstance,ADDR Buffer,512
invoke SetDlgItemText,hDlg,ID_DIRECTFILENAME,ADDR Buffer
call CloseHandle
Сам когда-то писал шпион, который показывал мне ID меню ну и всякую прочую чепуху, которая мне нужна была для исследования кода.
Kill Demon666
----- ЗЫ: истЕна где-то рядом, Welcome@Google.com |
|
Создано: 12 мая 2006 17:52:29 Личное сообщение #18
Asterix пишет:
И вообще не понятно каким боком такая деятельность относится к кряку?
Действительно ведь раздел называется околокрэкинговое программирование, а тут хотят написать какой то шпион или троян
|
|
Создано: 12 мая 2006 18:36:42 Личное сообщение #19
не шпион и не троян, а вполне нормальная оболочка
короче, пора скачивать символы к системным библиотекам
и идти на wasm.ru
короче, "крэкеры", вопрос исчерпан
|