Программное обеспечение САПР. Операционные системы. Майстренко Н.В - 23 стр.

UptoLike

FName: G:\Visual Studio\VB98\VB6.EXE
2. Получить имя и полное имя модуля:
Задаем: Handle: &H77E70000
Получаем:
Name: User32.dll
FName: G:\WINNT\system32\USER32.DLL
3. Получить дескриптор и полное имя:
Задаем: Name: User32.dll
Получаем:
Handle: &H77E70000
FName: G:\WINNT\system32\USER32.DLL
4. Получить дескриптор и имя:
Задаем: FName: G:\WINNT\system32\USER32.DLL
Получаем:
Handle: &H77E70000
Name: User32.dll
Получение идентификатора текущего процесса. Чтобы получить идентификатор текущего процесса, можно исполь-
зовать функцию GetCurrentProcessId, объявление которой выглядит так:
DWORD GetCurrentProcess ID(VOID);
Эта функция возвращает идентификатор процесса. Значение идентификатора процесса может быть в верхнем диапазоне
unsigned long, поэтому может потребоваться преобразование возвращаемого значения. Следует также учесть, что данная
функция работает только в текущем процессе. Не существует способа определить идентификатор другого процесса, кроме
как получить список всех процессов и выбрать из него тот процесс, характеристики которого требуются.
Получение идентификатора процесса от окна. Существует функция FindWindow. Она объявляется следующим обра-
зом:
HWND FindWindow(
LPCTSTR IpClassName, // Указатель на имя класса.
LPCTSTR IpWindowName // Указатель на имя окна.
);
Функция использует имя класса или заголовок окна для получения дескриптора окна. Имея дескриптор, можно вызвать
функцию GetWindowThreadProcessId, возвращающую идентификатор потока, который создал данное окно, и идентификатор
процесса, которому принадлежит данный поток. Синтаксис выглядит так:
DWORD GetWindowThreadProcessId(
HMD hWnd, // Дескриптор окна.
LPDWORD IpdwProcessId // Адрес переменной для
// идентификатора процесса.
);
Данная функция возвращает идентификатор потока. Кроме того, если ей передается указатель на DWORD в IpdwProces-
sIdl(), в целевой переменной возвращается идентификатор процесса.
Получение имен и дескрипторов модулей. Обычно одному процессу принадлежит много модулей, загруженных в его ад-
ресное пространство, и это, естественно, усложняет задачу получения дескрипторов и имен модулей.
Псевдодескрипторы процессов. Функция GetcurrentProcess возвращает псевдодескриптор текущего процесса:
HANDLE GetCurrentProcess(VOID) ;
Псевдодескриптор (pseudohandle) представляет собой упрощенный вариант дескриптора. По определению, псевдодеск-
рипторэто зависимое от процесса число, которое служит идентификатором процесса и может использоваться в вызовах
тех API-функций, которым требуемся дескриптор процесса.
Хотя назначение псевдодескрипторов и обычных дескрипторов почти одно и то же, у них все же есть некоторые суще-
ственные различия. Псевдодескрипторы не могут наследоваться порожденными процессами, как настоящие дескрипторы
(real handler). К тому же псевдодескрипторы ссылаются только на текущий процесс, а настоящие дескрипторы могут ссы-
латься и на внешний (foreign).
Windows предоставляет возможность получения настоящего дескриптора по псевдодескриптору при помощи API-
функции DuplicateHandle. Она определяется как
BOOL DuplicateHandle(
HANDLE hSourceProcessHandle, // Дескриптор процесса-источника.
HANDLE hSourceHandle, // Копируемый дескриптор.
HANDLE hTargetProcessHandle, // Дескриптор процесса-приемника.