ВУЗ:
Составители:
HINSTANCE hInstance, // Дескриптор экземпляра приложения.
LPCTSTR IpBitmapeName // Адрес имени ресурса растровой
// картинки.
);
Идентификация процесса. В программировании API, связанном с идентификацией процессов, часто используются че-
тыре объекта:
1) идентификатор процесса;
2) дескриптор процесса;
3) полное имя загрузочного файла;
4) дескриптор модуля загрузочного файла процесса.
Получение дескриптора процесса по его идентификатору. По идентификатору можно определить дескриптор любо-
го процесса с помощью функции OpenProcess:
HANDLE OpenProcess(
DWORD dwDesiredAccess, // Флаг доступа.
BOOL bInheritHandle, // Флаг наследования дескриптора.
DWORD dwProcessID // Идентификатор процесса.
);
• dwDesiredAccess – имеет отношение к правам доступа и может принимать различные значения:
PROCESS_ALL_ACCESS эквивалентно установке флагов полного доступа;
PROCESS_DUP_HANDLE использует дескриптор как исходного процесса, так и принимающего в функции Duplicate-
Handle для копирования (дублирования) дескриптора;
PROCESS_QUERY_INFORMATTON задействует дескриптор процесса для чтения информации из объекта Process;
PROCESS_VM_OPERATION использует дескриптор процесса для модификации виртуальной памяти процесса;
PROCESS_TERMINATE работает для завершения процесса с его дескриптором в функции TerminateProcess;
PROCESS_VM_READ применяет для чтения из виртуальной памяти процесса его дескриптор в функции ReadProcess-
Memory;
PROCESS_VM_WRITE использует для записи в виртуальную память процесса его дескриптор в функции WriteProc-
essMernory;
SYNCHRONIZE (Windows NT) работает с дескриптором процесса в любой из функций ожидания, таких как Wait-
ForSingleObject, для ожидания завершения процесса.
• bInheritHandle – установлен в значение True, для того чтобы позволить порожденным процессам наследовать деск-
риптор. Иначе говоря, порожденный процесс получает дескриптор родительского процесса. Отметим, что значение дескрип-
тора может изменяться.
• dwProcessID – должен иметь значение идентификатора того процесса, дескриптор которого нужно узнать. Функция
OpenProcess возвращает дескриптор указанного процесса.
Полученный дескриптор обязательно должен быть закрыт, если он больше не нужен. Это делается путем вызова функ-
ции CloseHandle:
BOOL CloseHandle(
HANDLE hObject // Дескриптор закрываемого объекта.
);
Имена файлов и дескрипторы модулей. Перейти от имени файла модуля к дескриптору модуля и наоборот не состав-
ляет особого труда, по крайней мере, в пределах одного процесса. Функция GetModuleFileName принимает дескриптор мо-
дуля, чтобы вернуть полное имя (имя и путь) исполняемого файла:
DWORD GetModuleFileName(
HMODULE hModule, // Дескриптор модуля.
LPTSTR IpFilename, // Указатель на буфер-приемник
// пути к модулю.
DWORD nSize // Размер буфера в символах.
);
Эта функция работает только из того процесса, дескриптор модуля которого задается. Ее нельзя использовать из друго-
го процесса.
Функция GetModuleHandle, которая также применяется внутри одного процесса, выполняет обратное действие –
возвращает дескриптор модуля по имени файла (без пути):
HMODULE GetModuleHandle(
LPCTSTR IpModuleName // Имя модуля.
);
С использованием приведенных API-функций можно разработать функцию, которая, принимая дескриптор, имя или
полное имя модуля, возвращает другие два элемента в своих выходных параметрах. Возможны четыре варианта работы этой
функции, например:
1. Получить дескриптор, имя и полное имя ЕХЕ:
Handle: &HFFFFFFFF
Name: VB6.EXE
Страницы
- « первая
- ‹ предыдущая
- …
- 20
- 21
- 22
- 23
- 24
- …
- следующая ›
- последняя »