zoukankan      html  css  js  c++  java
  • 判断当前进程是否以管理员权限启动的

    uses
     shlobj;
     type
     WELL_KNOWN_SID_TYPE = (
     WinNullSid,
     WinWorldSid,
     WinLocalSid,
     WinCreatorOwnerSid,
     WinCreatorGroupSid,
     WinCreatorOwnerServerSid,
     WinCreatorGroupServerSid,
     WinNtAuthoritySid,
     WinDialupSid,
     WinNetworkSid,
     WinBatchSid,
     WinInteractiveSid,
     WinServiceSid,
     WinAnonymousSid,
     WinProxySid,
     WinEnterpriseControllersSid,
     WinSelfSid,
     WinAuthenticatedUserSid,
     WinRestrictedCodeSid,
     WinTerminalServerSid,
     WinRemoteLogonIdSid,
     WinLogonIdsSid,
     WinLocalSystemSid,
     WinLocalServiceSid,
     WinNetworkServiceSid,
     WinBuiltinDomainSid,
     WinBuiltinAdministratorsSid,
     WinBuiltinUsersSid,
     WinBuiltinGuestsSid,
     WinBuiltinPowerUsersSid,
     WinBuiltinAccountOperatorsSid,
     WinBuiltinSystemOperatorsSid,
     WinBuiltinPrintOperatorsSid,
     WinBuiltinBackupOperatorsSid,
     WinBuiltinReplicatorSid,
     WinBuiltinPreWindows2000CompatibleAccessSid,
     WinBuiltinRemoteDesktopUsersSid,
     WinBuiltinNetworkConfigurationOperatorsSid,
     WinAccountAdministratorSid,
     WinAccountGuestSid,
     WinAccountKrbtgtSid,
     WinAccountDomainAdminsSid,
     WinAccountDomainUsersSid,
     WinAccountDomainGuestsSid,
     WinAccountComputersSid,
     WinAccountControllersSid,
     WinAccountCertAdminsSid,
     WinAccountSchemaAdminsSid,
     WinAccountEnterpriseAdminsSid,
     WinAccountPolicyAdminsSid,
     WinAccountRasAndIasServersSid,
     WinNTLMAuthenticationSid,
     WinDigestAuthenticationSid,
     WinSChannelAuthenticationSid,
     WinThisOrganizationSid,
     WinOtherOrganizationSid,
     WinBuiltinIncomingForestTrustBuildersSid,
     WinBuiltinPerfMonitoringUsersSid,
     WinBuiltinPerfLoggingUsersSid,
     WinBuiltinAuthorizationAccessSid,
     WinBuiltinTerminalServerLicenseServersSid);
     {$EXTERNALSYM WELL_KNOWN_SID_TYPE}
     TWellKnownSidType = WELL_KNOWN_SID_TYPE;
     
    function CreateWellKnownSid(WellKnownSidType: WELL_KNOWN_SID_TYPE; DomainSid: PSID;
     pSid: PSID; var cbSid: DWORD): BOOL; stdcall;external advapi32 name 'CreateWellKnownSid';
     function CheckTokenMembership(TokenHandle: THANDLE; SidToCheck: PSID; var IsMember: BOOL): BOOL; stdcall; external advapi32 name 'CheckTokenMembership';
     Function GetProcessElevation(var pElevationType: TTokenElevationType;
     var pIsAdmin: LongBool): Boolean;
     const
     SECURITY_MAX_SID_SIZE = 68;
     VAR
     hToken: THandle;
     r: Cardinal;
     adminSID: array [0 .. SECURITY_MAX_SID_SIZE - 1] of byte;
     sidSize: Cardinal;
     e: Integer;
     hUnfilteredToken: THandle;
     Begin
     Result := False;
     sidSize := SizeOf(adminSID);
     if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hToken) and
     Windows.GetTokenInformation(hToken, Windows.TokenElevationType,
     @pElevationType, SizeOf(pElevationType), r) and
     CreateWellKnownSid(WinBuiltinAdministratorsSid, nil, PSid(@adminSID),
     sidSize) then
     begin
     case pElevationType of
     TokenElevationTypeLimited:
     begin
     if GetTokenInformation(hToken, TokenLinkedToken, @hUnfilteredToken,
     SizeOf(hUnfilteredToken), r) and
     (CheckTokenMembership(hUnfilteredToken, PSid(@adminSID),
     pIsAdmin)) then
     begin
     Result := true;
     CloseHandle(hUnfilteredToken);
     end;
     end;
     
    else
     begin
     pIsAdmin := IsUserAnAdmin();
     Result := true;
     end;
     end;
     end
     else
     begin
     e := GetLastError();
     if e = 0 then
     begin
     GetTickCount;
     end;
     end;
     CloseHandle(hToken);
     
    End;
     
    调用示例:
     
    procedure TForm4.Button1Click(Sender: TObject);
     var
     pIsAdmin: LongBool;
     pElevationType: TTokenElevationType;
     begin
     if GetProcessElevation(pElevationType, pIsAdmin) then
     begin
     case pElevationType of
     TokenElevationTypeLimited:
     ShowMessage('这是一个受限用户');
     TokenElevationTypeFull:
     ShowMessage('这是一个拥有管理员权限的用户');
     TokenElevationTypeDefault:
     ShowMessage('这是一个默认的用户');
     end;
     end;
     end;

    http://www.cnblogs.com/jxgxy/p/3335044.html

  • 相关阅读:
    xls与csv文件的区别
    青音,经典爱情语录
    win7用户账户自动登录方法汇总
    How to using Procedure found Lead Blocker
    FTS(3) BSD 库函数手册 遍历文件夹(二)
    FTS(3) BSD 库函数手册 遍历文件夹(一)
    DisplayMetrics类 获取手机显示屏的基本信息 包括尺寸、密度、字体缩放等信息
    About App Distribution 关于应用发布
    FTS(3) 遍历文件夹实例
    OpenCV 2.1.0 with Visual Studio 2008
  • 原文地址:https://www.cnblogs.com/findumars/p/4964839.html
Copyright © 2011-2022 走看看