方法一:
bool EnableDebugPrivilege()
{
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 false;
}
return true;
}
方法二:
bool UpPrivilege()
{
HANDLE hToken; // handle to process token
TOKEN_PRIVILEGES tkp; // pointer to token structure
bool result = OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,
&hToken);
if(!result) //打开进程错误
return result;
result = LookupPrivilegeValue( NULL,
SE_DEBUG_NAME,
&tkp.Privileges[0].Luid);
if(!result) //查看进程权限错误
return result;
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
result = AdjustTokenPrivileges( hToken,
FALSE,
&tkp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES) NULL,
(PDWORD) NULL);
return result;
}
方法三:
#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
#define SE_TCB_NAME TEXT("SeTcbPrivilege")
#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
BOOL EnablePrivilege(LPCTSTR lpszPrivilegeName,BOOL bEnable)
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID luid;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY | TOKEN_READ,&hToken))
return FALSE;
if(!LookupPrivilegeValue(NULL, lpszPrivilegeName, &luid))
return TRUE;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,NULL);
CloseHandle(hToken);
return (GetLastError() == ERROR_SUCCESS);
}
请问我要怎么做?
11 个解决方案
#1
权限而不是特权
用setnamedsecurityinfo
用setnamedsecurityinfo
#2
http://topic.csdn.net/u/20090212/14/c126ccca-f683-4544-9f75-d61cd547cd1f.html
试了一下,GetNamedSecurityInfo时失败了,明天接着看。
试了一下,GetNamedSecurityInfo时失败了,明天接着看。
#3
可能是代码的问题,你试一下:
CRegKey ReadRegKey;
char RegKeyPath[]="SAM\\SAM";
ReadRegKey.Open(HKEY_LOCAL_MACHINE,(LPCSTR)RegkeyPath,KEY_ALL_ACCESS);
CRegKey ReadRegKey;
char RegKeyPath[]="SAM\\SAM";
ReadRegKey.Open(HKEY_LOCAL_MACHINE,(LPCSTR)RegkeyPath,KEY_ALL_ACCESS);
#4
你试了吗?在我这不行。
#5
添加manifest文件,重新编译,在开始的时候提升权限
1.直接更改exe名,vista下系统遇到这些update install..敏感,会马上弹出UAC;
2.就是在资源里面添加些东东了
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="test.exe.manifest"
type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
该代码添加到VC资源中即可, 添加方式:
添加一个“custom”资源,”resource type”填24,把资源ID改为1
1.直接更改exe名,vista下系统遇到这些update install..敏感,会马上弹出UAC;
2.就是在资源里面添加些东东了
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="test.exe.manifest"
type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
该代码添加到VC资源中即可, 添加方式:
添加一个“custom”资源,”resource type”填24,把资源ID改为1
#7
这种方法倒是可行,但是麻烦了一点。还要用命令行启动程序。
网上找到了这个,但感觉也有些小题大作了。
http://autodebug.blog127.fc2.com/blog-category-4.html
#8
还有没有其它方法?
#9
程序里面嵌入Manifest其实本来一般就够了
某些不够,你的方法一也就够了。
不过。你顶楼的三个方法有区别么?
某些不够,你的方法一也就够了。
不过。你顶楼的三个方法有区别么?
#10
是程序本身的权限不够。
就嵌入manifest 如果是vs2008 在项目属性里面直接修改为requireAdministrator就可以了。
你的问题应该就出在这里。
就嵌入manifest 如果是vs2008 在项目属性里面直接修改为requireAdministrator就可以了。
你的问题应该就出在这里。
#11
你的程序至少是管理员权限下运行才会成功提权。
#1
权限而不是特权
用setnamedsecurityinfo
用setnamedsecurityinfo
#2
http://topic.csdn.net/u/20090212/14/c126ccca-f683-4544-9f75-d61cd547cd1f.html
试了一下,GetNamedSecurityInfo时失败了,明天接着看。
试了一下,GetNamedSecurityInfo时失败了,明天接着看。
#3
可能是代码的问题,你试一下:
CRegKey ReadRegKey;
char RegKeyPath[]="SAM\\SAM";
ReadRegKey.Open(HKEY_LOCAL_MACHINE,(LPCSTR)RegkeyPath,KEY_ALL_ACCESS);
CRegKey ReadRegKey;
char RegKeyPath[]="SAM\\SAM";
ReadRegKey.Open(HKEY_LOCAL_MACHINE,(LPCSTR)RegkeyPath,KEY_ALL_ACCESS);
#4
你试了吗?在我这不行。
#5
添加manifest文件,重新编译,在开始的时候提升权限
1.直接更改exe名,vista下系统遇到这些update install..敏感,会马上弹出UAC;
2.就是在资源里面添加些东东了
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="test.exe.manifest"
type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
该代码添加到VC资源中即可, 添加方式:
添加一个“custom”资源,”resource type”填24,把资源ID改为1
1.直接更改exe名,vista下系统遇到这些update install..敏感,会马上弹出UAC;
2.就是在资源里面添加些东东了
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="test.exe.manifest"
type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
该代码添加到VC资源中即可, 添加方式:
添加一个“custom”资源,”resource type”填24,把资源ID改为1
#6
以SYSTEM帐户运行你的进程,PsExec -i -d -s *.exe
http://hurri.blog.51cto.com/355432/72033
http://hurri.blog.51cto.com/355432/72033
#7
这种方法倒是可行,但是麻烦了一点。还要用命令行启动程序。
网上找到了这个,但感觉也有些小题大作了。
http://autodebug.blog127.fc2.com/blog-category-4.html
#8
还有没有其它方法?
#9
程序里面嵌入Manifest其实本来一般就够了
某些不够,你的方法一也就够了。
不过。你顶楼的三个方法有区别么?
某些不够,你的方法一也就够了。
不过。你顶楼的三个方法有区别么?
#10
是程序本身的权限不够。
就嵌入manifest 如果是vs2008 在项目属性里面直接修改为requireAdministrator就可以了。
你的问题应该就出在这里。
就嵌入manifest 如果是vs2008 在项目属性里面直接修改为requireAdministrator就可以了。
你的问题应该就出在这里。
#11
你的程序至少是管理员权限下运行才会成功提权。