程序的权限不够,应用管理员权限打开程序运行方可。
如何使vc程序运行时请求管理员权限?
如果是2005或者2008 就简单了,直接
(项目右键—属性—连接器—清单文件—uac执行级别 选择requireAdministrator )中文版
(project->property->Configuration Properties->Linker->Manifest File->UAC Execution Level 选择requireAdministrator)英文版
重新编译 这样你的程序直接运行就拥有管理员权限了。
代码提权
- /****************************************************************
- 本类功能:提升本程序进程优先级和权限
- 编写作者:Coderui
- 编写日期:2008年03月24日
- 联系邮箱:coderui@163.com
- 作者博客:http://hi.baidu.com/coderui
- 文件名称:EnablePriv.h
- ****************************************************************/
- class CEnablePriv
- {
- public: //公有(对外开放的接口)
- //
- //设置当前进程优先级为最高(实时)
- //
- BOOL SetRealTimePriority();
- //
- //提升当前进程权限函数(“SeShutdownPrivilege”关机权限)
- //
- BOOL EnableShutdownPriv();
- //
- //提升当前进程权限函数(“SeDebugPrivilege”读、写控制权限)
- //
- BOOL EnableDebugPriv();
- //
- //提升当前进程权限函数(“SeBackupPrivilege”注册表备份权限)
- //
- BOOL EnableBackupPriv();
- //
- //提升当前进程权限函数(“SeRestorePrivilege”恢复数据权限)
- //
- BOOL EnableRestorePriv();
- private: //私有(内部使用的接口)
- };
- ——————————————————————————————————————————
- /****************************************************************
- 本类功能:提升本程序进程优先级和权限
- 编写作者:Coderui
- 编写日期:2008年03月24日
- 联系邮箱:coderui@163.com
- 作者博客:http://hi.baidu.com/coderui
- 文件名称:EnablePriv.cpp
- ****************************************************************/
- #include “stdafx.h” //需要引用MFC中的这个头文件
- #include “EnablePriv.h” //调用时需要引用的联接头文件
- //宏的功能介绍:
- //————————————————————-
- //#define SE_BACKUP_NAME TEXT(“SeBackupPrivilege”) //备份数据权限
- //#define SE_RESTORE_NAME TEXT(“SeRestorePrivilege”) //恢复数据权限
- //#define SE_SHUTDOWN_NAME TEXT(“SeShutdownPrivilege”) //关机权限
- //#define SE_DEBUG_NAME TEXT(“SeDebugPrivilege”) //读、写控制权限
- //————————————————————-
- //宏的功能介绍:
- //————————————————————-
- //ABOVE_NORMAL_PRIORITY_CLASS(0x00008000) 高于标准
- //BELOW_NORMAL_PRIORITY_CLASS(0x00004000) 低于标准
- //HIGH_PRIORITY_CLASS(0x00000080) 高
- //IDLE_PRIORITY_CLASS(0x00000040) 低
- //NORMAL_PRIORITY_CLASS(0x00000020) 标准
- //REALTIME_PRIORITY_CLASS(0x00000100) 实时
- //————————————————————-
- //
- //设置当前进程优先级为最高(实时)
- //
- //返回值:“false”是失败,“true”是成功。
- BOOL CEnablePriv::SetRealTimePriority()
- {
- if( ! SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS ))
- {
- return false;
- }
- return true;
- }
- //
- //提升当前进程权限函数(“SeShutdownPrivilege”关机权限)
- //
- //返回值:“false”是失败,“true”是成功。
- BOOL CEnablePriv::EnableShutdownPriv()
- {
- HANDLE hToken;
- LUID sedebugnameValue;
- TOKEN_PRIVILEGES tkp;
- if ( ! OpenProcessToken( GetCurrentProcess(),
- TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
- return false;
- if ( ! LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &sedebugnameValue ) )
- {
- CloseHandle( hToken );
- return false;
- }
- tkp.PrivilegeCount = 1;
- tkp.Privileges[ 0].Luid = sedebugnameValue;
- tkp.Privileges[ 0].Attributes = SE_PRIVILEGE_ENABLED;
- if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
- CloseHandle( hToken );
- return true;
- }
- //
- //提升当前进程权限函数(“SeDebugPrivilege”读、写控制权限)
- //
- //返回值:“false”是失败,“true”是成功。
- BOOL CEnablePriv::EnableDebugPriv()
- {
- HANDLE hToken;
- LUID sedebugnameValue;
- TOKEN_PRIVILEGES tkp;
- if ( ! OpenProcessToken( GetCurrentProcess(),
- TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
- return false;
- if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
- {
- CloseHandle( hToken );
- return false;
- }
- tkp.PrivilegeCount = 1;
- tkp.Privileges[ 0].Luid = sedebugnameValue;
- tkp.Privileges[ 0].Attributes = SE_PRIVILEGE_ENABLED;
- if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
- CloseHandle( hToken );
- return true;
- }
- //
- //提升当前进程权限函数(“SeBackupPrivilege”备份数据权限)
- //
- //返回值:“false”是失败,“true”是成功。
- BOOL CEnablePriv::EnableBackupPriv()
- {
- HANDLE hToken;
- LUID sedebugnameValue;
- TOKEN_PRIVILEGES tkp;
- if ( ! OpenProcessToken( GetCurrentProcess(),
- TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
- return false;
- if ( ! LookupPrivilegeValue( NULL, SE_BACKUP_NAME, &sedebugnameValue ) )
- {
- CloseHandle( hToken );
- return false;
- }
- tkp.PrivilegeCount = 1;
- tkp.Privileges[ 0].Luid = sedebugnameValue;
- tkp.Privileges[ 0].Attributes = SE_PRIVILEGE_ENABLED;
- if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
- CloseHandle( hToken );
- return true;
- }
- //
- //提升当前进程权限函数(“SeRestorePrivilege”恢复数据权限)
- //
- //返回值:“false”是失败,“true”是成功。
- BOOL CEnablePriv::EnableRestorePriv()
- {
- HANDLE hToken;
- LUID sedebugnameValue;
- TOKEN_PRIVILEGES tkp;
- if ( ! OpenProcessToken( GetCurrentProcess(),
- TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
- return false;
- if ( ! LookupPrivilegeValue( NULL, SE_RESTORE_NAME, &sedebugnameValue ) )
- {
- CloseHandle( hToken );
- return false;
- }
- tkp.PrivilegeCount = 1;
- tkp.Privileges[ 0].Luid = sedebugnameValue;
- tkp.Privileges[ 0].Attributes = SE_PRIVILEGE_ENABLED;
- if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
- CloseHandle( hToken );
- return true;
- }
</div>