Windows Delphi管理员权限D7 W7

Windows Delphi管理员权限D7 W7,windows,security,administrator,uac,delphi,Windows,Security,Administrator,Uac,Delphi,可能重复: 我的应用程序是用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

可能重复:

我的应用程序是用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;如果不是,则为False。 现在,如果我的结果为False,我想自动将程序提升为管理员

我尝试将清单提升到管理员,但如果启动应用程序,则会看到UAC提示,如果回答“否”,则应用程序将根本不会运行

有机会帮忙吗

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

编辑:


在按下此应用程序的禁用UAC按钮后,我还尝试仅针对此应用程序禁用UAC参数STR0。如果您希望它具有管理员权限,则必须通过UAC。除非UAC被禁用,否则在未显示UAC提示的情况下,无法提升到管理员。显然,您必须在UAC提示符上选择“是”,才能授予其管理员权限。

进程在启动时接收令牌,然后无法更改它们。因此,如果你想让一个应用程序在某些功能子集上提升,那么该功能必须涉及一个新的流程。您不能提升现有流程。

这样只有拥有管理权限的用户才能使用您的应用程序?我与我的用户群合作,以避免类似瘟疫的应用程序。关于UAC的另一个注意事项是,如果用户没有能力通过UAC提示进行提升,则提示必须向他们展示使用备用用户名和密码进行提升的能力。这不是您在问题中提到的问题。>所以只有拥有管理权限的用户才能使用您的应用程序?不,我只会告诉用户一些危险的功能this@wcale-如果您的程序可以绕过UAC并在管理员范围内运行,UAC将毫无意义不?@techie007-是的,但您必须在此应用程序加密应用程序或密钥中输入密码,然后启用隐藏驱动器。。。若应用程序重新启动,那个么用户必须再次输入所有这些内容。我可以对整个系统禁用UAC检查,但我不想这样做。此应用程序以标准权限启动并工作,无需管理员。按下“显示/编辑物理驱动器”按钮后,应用程序将检查其是否以管理员身份运行。如果没有,则更改为管理员并发出UAC警告。如何从代码向管理员发送电子邮件?UAC可能会显示警告。您的这个应用程序是做什么的?这听起来是一个有趣的应用程序,当然它不仅仅是一个标准的业务应用程序。它是某种磁盘应用程序吗?@Marthinus它是加密应用程序