Faost
28.02.2010, 19:14
Здравствуйте, имеется процедура, в которую один раз на вход передается указатель на структуру, который после окончания работы процедуры естественно затирается.
Так вот, нужно его как-нибудь сохранить, чтобы уже при повторном вызове процедуры, когда ей этот указатель не передается, процедура могла достать его и работать с ним.
Глобальные переменные прямо использовать нельзя, т.к. эта процедура внедряется в посторонний процесс; писать на диск/в реестр тоже не вариант, т.е. нужно этот указатель сохранить в памяти самого процесса. Может есть в винде какие-нибудь функции для этого? (Что-то типа своеобразного контейнера).
Думал еще прямо ссылаться на указатель, а в момент внедрения процедуры в другой процесс "перебить" его (а верней адрес, который ему будет присваиваться) на новый адрес структуры, который я в последствии получаю. Но как его отыскать во внедренной функции, не представляю.
Пробовал также с дельта-смещением пошаманить, но не смог совместить асм-код с делфийским.
Код:
type
TMyStruct = record
...
...
...
end;
function ThisFunction(N: pointer = nil): Integer; stdcall;
begin
...?
with TMyStruct(N^) do
...
end;
//где N передается 1 раз при
var X: TMyStruct;
N, Proc: pointer;
...
begin
...
Внедряю структуру;
N:= Указатель на внедренную X;
Внедряю процедуру;
Proc:= Указатель на внедренную ThisFunction;
CreateRemoteThread(OtherProcess, nil, 0, Proc, N, 0, TID);
end.
Так вот, нужно его как-нибудь сохранить, чтобы уже при повторном вызове процедуры, когда ей этот указатель не передается, процедура могла достать его и работать с ним.
Глобальные переменные прямо использовать нельзя, т.к. эта процедура внедряется в посторонний процесс; писать на диск/в реестр тоже не вариант, т.е. нужно этот указатель сохранить в памяти самого процесса. Может есть в винде какие-нибудь функции для этого? (Что-то типа своеобразного контейнера).
Думал еще прямо ссылаться на указатель, а в момент внедрения процедуры в другой процесс "перебить" его (а верней адрес, который ему будет присваиваться) на новый адрес структуры, который я в последствии получаю. Но как его отыскать во внедренной функции, не представляю.
Пробовал также с дельта-смещением пошаманить, но не смог совместить асм-код с делфийским.
Код:
type
TMyStruct = record
...
...
...
end;
function ThisFunction(N: pointer = nil): Integer; stdcall;
begin
...?
with TMyStruct(N^) do
...
end;
//где N передается 1 раз при
var X: TMyStruct;
N, Proc: pointer;
...
begin
...
Внедряю структуру;
N:= Указатель на внедренную X;
Внедряю процедуру;
Proc:= Указатель на внедренную ThisFunction;
CreateRemoteThread(OtherProcess, nil, 0, Proc, N, 0, TID);
end.