R.i.m.s.k.y.,
Цитата R.i.m.s.k.y.:
я наверное что-то не так делаю, »
|
Вот чисто настройка привилегии:
читать дальше »
Код:

#define A = (Defined UNICODE) ? "W" : "A"
const
TOKEN_QUERY = $8;
TOKEN_ADJUST_PRIVILEGES = $20;
SE_PRIVILEGE_ENABLED = $2;
////////////////////////////////////////////////
SE_CREATE_TOKEN_NAME = 'SeCreateTokenPrivilege';
SE_ASSIGNPRIMARYTOKEN_NAME = 'SeAssignPrimaryTokenPrivilege';
SE_LOCK_MEMORY_NAME = 'SeLockMemoryPrivilege';
SE_INCREASE_QUOTA_NAME = 'SeIncreaseQuotaPrivilege';
SE_UNSOLICITED_INPUT_NAME = 'SeUnsolicitedInputPrivilege';
SE_MACHINE_ACCOUNT_NAME = 'SeMachineAccountPrivilege';
SE_TCB_NAME = 'SeTcbPrivilege';
SE_SECURITY_NAME = 'SeSecurityPrivilege';
SE_TAKE_OWNERSHIP_NAME = 'SeTakeOwnershipPrivilege';
SE_LOAD_DRIVER_NAME = 'SeLoadDriverPrivilege';
SE_SYSTEM_PROFILE_NAME = 'SeSystemProfilePrivilege';
SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';
SE_PROF_SINGLE_PROCESS_NAME = 'SeProfileSingleProcessPrivilege';
SE_INC_BASE_PRIORITY_NAME = 'SeIncreaseBasePriorityPrivilege';
SE_CREATE_PAGEFILE_NAME = 'SeCreatePagefilePrivilege';
SE_CREATE_PERMANENT_NAME = 'SeCreatePermanentPrivilege';
SE_BACKUP_NAME = 'SeBackupPrivilege';
SE_RESTORE_NAME = 'SeRestorePrivilege';
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
SE_DEBUG_NAME = 'SeDebugPrivilege';
SE_AUDIT_NAME = 'SeAuditPrivilege';
SE_SYSTEM_ENVIRONMENT_NAME = 'SeSystemEnvironmentPrivilege';
SE_CHANGE_NOTIFY_NAME = 'SeChangeNotifyPrivilege';
SE_REMOTE_SHUTDOWN_NAME = 'SeRemoteShutdownPrivilege';
SE_UNDOCK_NAME = 'SeUndockPrivilege';
SE_SYNC_AGENT_NAME = 'SeSyncAgentPrivilege';
SE_ENABLE_DELEGATION_NAME = 'SeEnableDelegationPrivilege';
SE_MANAGE_VOLUME_NAME = 'SeManageVolumePrivilege';
SE_IMPERSONATE_NAME = 'SeImpersonatePrivilege';
SE_CREATE_GLOBAL_NAME = 'SeCreateGlobalPrivilege';
type
LUID = record
LowPart: DWORD;
HighPart: Longint;
end;
LUID_AND_ATTRIBUTES = record
Luid: LUID;
Attributes: DWORD;
end;
TOKEN_PRIVILEGES = record
PrivilegeCount: DWORD;
Privileges: array [0..0] of LUID_AND_ATTRIBUTES;
end;
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall';
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall';
function LookupPrivilegeValue(lpSystemName, lpName: String; var lpLuid: LUID): BOOL; external 'LookupPrivilegeValue{#A}@advapi32.dll stdcall';
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; NewState: TOKEN_PRIVILEGES; BufferLength: DWORD; var PreviousState: TOKEN_PRIVILEGES; var ReturnLength: Longint): BOOL; external 'AdjustTokenPrivileges@advapi32.dll stdcall';
function AdjustSelfProcessPrivileges(const PrivilegeName: String; const Enable: Boolean): Boolean;
var
tkp: TOKEN_PRIVILEGES;
hToken: THandle;
ret: Longint;
begin
// open process token adjust privileges
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
try
// Get the locally unique identifier (LUID) .
if LookupPrivilegeValue('', PChar(PrivilegeName), tkp.Privileges[0].Luid) then
begin
// fill token privileges struct
tkp.PrivilegeCount := 1; // one privilege to set
if Enable then
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else
tkp.Privileges[0].Attributes := 0;
// enable or disable the privilege
Result := AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret);
//if not Result then ShowMessage(SysErrorMessage(GetLastError));
end;
finally
CloseHandle(hToken);
end;
end;
/////////////////////////////
procedure InitializeWizard();
begin
if AdjustSelfProcessPrivileges(SE_DEBUG_NAME, True) then
try
MsgBox('Privilege Ajusted', mbInformation, MB_OK);
MsgBox('Do something', mbInformation, MB_OK);
finally
if AdjustSelfProcessPrivileges(SE_DEBUG_NAME, False) then MsgBox('Privilege Not Ajusted', mbInformation, MB_OK);
end
else MsgBox('Error', mbInformation, MB_OK);
end;
Какая из них тебе нужна не заню
Предполагаю - для каждого действия с твоей стороны нужна своя привилегия, а не одна на все!
Если используешь несколько подряд. Не забывай удалять старую (при помощи булев аргумента Enable) перед настройкой новой
UPD:
Кажись это всё-таки то, что тебе нужно. Вот статья
http://www.rsdn.ru/article/baseserv/privileges.xml
там написано: "
Учетные записи пользователей и групп являются доверенными объектами системы. Доверенные объекты – это сущности, которым может быть предоставлен или отклонен доступ к защищаемым объектам или ресурсам системы. Привилегии – это права доверенного объекта на совершение каких-либо действий по отношению ко всей системе."