Delphi管理员权限D7 W7

时间:2011-08-07 22:58:36

标签: windows security administrator uac delphi

  

可能重复:
  Delphi: Prompt for UAC elevation when needed

我在Delphi 7 for Windows 7中编写的应用程序需要管理员权限才能使用某些功能。如何从源代码中将其提升为管理员?

我使用以下代码检查用户权限:

function IsUserAdmin : boolean;
const CAdminSia : TSidIdentifierAuthority = (value: (0, 0, 0, 0, 0, 5));
var sid : PSid;
    ctm : function (token: dword; sid: pointer; var isMember: bool) : bool; stdcall;
    b1  : bool;
begin
  result := false;
  ctm := GetProcAddress(LoadLibrary('advapi32.dll'), 'CheckTokenMembership');
  if (@ctm <> nil) and AllocateAndInitializeSid(CAdminSia, 2, $20, $220, 0, 0, 0, 0, 0, 0, sid) then
  begin
    result := ctm(0, sid, b1) and b1;
    FreeSid(sid);
  end;
end;

如果应用程序以管理员身份启动,则返回True;如果没有,那么假。 现在,如果我的结果是假,我想自动将程序提升为管理员。

我尝试使用manifest提升给管理员,但是如果我启动应用程序,那么我会看到一个UAC提示符,如果我回答“否”,那么应用程序根本不会运行。

有任何获得帮助的机会吗?

我需要管理员权限才能对物理驱动器进行原始访问。

编辑:

我还尝试从代码中禁用此应用程序(ParamStr(0))的UAC(在按下“为此应用程序禁用UAC”按钮之后)。

2 个答案:

答案 0 :(得分:1)

如果您希望它拥有管理员权限,那么您必须通过UAC。除非禁用UAC,否则无法在没有显示UAC提示的情况下升级到管理员。显然,您必须在UAC提示符上选择YES才能获得管理员权限。

答案 1 :(得分:1)

进程在启动时接收其令牌,然后无法更改它们。因此,如果您希望应用程序看起来提升其功能的某个子集,则该功能必须涉及新流程。你不能做的是提升现有的流程。