Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Full path 02.10.02 20:25
Автор: beetle <beetle> Статус: Member
|
есть у меня имя и идентификатор некоторого процесса в системе.Как обладая такими данными получить месторасположение исполняемого файла процесса?????
|
|
[Win32] Full path 02.10.02 21:55
Автор: ggg <ggg> Статус: Elderman
|
> есть у меня имя и идентификатор некоторого процесса в > системе.Как обладая такими данными получить > месторасположение исполняемого файла процесса?????
посмотри Process32First (нет в NT4) или GetModuleFileNameEx (нет в 9x)
|
| |
[Win32] сделал еще круче =))) 20.10.02 19:02
Автор: beetle <beetle> Статус: Member
|
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_dwProcessID);
if(hProcess == NULL){
ERR
goto exit;
}
{
PROCESS_BASIC_INFORMATION pbi;
ULONG ulReturnLength;
NTSTATUS lNtStatus = NtQueryInformationProcess (hProcess,ProcessBasicInformation,&pbi,sizeof(pbi),&ulReturnLength);
if(lNtStatus == STATUS_SUCCESS && ulReturnLength == sizeof(pbi)) {
char buf[128];
PROCESS_ENVIRONMENT_BLOCK peb;
BOOL bResult = ReadProcessMemory(hProcess,pbi.PebBaseAddress,&peb,sizeof(peb),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
wsprintf(buf,"%d",pbi.BasePriority);
m_szBasePriority = buf;
wsprintf(buf,"%s",(pbi.ExitStatus == 0) ? "EXITED":"STATUS_PENDING");
m_szExitStatus = buf;
wsprintf(buf,"%lu",pbi.UniqueProcessId);
m_szProcID = buf;
PROCESS_PARAMETRS pp;
bResult = ReadProcessMemory(hProcess,peb.pi,&pp,sizeof(pp),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
WCHAR sz_buf[_MAX_PATH];
bResult = ReadProcessMemory(hProcess,pp.CurrentDirectory.Buffer,sz_buf,sizeof(sz_buf),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
m_szLocation = sz_buf;
bResult = ReadProcessMemory(hProcess,pp.ApplicationName.Buffer,sz_buf,sizeof(sz_buf),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
m_szName = sz_buf;
bResult = ReadProcessMemory(hProcess,pp.CommandLine.Buffer,sz_buf,sizeof(sz_buf),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
m_szCommandLine = sz_buf;
}
}
вот так - прямо из ядра=))))))))
|
| |
[Win32] И мне интересно 06.10.02 03:05
Автор: Бяша <Biasha> Статус: Member
|
> посмотри Process32First (нет в NT4) или GetModuleFileNameEx > (нет в 9x)
Есть ли какая гарантия, что GetModuleFileNameEx, применённый к первому из EnumProcessModules вернёт именно то, что хочется?
Или он вернёт загруженный по наименьшему адресу модуль?
Просто интересно - уже не актуально, потому самому проверять лень, может кто знает.
|
| | |
[Win32] inside 08.10.02 09:24
Автор: beetle <beetle> Статус: Member
|
> Есть ли какая гарантия, что GetModuleFileNameEx, > применённый к первому из EnumProcessModules вернёт именно > то, что хочется? > Или он вернёт загруженный по наименьшему адресу модуль? > > Просто интересно - уже не актуально, потому самому > проверять лень, может кто знае я в начале очень хитро придумал:получал ID процесса из NtQuerySystemInformation, затем получал адрес PPEB процесса по его ID и далее выуживал из PPEB указатель на структуру PROCESSPARAMETERS из которой получал текущую директорию для процесса с ID. Но это не всегда работало(получал указатель на PROCESSPARAMETERS своего процесса вместо удаленного), потому попробовал сделать через psapi.dll.
Вот код - все работает абсолютно корректно:
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcID);
if(hProcess == NULL){
ERR
return 0;
}
char sz_buf[_MAX_PATH];
HMODULE hm_psapi = ::LoadLibrary("psapi.dll");
GMFNE pfn_GetModuleFileNameEx = (GMFNE)::GetProcAddress(hm_psapi,"GetModuleFileNameExA");
__asm {
mov esi,esp
push 104h
lea ecx,[sz_buf]
push ecx
push 0
mov edx,dword ptr [hProcess]
push edx
call dword ptr [pfn_GetModuleFileNameEx]
cmp esi,esp
lea edx,_chkesp
call edx
mov dword ptr [res],eax
}
первый параметр - handle нужного процесса, второй NULL - в итоге получаешь полную строку запуска процесса с описателем handle
|
| |
мегасенкс - 03.10.02 02:19
Автор: beetle <beetle> Статус: Member
|
|
|
|