| Автор
| Сообщение |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
Как заставить программу думать, что она запущена из указанной мною директории. _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
|
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
даже если ты при запуске ей укажешь каталог, который является текущим, от команды ExtractFilePath(ParamStr(0)) все равно не спрячешься.
как вариант, можно попробовать запустить процесс с параметром CREATE_SUSPENDED, найти в его памяти адрес командной строки и поправить слегка так а затем запустить |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
Что с памятью придется возиться я понял сразу, вот только как найти ту самую строку, которая и есть имя запущенного мною приложения. Программу запускаю через ShellExecute. _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
| есть еще одна идея: перехватывать вызовы GetCommandLine и GetModuleFileName. ИМХО, это проще реализуется. |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
Еще одна проблема. Т. к. моя прога будет запускать несколько приложений, то надо, чтобы функция, действующая вместо GetCommandLine, возвращала разные значения для каждого приложения. Как можно определить какая программа вызывает данную функцию (GetCommandLine)? _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
| а ты перед перехватом вызови оригинальную GetCommandLine и сохрани полученное значение где-нибудь |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
| Цитата: | | а ты перед перехватом вызови оригинальную GetCommandLine и сохрани полученное значение где-нибудь |
не понял. Ведь ее вызывают программы исходников которых у меня нет и нужно определить ихнее имя в моей программе и заменить возвращаемое значение.
Блин..., что ты хотел сказать???
Я вот думаю, можно ли сделать так, что бы моя прога перехватывала сообщения возвращаемые GetCommandLine. Изменяла их нужные и давала обратно в очередь. Как такое сделать? _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
|
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
| Цитата: | | можно ли сделать так, что бы моя прога перехватывала сообщения возвращаемые GetCommandLine |
не можно, а нужно!
раз ты из своей проги порождаешь процесс, то соответственно у тебя есть полный доступ к нему (и к его коду в том числе).
так вот, загружаешь его в память createprocess-ом с параметром create_suspended, аттачишь к процессу свою dll-ку, которая при аттаче перехватывает все необходимые фукции, при этом не забывая сохранить указатели на оригинальные функции.
и все, запускаешь процесс и наслаждаешься. |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Это на словах оно так красиво. На деле задачка получается монстроидальной. Сказал бы сначала, зачем вся эта кутерьма задумывается - а тогда и над решением можно думать. _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
to DrPass
Помнишь я что-то про сетевое меню говорил? Вот эта херня(перехват функции) должна использоваться там.
Дело в том, что некоторые задачи (приложения), которые используется на предприятии, пишут свои логи (или что-нибудь еще) и читают их только из той директории из которой они запущены. Прикол в том, что программы лежат в сетевой директории доступной только для чтения (так, что писать в нее свои логи и настройки они не могут), а рабочая директория на компе юзера, который запускает задачу, либо на сетевом диске юзера, которые доступны для записи.
В итоге имеем запускаемую программу из одной папки и пишущую/читающую свои настройки в/из другой. _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
Думаю, что идею с перехватом функции придется оставить. Ведь сишные проги могу использовать параметры через argv (указатель на двухмерный массив), т.е. без GetCommandLine и прочего.
Необходимо менять сразу же коммандную строку в адресном пространстве проги, после ее запуска и желательно до того, как она(программа) начнет что либо делать, ведь и при запуске она может использовать имя директории из которой была запущена.
Ну так каким макаром можно это сделать??? _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
| Цитата: | | сишные проги могу использовать параметры через argv (указатель на двухмерный массив), т.е. без GetCommandLine и прочего |
не согласен! это для тебя функция main самая первая, но не для компилятора. откуда, по-твоему, берутся значения в argv?
| Цитата: | | идею с перехватом функции придется оставить |
to dogma: так и быть, если будет время, я постараюсь сваять специально для тебя модуль перехвата...  |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
Помнится когда-то я получал параметры в проге на асме без использования всяких функций.
| Цитата: | | так и быть, если будет время, я постараюсь сваять специально для тебя модуль перехвата |
Он уже давно готов. Я просмотрел несколько способов. _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
|