> есть у меня имя и идентификатор некоторого процесса в > системе.Как обладая такими данными получить > месторасположение исполняемого файла процесса?????
посмотри Process32First (нет в NT4) или GetModuleFileNameEx (нет в 9x)
[Win32] сделал еще круче =)))20.10.02 19:02 Автор: beetle <beetle> Статус: Member
> посмотри Process32First (нет в NT4) или GetModuleFileNameEx > (нет в 9x)
Есть ли какая гарантия, что GetModuleFileNameEx, применённый к первому из EnumProcessModules вернёт именно то, что хочется?
Или он вернёт загруженный по наименьшему адресу модуль?
Просто интересно - уже не актуально, потому самому проверять лень, может кто знает.
[Win32] inside08.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