Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Неверный результат работы функции


Страницы:   1 2

Андрей Жук ©   (2005-06-10 15:01:00) 

В продолжение...

BASE_ADDRESS[16]
MEMORY_BASIC_INFORMATION ProcessMemory;
HANDLE Process = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,false,PID);
VirtualQueryEx(Process,NULL,&ProcessMemory,sizeof(ProcessMemory));
  wsprintf(BASE_ADDRESS,"%u",(DWORD)ProcessMemory.BaseAddress);
  MessageBoxEx(hWindow,BASE_ADDRESS,"",MB_OK,419);

получаем всегда 0


Игорь Шевченко   (2005-06-10 21:55:00) [1]

alpet ©   (10.06.05 19:52) [27]

GetMappedFileName


alpet   (2005-06-10 19:52:00) [2]

VirtualQuery(Ex) используется для создания более подробной карты памяти. Например в Artmoney7 показывается информация не только о модулях, но и некоторых других смапленных файлах (например .nls). Интересно можно ли без драйвера (и API-перехвата) узнать и имя файла проекции, если известен ее адрес


Digitman   (2005-06-10 17:59:00) [3]


> Андрей Жук ©   (10.06.05 17:55) [25]


)

только не забывай, что это актуальныйадрес модуля, а не предпочтительный, т.е. тот что указан в заголовке соотв. РЕ-файла.


Андрей Жук   (2005-06-10 17:55:00) [4]

тю, черт. HMODULE у меня и так есть. Я ж его из EnumProcessModules получаю...
Спасибо.


Digitman   (2005-06-10 17:52:00) [5]

ну чего ты мудришь ?)

берем, к примеру, Маздай (Win9x/Me)

для него рекомендуемы ф-ции в составе ToolHelp API, для твоей задачи в частности - Module32First/Next

открываем справку, читаем:

Retrieves information about the first/next module associated with a process.

BOOL WINAPI Module32First(HANDLE hSnapshot, LPMODULEENTRY32 lpme);  


Parameters

hSnapshot

Handle of the snapshot returned from a previous call to the CreateToolhelp32Snapshot function.

lpme

Address of a buffer containing a MODULEENTRY32 structure.

открываем описание структуры MODULEENTRY32, видим там :

typedef struct tagMODULEENTRY32 {  
   DWORD   dwSize;
   DWORD   th32ModuleID;
   DWORD   th32ProcessID;
   DWORD   GlblcntUsage;
   DWORD   ProccntUsage;
   BYTE  * modBaseAddr;
   DWORD   modBaseSize;
    HMODULE hModule;
   char    szModule[MAX_MODULE_NAME32 + 1];
   char    szExePath[MAX_PATH];
} MODULEENTRY32;

выделенное жирным (хэндл модуля) и есть базовый адрес модуля в АП процесса !

в PSAPI и NativeAPI в соотв.структурах ты тоже встретишь хэндл модуля, и это будет тот же самый базовый адрес модуля в АП процесса.


Андрей Жук   (2005-06-10 17:43:00) [6]

В МСДН нашел, что ImageBase можно получить из
AUX_MODULE_BASIC_INFO
которая идет с
Windows Auxiliary API library version 1.0 or later
а иначе как?


Digitman   (2005-06-10 17:22:00) [7]


> Андрей Жук ©   (10.06.05 15:49) [12]
> А как базовый адресс получить иначе?


базовый адрес чего? модуля ?

перечисляй модули любым док.способом (toolhelp, psapi, nativeAPI), любой из них дает инф-цию об ImageBase модулей

VirtualQuery[Ex] же знать ничего не знает ни о каких "модулях", это из иной оперы, минимум одним уровнем ниже ..


Игорь Шевченко   (2005-06-10 17:22:00) [8]

Андрей Жук ©   (10.06.05 17:17) [20]

Это да. Сайт обновить у меня не получается. Не взыщи :)


Андрей Жук   (2005-06-10 17:17:00) [9]

Значит на сайте в QuerySystemInformation более старый класс лежит.


Игорь Шевченко   (2005-06-10 17:13:00) [10]

Андрей Жук ©   (10.06.05 16:52) [17]


> Ничего я не искал. Я его просто компилил.


Зря. Я выкладываю код не для компиляции, а для показа, как можно реализовать ту или иную идею. Все, что для компиляции лежит на сайте все.


Андрей Жук   (2005-06-10 17:07:00) [11]

т.е.
Address = DWORD(mbi.BaseAddress) + mbi.RegionSize;
?


Андрей Жук   (2005-06-10 16:52:00) [12]

Ничего я не искал. Я его просто компилил.
NtProcessInfo из твоей же проги QuerySystemInformation, что на сайте лежит


Игорь Шевченко   (2005-06-10 16:49:00) [13]

Андрей Жук ©   (10.06.05 16:14) [15]

Вот как ? Ты, если не секрет, поделись, откуда взял NtProcessInfo, а то в моей версии

 THSNtProcessInfo = class
 private
   function GetProcessName: string;
   function GetUserName: string;
 public
   Info: SYSTEM_PROCESSES_NT2000;
   Threads: THSNtThreadInfoList;

   constructor Create (const AInfo: SYSTEM_PROCESSES_NT2000);
   constructor CreateNt4 (const AInfo: SYSTEM_PROCESSES_NT4);
   destructor Destroy; override;
   property ProcessName: string read GetProcessName;
   property UserName: string read GetUserName;
 end;

....

function THSNtProcessInfo.GetProcessName: string;
begin
 Result := HSUnicodeStringToAnsiString(Info.ProcessName);
end;


И эта...ошибки не надо у меня искать. Я обычно выкладываю код, скомпилированный без ошибок.


Андрей Жук   (2005-06-10 16:14:00) [14]

Кстати, в том исходнике есть ошибка (возможна, для D6)
cbProcesses.Items.AddObject(FProcessesInfo[I].ProcessName,
не компилируется
компилируется если
cbProcesses.Items.AddObject(FProcessesInfo[I].Info.ProcessName.Buffer


alpet   (2005-06-10 16:12:00) [15]

Начинай с 0, и прибавляй размер региона.


Игорь Шевченко   (2005-06-10 16:04:00) [16]

Андрей Жук ©   (10.06.05 15:49) [12]

В соседней ветке код выложен. Читай и воздастся тебе


Андрей Жук   (2005-06-10 15:49:00) [17]

А как базовый адресс получить иначе?


Digitman   (2005-06-10 15:45:00) [18]


> вывод модулей работает


тебе просто модули нужно перечислить  - имена + базовые адреса ?
а зачем тогда понадобилась VirtualQueryEx ?


Digitman   (2005-06-10 15:38:00) [19]


> так смысл тогда этого параметра?


а это не параметр, это - результат.

параметр  - это

LPCVOID lpAddress, // address of region

ты передаешь в ф-цию некий адрес, а ф-ция возвращает тебе инф-цию о регионе, которому этот адрес принадлежит

к Imagebase модулей процесса эта инф-ция не имеет непосред.отношения.

Некий модуль может существовать или не существовать в АП процесса, а регионы там существуют всегда.


Суслик   (2005-06-10 15:29:00) [20]


>  [8] Андрей Жук ©   (10.06.05 15:29)

скачай с сайта Подгорецкого эл. вариант :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо