Модель системы безопасности Windows NT дает возможность Вам управлять доступом к объектам процесса. Для получения дополнительной информации о системе безопасности, см. статью
Модель управления доступом.Когда пользователь открывает сессию, операционная система Microsoft® Windows® собирает набор данных, который уникально идентифицирует пользователя в течение опознавательного процесса, и сохраняет это в признаке доступа. Этот признак доступа описывает контекст системы безопасности всех процессов, связанных с пользователем. Контекст защиты (системы безопасности) процесса - это набор полномочий, данных процессу или учетной записи пользователя, которая создавала процесс.
Вы можете задавать дескриптор безопасности для процесса, когда вызываете функцию
CreateProcess, CreateProcessAsUser или CreateProcessWithLogonW. Если Вы устанавливаете значение ПУСТО (NULL), процесс получает заданный по умолчанию дескриптор безопасности. Списки контроля доступа (ACL) в заданном по умолчанию дескрипторе безопасности для процесса поступают от первичного маркера или маркера заимствования прав создателя.Чтобы извлечь данные о дескрипторе безопасности процесса, вызовите функцию
GetSecurityInfo. Чтобы изменить дескриптор безопасности процесса, вызовите функцию SetSecurityInfo.Правильные права доступа для объектов процесса включают в себя стандартные права доступа
DELETE, READ_CONTROL, SYNCHRONIZE, WRITE_DAC и WRITE_OWNER , в дополнение к нижеследующим конкретным для процесса правам доступа.
Значение |
Предназначение |
PROCESS_ALL_ACCESS |
Все возможные права доступа для объекта процесса. |
PROCESS_CREATE_PROCESS |
Необходимо для создания процесса. |
PROCESS_CREATE_THREAD |
Необходимо для создания потока. |
PROCESS_DUP_HANDLE |
Необходимо для дублирования дескриптора используемого функцией DuplicateHandle. |
PROCESS_QUERY_INFORMATION |
Необходимо, чтобы извлечь некоторую информацию о процессе, такую как его код выхода и класс приоритета (см. GetExitCodeProcess и GetPriorityClass). |
PROCESS_SET_QUOTA |
Необходимо, чтобы установить ограничения памяти, используемые функцией SetProcessWorkingSetSize. |
PROCESS_SET_INFORMATION |
Необходимо, чтобы установить некоторую информацию о процессе, такую как его класс приоритета (см. SetPriorityClass). |
PROCESS_TERMINATE |
Необходимо для завершения работы процесса с использованием функции TerminateProcess. |
PROCESS_VM_OPERATION |
Необходимо, чтобы выполнять операцию в адресном пространстве процесса (см. VirtualProtectEx и WriteProcessMemory). |
PROCESS_VM_READ |
Необходимо, чтобы читать память в процессе, используя функцию ReadProcessMemory. |
PROCESS_VM_WRITE |
Необходимо, чтобы записывать в память процесса, используя функцию WriteProcessMemory. |
SYNCHRONIZE |
Необходимо, чтобы ждущий процесс завершил работу, используя функции ожидания. |
Дескриптор, возвращенный функцией
CreateProcess, имеет доступ PROCESS_ALL_ACCESS к объекту процесса. Когда Вы вызываете функцию OpenProcess, система проверяет требуемые права доступа по списку разграничительного контроля доступа (DACL) в дескрипторе безопасности процесса. Когда Вы вызываете функцию GetCurrentProcess, система возвращает псевдодескриптор с максимальным доступом, который позволяет список разграничительного контроля доступа (DACL) вызывающей программе.Вы можете запросить право доступа
ACCESS_SYSTEM_SECURITY объекту процесса, если желаете читать или записывать в объект SACL. Для получения дополнительной информации, см., статью Списки контроля доступа (ACL) и Права доступа SACL.
Внимание! процесс, который имеет некоторые из прав доступа, отмеченные здесь может использовать их, чтобы получить другие права доступа. Например, если процесс А имеет дескриптор процесса B с доступом PROCESS_DUP_HANDLE, он может продублировать псевдодескриптор для процесса B. Это создает дескриптор, который имеет максимум прав доступа к процессу B. Для получения дополнительной информации о псевдодескрипторах, см. GetCurrentProcess. |