Форум: "WinAPI";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];
ВнизCommandLine...in ReadProcessMemory??? Найти похожие ветки
← →
Cj © (2007-07-18 04:37) [0]Вотв ArtMoney короче нашел адрес указатель на текст командной строки любово процесса. отсеивал и нашел окончательное решение.
Сделал две функции которые берут ком-строку процесса:
function GetProcessCommandLineInSP1(PID:integer):string;// тестил у себя на SP1 в XP Professional
var
h:cardinal;
j:cardinal;
b:byte;
r:cardinal;
path:string;
adr:cardinal;
begin
h := openprocess(Process_VM_READ, false, pid);//открываю процесс на чтение
ReadProcessMemory(h,ptr($77c4c7a8){адрес-указатель на текст в процесах 4 байтное значение},@adr,4,r);
for j:=0 to 255 do
begin
ReadProcessMemory(h,ptr(adr+j),@b,1,r);//считываю текст 1-байтные значения
case b of
32..126,192..255:path:=path+chr(b);//читаю толко буквы и знаки//но все равно мусор есть.
end;
end;
result:=path;
closehandle(h);//закрываю проц.
end;
function GetProcessCommandLineInSP2(PID:integer):string;// тестил у брата на SP2 в XP Professional, тк первая функ-я вадает у него совсем другое
var
h:cardinal;
j:cardinal;
b:byte;
r:cardinal;
path:string;
adr:cardinal;
begin
h := openprocess(Process_VM_READ, false, pid);//открываю процесс на чтение
ReadProcessMemory(h,ptr($77c4c7a8){адрес-указатель на текст в процесах 4 байтное значение},@adr,4,r);
for j:=0 to 255 do
begin
ReadProcessMemory(h,ptr(adr+j),@b,1,r);//считываю текст 1-байтные значения
case b of
32..126,192..255:path:=path+chr(b);//читаю толко буквы и знаки//но все равно мусор есть.
end;
end;
result:=path;
closehandle(h);//закрываю проц.
end;
сначала то я сделал для своего: у меня SP1 а у брата это выдавало фигню, ну в общем нашел адреса к-строки и у него, и вот у меня вопрос: эти адреса зависят от Servica Pack-ов или они у каждого разные, протестите плиз функции и скажите получилось, или нет.
И еще: если все-таки для каждого компа адреса разные, то их тоже можно как нибудь найти, только вот как?-если есть идеи, скажите.
← →
Rocki (2007-07-18 07:18) [1]у меня на СП2 работает, только впереди какие-то закорючки
← →
Сергей М. © (2007-07-18 08:14) [2]
> $77c4c7a8){адрес-указатель на текст в процесах 4 байтное
> значение}
Кулибин)
← →
Сергей М. © (2007-07-18 08:28) [3]
> Cj
http://rsdn.ru/Forum/message/18652.flat.aspx
← →
Cj © (2007-07-18 16:19) [4]спасибо, почитал. В принципе я делал 2-м неполным способом. Получается здесь Указатель адреса указателя, вот как
← →
Сергей М. © (2007-07-18 17:00) [5]
> Cj © (18.07.07 16:19) [4]
Кулибин ты и есть кулибин)
← →
SLoW.AlfaMoon.Com (2007-07-18 17:27) [6]я же тебе давал код! в вопросе про openprocess или гдето еще. код у меня дома, завтра могу принести если не забуду)
← →
Cj © (2007-07-18 18:02) [7][5] в чем прикол? [6] OpenProcess я спрашивал, но кода CommandLine ты мне не давал, я эту ф-ю доделал, но все равно спасибо
← →
SLoW.AlfaMoon.Com (2007-07-19 09:34) [8]про pEB слышал?
по смещению 10h от адреса PEB находится указатель на _RTL_USER_PROCESS_PARAMETERS, а там по смещению 40h находится указатель на UNICODE_STRING с командной строкой.
первое смещение верно для 2k,xp,2k3. второе в хр, но думаю 2к и 2к3 то же (проверить негде)
на всякий случай функция
function GetProcessPebAddress(ProcessHandle: THandle): PPeb;
var InfoLen, InfoSize: DWORD;
Info: PPROCESS_BASIC_INFORMATION;
ns: ntstatus;
begin
result := nil;
InfoLen := sizeof(_PROCESS_BASIC_INFORMATION);
InfoSize := 0;
Info := VirtualAlloc(nil,InfoLen,MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
ns := ZwQueryInformationProcess(ProcessHandle,ProcessBasicInformation, Info,
InfoLen, @InfoSize);
Result := Info.PebBaseAddress;
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c