如何以代码判断是否以管理员身份运行?

还不够格啊 2015-04-27 05:39:51
自己用VC12写的窗体程序。

如何在自己写的程序的代码里实现:

1.一般运行:
在文件管理器中,选择自己程序生成的exe。点击右键,选择"打开"。
程序自己判断"以管理员身份运行"为否。

2.以管理员运行
在文件管理器中,选择自己程序生成的exe。点击右键,选择"以管理员身份运行"。
程序自己判断"以管理员身份运行"为是。

请问如何以VC代码实现。
...全文
555 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2015-04-29
  • 打赏
  • 举报
回复
即使以管理员账户登录,“一般运行”后程序仍是具有非管理员权限,此时不能写入注册表。 你不是正好可以利用这一点来判断? 当然, 这是取巧. http://blog.csdn.net/Just_Fancy/article/details/6310347这里说得貌似靠谱.
jm77341991 2015-04-29
  • 打赏
  • 举报
回复
MSDN上获取当前运行的进程是否具有管理员权限 BOOL IsUserAdmin() /*++ Routine Description: This routine returns TRUE if the caller's process is a member of the Administrators local group. Caller is NOT expected to be impersonating anyone and is expected to be able to open its own process and process token. Arguments: None. Return Value: TRUE - Caller has Administrators local group. FALSE - Caller does not have Administrators local group. -- */ { BOOL b; SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; PSID AdministratorsGroup; b = AllocateAndInitializeSid(&NtAuthority,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,0, 0, 0, 0, 0, 0,&AdministratorsGroup); if (b) { if (!CheckTokenMembership(NULL, AdministratorsGroup, &b)) { b = FALSE; } FreeSid(AdministratorsGroup); } return(b); }
Eleven 2015-04-29
  • 打赏
  • 举报
回复
核心编程上有一段代码判断是否以未筛选的Token的管理员权限运行。
赵4老师 2015-04-29
  • 打赏
  • 举报
回复
昨天刚剽窃的:
#pragma comment(lib,"advapi32")
#include <windows.h>
#include <stdio.h>
BOOL IsAdmin(void) {
    HANDLE                   hAccessToken;
    BYTE                     *InfoBuffer=NULL;
    PTOKEN_GROUPS            ptgGroups;
    DWORD                    dwInfoBufferSize;
    PSID                     psidAdministrators;
    SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
    UINT                     i;
    BOOL                     bRet = FALSE;

    if (!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken)) goto cleanup;
    InfoBuffer = new BYTE[1024];
    if (!InfoBuffer) goto cleanup;
    bRet = GetTokenInformation(hAccessToken,
                               TokenGroups,
                               InfoBuffer,
                               1024,
                               &dwInfoBufferSize);
    CloseHandle( hAccessToken );
    if (!bRet) goto cleanup;
    if (!AllocateAndInitializeSid(&siaNtAuthority,
                                 2,
                                 SECURITY_BUILTIN_DOMAIN_RID,
                                 DOMAIN_ALIAS_RID_ADMINS,
                                 0,0,0,0,0,0,
                                 &psidAdministrators))
       goto cleanup;
    bRet = FALSE;
    ptgGroups = (PTOKEN_GROUPS)InfoBuffer;
    for (i=0;i<ptgGroups->GroupCount;i++) {
        if (EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid)) {
            bRet = TRUE;
            break;//
        }
    }
    FreeSid(psidAdministrators);
cleanup:
    if (InfoBuffer) delete InfoBuffer;
    return bRet;
}
int main() {
   if (IsAdmin()) {printf("IsAdmin - TRUE\n");return 0;}
   else           {printf("IsAdmin - FALSE\n");return 1;}
}
发型不乱hy 2015-04-29
  • 打赏
  • 举报
回复

SC_HANDLE schSCManager = OpenSCManager(
		NULL, 
		NULL, 
		SC_MANAGER_CREATE_SERVICE
		); 

	if (schSCManager == NULL) 
	{
		//非管理员
	}
oyljerry 2015-04-28
  • 打赏
  • 举报
回复
引用 4 楼 bebeing 的回复:
[quote=引用 3 楼 oyljerry 的回复:] http://blog.csdn.net/fengrx/article/details/4212144
这个文章里面的程序总是返回TRUE,即管理员权限。 但不是我要达到的目的。 我的是Win7 64位系统,以管理员账户登录。 我猜想文章中是返回是否以管理员登录。 而我要的是是否以管理员权限运行。 即使以管理员账户登录,“一般运行”后程序仍是具有非管理员权限,此时不能写入注册表。 “以管理员运行”后程序即具有管理员权限,可以写入注册表。 [/quote] 这个就是程序自己判断它是否为管理员权限
还不够格啊 2015-04-28
  • 打赏
  • 举报
回复
引用 3 楼 oyljerry 的回复:
http://blog.csdn.net/fengrx/article/details/4212144
这个文章里面的程序总是返回TRUE,即管理员权限。 但不是我要达到的目的。 我的是Win7 64位系统,以管理员账户登录。 我猜想文章中是返回是否以管理员登录。 而我要的是是否以管理员权限运行。 即使以管理员账户登录,“一般运行”后程序仍是具有非管理员权限,此时不能写入注册表。 “以管理员运行”后程序即具有管理员权限,可以写入注册表。
oyljerry 2015-04-27
  • 打赏
  • 举报
回复
http://blog.csdn.net/fengrx/article/details/4212144
worldy 2015-04-27
  • 打赏
  • 举报
回复
获取当前用户,获取当前用户组,判断当前用户组是否是管理员组
孤客天涯 2015-04-27
  • 打赏
  • 举报
回复
属性--连接器--清单文件-》UAC执行级别-》requireAdministrator (/level='requireAdministrator')

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentityversion="1.0.0.0" processorArchitecture="X86" name="VistaLogoDemo" type="win32"/>
  <description>Description of your application</description>
  <!-- Identify the application security requirements.-->
  <trustInfoxmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
  <requestedPrivileges>
  <requestedExecutionLevellevel="requireAdministrator" uiAccess="false"/>
  </requestedPrivileges>
  </security>
  </trustInfo>
 </assembly>

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧