启动以管理员身份运行有2中方式。
1.筛选令牌。意思就是,默认情况下,一个进程启动时,会与筛选令牌进行关联,所以权限受限,但是最终用户可以通过右击图标菜单,以run as admin来运行程序。然后就会有UAC的安全提示框提示是否继续。
2.提升进程的权限,VS开发过程。
判断一个进程是以提升的权限来启动的,还是正在使用筛选的令牌运行的?GetCurrentProcess---------得到当前进程句柄
OpenProcessToken--------打开当前进程关联的令牌。(会得到一个令牌句柄)
GetTokenInformation-----------获得与进程关联的令牌的信息(记得使用TokenElevationType参数来获得提升类型)如果令牌没有被筛选过,用IsUserAnAdmin函数来判断进程是否正在以管理员的身份运行是最理想的。如果令牌已经被筛选,然后需要通过给GetTokenInformation传递TokenLinkedToken参数来获取一个未筛选的令牌,然后判断其中是否包含一个管理员SID。CreateWellKnowSid---------传递WinbuiltinAministratorsSid参数来创建一个与管理员组一致的SID。CheckTokenMembership----------检查一个令牌的权限组。

解决方案 »

  1.   


    我问的是 isuseranadmin 可以替代  "如果令牌已经被筛选,然后需要通过给GetTokenInformation传递TokenLinkedToken参数来获取一个未筛选的令牌,然后判断其中是否包含一个管理员SID。"替代有颜色这段文字。你看懂没? 
      

  2.   

    1、 isuseranadmin只是判断你进程运行的所有用户组是不是管理员权限而已,而不是判断进程是不是以管理员权限打开,同时,这个 isuseranadmin的调用应该是需要进程以管理员权限打开才有效。
      

  3.   

    IsUserAnAdmin():Tests whether the current user is a member of the Administrator's group.
    你可以用管理员权限登陆,但是用非管理员权限运行程序。触发你右键选择run as administrator
      

  4.   


    我问的是 isuseranadmin 可以替代  "如果令牌已经被筛选,然后需要通过给GetTokenInformation传递TokenLinkedToken参数来获取一个未筛选的令牌,然后判断其中是否包含一个管理员SID。"替代有颜色这段文字。你看懂没? 

     isuseranadmin只是判断你的操作是否是以管理员打开,这一个结果.但是无法知道你是怎么获取的管理员权限。上面一大段已经说了。
      

  5.   


    我问的是 isuseranadmin 可以替代  "如果令牌已经被筛选,然后需要通过给GetTokenInformation传递TokenLinkedToken参数来获取一个未筛选的令牌,然后判断其中是否包含一个管理员SID。"替代有颜色这段文字。你看懂没? 

     isuseranadmin只是判断你的操作是否是以管理员打开,这一个结果.但是无法知道你是怎么获取的管理员权限。上面一大段已经说了。
    若果你仅仅需要这个结果, isuseranadmin可以替代。
    过程无法知道。
      

  6.   

    仅仅判断进程是否是管理员   isuseranadmin足以。