информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsВсе любят медГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] И мне интересно 06.10.02 03:05  Число просмотров: 1100
Автор: Бяша <Biasha> Статус: Member
<"чистая" ссылка>
> посмотри Process32First (нет в NT4) или GetModuleFileNameEx
> (нет в 9x)

Есть ли какая гарантия, что GetModuleFileNameEx, применённый к первому из EnumProcessModules вернёт именно то, что хочется?
Или он вернёт загруженный по наименьшему адресу модуль?

Просто интересно - уже не актуально, потому самому проверять лень, может кто знает.
<programming>
[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
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach