Сталкнулся с такой проблемой. Вот к примеру я знаю Pid процесса, как можно узнать параметры переданные этому процессу при запуске. Вообще в какую сторону копать?
У мну де-то программка была, которая узнавала параметры переданные процессу ну и не только... Вообщем покопаюсь, если найду то выложу.
перехватывать нужно CreateProcessW, внутри нее параметр - lpCommandLine считывай, это параметры ком.строки Code: BOOL WINAPI CreateProcess( __in LPCTSTR lpApplicationName, __in_out LPTSTR lpCommandLine, __in LPSECURITY_ATTRIBUTES lpProcessAttributes, __in LPSECURITY_ATTRIBUTES lpThreadAttributes, __in BOOL bInheritHandles, __in DWORD dwCreationFlags, __in LPVOID lpEnvironment, __in LPCTSTR lpCurrentDirectory, __in LPSTARTUPINFO lpStartupInfo, __out LPPROCESS_INFORMATION lpProcessInformation );
гыгыгы люблю античатовских кодеров "как показать месагбокс?" - "перехватывай swapcontext, находи там потоки explorer, по нему explorer.exe, потом таблицу импорта, выдирай оттуда адрес MessageBoxA, копируй через IoAllocateMdl драйвером в свой процесс и запускай..." если посмотреть на GetCommandLineA, можно заметить инфа хранится в PEB, открывай процесс по PID и читай оттуда все что хочешь, включая его STARTUPINFO и command line
Вообще, по хорошему, надо использовать ZwQueryInformationProcess(), но т.к. вам это все равно не обьяснишь, придется сделать так: (наверное для всех WinNT) Code: #define PID 1072 // PID of target process static LPSTR szGetCommandLineA = "GetCommandLineA"; static LPSTR szKernel32 = "kernel32.dll"; static ULONG uRead; static ULONG uCmdLineAddr; LPSTR __declspec(naked) __stdcall getCommandLineProcess( ULONG uPid ) { __asm { push ebp mov ebp, esp call dword ptr [GetProcessHeap] push MAX_PATH push HEAP_ZERO_MEMORY push eax call dword ptr [HeapAlloc] // allocate heap mov edi, eax push dword ptr [uPid] push 0 push PROCESS_VM_READ call dword ptr [OpenProcess] // open process test eax, eax jz err mov ebx, eax push szKernel32 call dword ptr [GetModuleHandle] push szGetCommandLineA push eax call dword ptr [GetProcAddress] // get addr of GetCommandLineA mov eax, dword ptr [eax+1] // get operand of [GetCommandLineA] first instruction (mov eax, [...]) push offset uRead push 4 push offset uCmdLineAddr push eax push ebx call dword ptr [ReadProcessMemory] // read address of command line string push offset uRead push MAX_PATH push edi push dword ptr [uCmdLineAddr] push ebx call dword ptr [ReadProcessMemory] // read command line pop ebp jmp e err: and eax, 0 // error e: mov eax, edi // ok retn 4 } } LPSTR szCmdLine = getCommandLineProcess( PID ); MessageBox( 0, szCmdLine, "Cmd line of process", MB_ICONINFORMATION ); HeapFree( GetProcessHeap(), 0, szCmdLine );