Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


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
там написано: " Учетные записи пользователей и групп являются доверенными объектами системы. Доверенные объекты – это сущности, которым может быть предоставлен или отклонен доступ к защищаемым объектам или ресурсам системы. Привилегии – это права доверенного объекта на совершение каких-либо действий по отношению ко всей системе."

Последний раз редактировалось Johny777, 20-07-2013 в 13:08. Причина: updated

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:42, 20-07-2013 | #821