Функция устанавливает указанному или своему процессу, привилегии, разрешения на выполнение системных операций различных типов.
1 2 3 4 5 6 7 8 9 10 11 |
var procHandle: HWND; privStr: string; enable: Boolean; begin procHandle:= 0; privStr:= 'SeDebugPrivilege'; enable:= True; SetPrivilege(0, privStr, enable); end; |
Параметры
procHandle - дескриптор (handle) процесса (если указать 0, функция установит привилегию собственному процесу)
privStr - имя привилегии
enable - если true, дает привилегию, false - забирает
Результат
True, если операция успешна, False - если нет.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
function SetPrivilege(prochwnd: HWND; privilegeName: string; enable: boolean): boolean; var tpPrev, tp : TTokenPrivileges; token : THandle; dwRetLen : DWord; begin result := False; try if prochwnd = 0 then OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token) else OpenProcessToken(prochwnd, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token); tp.PrivilegeCount := 1; if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then begin if enable then tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else tp.Privileges[0].Attributes := 0; dwRetLen := 0; result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen); end; finally try CloseHandle(token); except end; end; end; |
Список некоторых имен привилегий
Имя
|
Описание
|
SeBackupPrivilege | Требуется для выполнения операций резервного копирования. Эта привилегия заставляет систему предоставлять весь контроль доступа на чтение к любому файлу, независимо от списка контроля доступа (ACL), указанного для файла. |
SeDebugPrivilege | Требуется для доступа, отладки и настройки памяти процесса, принадлежащего другой учетной записи. |
SeLoadDriverPrivilege | Требуется для загрузки или выгрузки драйвера устройства. |
SeManageVolumePrivilege | Требуется для включения привилегий управления томами. |
SeRemoteShutdownPrivilege | Требуется для завершения работы системы с помощью сетевого запроса. |
SeRestorePrivilege | Требуется для выполнения операций восстановления. Эта привилегия заставляет систему предоставлять все права доступа на запись к любому файлу, независимо от ACL, указанного для файла. |
SeSecurityPrivilege | Требуется для выполнения ряда функций, связанных с безопасностью, таких как контроль и просмотр сообщений аудита. Эта привилегия идентифицирует ее обладателя как оператора безопасности. |
SeShutdownPrivilege | Требуется для завершения работы локальной системы. |
SeSystemEnvironmentPrivilege | Требуется для изменения энергонезависимой ОЗУ систем, которые используют этот тип памяти для хранения информации о конфигурации. |
SeSystemProfilePrivilege | Требуется для сбора профилирующей информации для всей системы. |
SeSystemtimePrivilege | Требуется для изменения системного времени. |
SeTakeOwnershipPrivilege | Требуется, чтобы стать владельцем объекта без предоставления дискреционного доступа. Эта привилегия позволяет устанавливать значение владельца только на те значения, которые владелец может законно назначить как владелец объекта. |
SeTcbPrivilege | Эта привилегия идентифицирует ее обладателя как часть доверенной компьютерной базы. Дает право действовать как часть операционной системы. |
SeTimeZone | Требуется для настройки часового пояса, связанного с внутренними часами компьютера. |