Книга: Системное программирование в среде Windows
Идентификаторы процессов
Идентификаторы процессов
Процесс может получить идентификатор и дескриптор нового дочернего процесса из структуры PROCESS_INFORMATION. Разумеется, закрытие дескриптора дочернего процесса не приводит к уничтожению самого процесса; становится невозможным лишь доступ к нему со стороны родительского процесса. Для получения идентификационной информации о текущем процессе служат две функции.
HANDLE GetCurrentProcess(VOID)
DWORD GetCurrentProcessId(VOID)
В действительности функция GetCurrentProcess возвращает псевдодескриптор (pseudohandle), который не является наследуемым. Это значение может использоваться вызывающим процессом всякий раз, когда ему требуется его собственный дескриптор. Реальный дескриптор процесса создается на основе идентификатора (ID) процесса, включая и тот, который возвращается функцией GetCurrentProcessID, путем использования функции OpenProcess. Как и в случае любого разделяемого объекта, при отсутствии надлежащих разрешений доступа попытка открытия объекта процесса окажется неуспешной.
HANDLE OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId)
Возвращаемое значение: в случае успешного завершения — дескриптор процесса, иначе — NULL.
Параметры
dwDesiredAccess — определяет права доступа к процессу. Некоторые из возможных значений этого параметра перечислены ниже.
• SYNCHRONIZE — разрешается использование дескриптора процесса в функциях ожидания завершения процесса, которые описываются далее в этой главе.
• PROCESS_ALL_ACCESS — устанавливаются все флаги доступа к процессу.
• PROCESS_TERMINATE — делает возможным завершение процесса с использованием функции TerminateProcess.
• PROCESS_QUERY_INFORMATION — разрешает использование дескриптора процесса в функциях GetExitCodeProcess и GetPriorityClass для получения информации о процессе.
bInheritHandle — позволяет указать, является ли новый дескриптор наследуемым. Параметр dwProcessID является идентификатором процесса, запрашивающего дескриптор.
Наконец, выполняющийся процесс может определить полный путь доступа к файлу исполняемого модуля, который использовался для его запуска, с помощью функций GetModuleFileName или GetModuleFileNameEx, при вызове которых значение параметра hModule должно устанавливаться равным NULL. При вызове этой функции из DLL будет возвращено имя файла DLL, а не .ЕХЕ-файла, который использует эту библиотеку DLL.
- Процессы и потоки Windows
- Создание процесса
- Счетчики дескрипторов процессов
- Идентификаторы процессов
- Дублирование дескрипторов
- Завершение и прекращение выполнения процесса
- Ожидание завершения процесса
- Блоки и строки окружения
- Пример: параллельный поиск указанного текстового шаблона
- Процессы в многопроцессорной среде
- Временные характеристики процесса
- Пример: временные характеристики процессов
- Генерация управляющих событий консоли
- Пример: простое управление задачами
- Объекты задач
- Резюме
- Упражнения
- 9.2. Группы процессов
- Реальный (RGID) и эффективный (EGID) идентификаторы группы
- Идентификаторы процесса
- Счетчики дескрипторов процессов
- 3.1.2. Получение списка активных процессов
- 3.1.1. Идентификаторы процессов
- Глава 7 Чего нужно опасаться при моделировании бизнес-процессов. Проектные риски моделирования бизнеспроцессов
- 1.2.1. Ключевые слова и идентификаторы
- Реальный (RID) и эффективный (EUID) идентификаторы пользователя
- Эффективное взаимодействие процессов архитектуры Classic Server
- 1.2. Понятие информации. Общая характеристика процессов сбора, передачи, обработки и накопления информации
- 3.4.2. Остановка процессов