![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Paramstr(?) [D7, WinXP]
Cj © (2007-04-28 11:40:00)Всем привет. Как узнать с какими параметрами запущен процесс? Желательно с примером, заранее благодарен.
SLoW.AlfaMoon.Com (2007-04-28 16:57:00) [1]далее тебе надо прочитать структуру, указатель на которую в параметре
ProcessParameters
_RTL_USER_PROCESS_PARAMETERS = record // not packed!
(*000*)MaximumLength: ULONG;
(*004*)Length: ULONG;
(*008*)Flags: ULONG; // Bit 0: all pointers normalized
(*00c*)DebugFlags: ULONG;
(*010*)ConsoleHandle: HANDLE;
(*014*)ConsoleFlags: ULONG;
(*018*)StandardInput: HANDLE;
(*01c*)StandardOutput: HANDLE;
(*020*)StandardError: HANDLE;
(*024*)CurrentDirectory: CURDIR;
(*030*)DllPath: UNICODE_STRING;
(*038*)ImagePathName: UNICODE_STRING;
(*040*)CommandLine: UNICODE_STRING;
(*048*)Environment: PVOID;
(*04c*)StartingX: ULONG;
(*050*)StartingY: ULONG;
(*054*)CountX: ULONG;
(*058*)CountY: ULONG;
(*05c*)CountCharsX: ULONG;
(*060*)CountCharsY: ULONG;
(*064*)FillAttribute: ULONG;
(*068*)WindowFlags: ULONG;
(*06c*)ShowWindowFlags: ULONG;
(*070*)WindowTitle: UNICODE_STRING;
(*078*)DesktopInfo: UNICODE_STRING;
(*080*)ShellInfo: UNICODE_STRING;
(*088*)RuntimeData: UNICODE_STRING;
(*090*)CurrentDirectories: array[0..31] of RTL_DRIVE_LETTER_CURDIR;
end;
Какое тебе там нужно поле, я думаю, догадаешься. :))
SLoW.AlfaMoon.Com (2007-04-28 16:31:00) [2]
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;
function ReadProcessMem(hProcess: THandle; BaseAddress: PVoid; MemSize: DWORD; var Mem: PVoid; var AllocatedSize: DWORD): Boolean;
begin
Result := False;
Mem := VirtualAlloc(nil,MemSize,MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
if ZwReadVirtualMemory(hProcess, BaseAddress,
Mem, MemSize, @AllocatedSize) = STATUS_SUCCESS then
begin
Result := True;
end
else
begin
VirtualFree(Mem, 0, MEM_DECOMMIT or MEM_RELEASE);
Mem := nil;
AllocatedSize := 0;
end;
end;
Этих двух функций вполне хватит. Получишь указатель на PEB процесса, прочитаешь кусок памяти по этому указателю длиной length(PEB), далее посмотришь по структуре. Целиковый код писать слегка лениво.
Ketmar (2007-04-28 12:59:00) [3]вот только хотел сказать, что нафиг не надо никуда внедряться -- и тут опередили...
Cj (2007-04-28 12:05:00) [4]
> Сергей М. ©
-тебе бочку варенья
> clickmaker ©
-тебе корзину печенья
Сергей М. (2007-04-28 12:02:00) [5]http://www.codeproject.com/threads/CmdLine.asp?df=100&forumid=182386&exp=0&select=1415563&tid=1395207
Cj (2007-04-28 12:00:00) [6]
> внедрись в процесс и вызови там GetCommandLine()
Насколько я знаю можно внедрить DLL но если есть другой способ (чтоб с собой был только один EXE-шник), то я-ламер ты-мастер и прошу кинуть примерчик plizzz
clickmaker (2007-04-28 11:52:00) [7]
> Действительно.Слушай а я и не знал
день прожит не зря, значит )
внедрись в процесс и вызови там GetCommandLine()
Cj (2007-04-28 11:46:00) [8]
> ? = 1 и выше - параметры командной строки, разделенные пробелами0
> - путь к самому приложениюМожет пора уже в хелп начать заглядывать,
> а?
Действительно.Слушай а я и не знал. Круто. Вот это Да...
НЕТ! параметры у ЧУЖОГО процесса, как?
clickmaker (2007-04-28 11:42:00) [9]? = 1 и выше - параметры командной строки, разделенные пробелами
0 - путь к самому приложению
Может пора уже в хелп начать заглядывать, а?
Cj (2007-04-28 11:40:00) [10]Конечно не мой а чужой