Текущий архив: 2007.05.20;
Скачать: CL | DM;
Вниз
Paramstr(?) Найти похожие ветки
← →
Cj © (2007-04-28 11:40) [0]Всем привет. Как узнать с какими параметрами запущен процесс? Желательно с примером, заранее благодарен.
← →
Cj © (2007-04-28 11:40) [1]Конечно не мой а чужой
← →
clickmaker © (2007-04-28 11:42) [2]? = 1 и выше - параметры командной строки, разделенные пробелами
0 - путь к самому приложению
Может пора уже в хелп начать заглядывать, а?
← →
Cj © (2007-04-28 11:46) [3]
> ? = 1 и выше - параметры командной строки, разделенные пробелами0
> - путь к самому приложениюМожет пора уже в хелп начать заглядывать,
> а?
Действительно.Слушай а я и не знал. Круто. Вот это Да...
НЕТ! параметры у ЧУЖОГО процесса, как?
← →
clickmaker © (2007-04-28 11:52) [4]
> Действительно.Слушай а я и не знал
день прожит не зря, значит )
внедрись в процесс и вызови там GetCommandLine()
← →
Cj © (2007-04-28 12:00) [5]
> внедрись в процесс и вызови там GetCommandLine()
Насколько я знаю можно внедрить DLL но если есть другой способ (чтоб с собой был только один EXE-шник), то я-ламер ты-мастер и прошу кинуть примерчик plizzz
← →
Сергей М. © (2007-04-28 12:02) [6]http://www.codeproject.com/threads/CmdLine.asp?df=100&forumid=182386&exp=0&select=1415563&tid=1395207
← →
Cj © (2007-04-28 12:05) [7]
> Сергей М. ©
-тебе бочку варенья
> clickmaker ©
-тебе корзину печенья
← →
Ketmar © (2007-04-28 12:59) [8]вот только хотел сказать, что нафиг не надо никуда внедряться -- и тут опередили...
← →
SLoW.AlfaMoon.Com (2007-04-28 16:31) [9]
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), далее посмотришь по структуре. Целиковый код писать слегка лениво.
← →
SLoW.AlfaMoon.Com (2007-04-28 16:57) [10]далее тебе надо прочитать структуру, указатель на которую в параметре
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;
Какое тебе там нужно поле, я думаю, догадаешься. :))
Страницы: 1 вся ветка
Текущий архив: 2007.05.20;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.035 c