首页  编辑  

临时提升权限

Tags: /超级猛料/OS.操作系统/权限控制/   Date Created:

如果程序以普通用户运行,如果需要管理员权限来做某些事情,这个时候需要临时提升权限,完成后恢复普通用户权限,该如何做?

var

  lngLogonType, lngLogonProvider : Integer;

  lngTokenHandle, hAccessToken : THandle;

  strAdminUser, strAdminDomain, strAdminPassword : String;

  blnResult : Boolean;

  lngLogonType := LOGON32_LOGON_INTERACTIVE; // LOGON32_LOGON_NETWORK;

  lngLogonProvider := LOGON32_PROVIDER_DEFAULT;

  strAdminUser := 'AdminUserName';

  strAdminDomain := 'DomainName';

  strAdminPassword := '******';

  blnResult := LogonUser(PChar(strAdminUser), PChar(strAdminDomain),

PChar(strAdminPassword),lngLogonType, lngLogonProvider,lngTokenHandle);

  if not blnResult then begin

        LastError := 'Can''t Logon User ' + strAdminUser;

        exit;

  end;

  blnResult := ImpersonateLoggedOnUser(lngTokenHandle);

  if not blnResult then begin

        LastError := 'Can''t Impersonate Logged On User';

        exit;

  end;