VC关机, 进程提升权限了也没有什么反应,请知情人帮忙~~~

senkobqb 2008-07-17 01:56:18
这是MSDN2008里面的例子:
BOOL MySystemShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

// Get a token for this process.

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );

// Get the LUID for the shutdown privilege.

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);

if (GetLastError() != ERROR_SUCCESS)
return FALSE;

// Shut down the system and force all applications to close.

if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,
SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
SHTDN_REASON_MINOR_UPGRADE |
SHTDN_REASON_FLAG_PLANNED))
return FALSE;

return TRUE;
}

void main()
{
MySystemShutdown();
}

执行了没什么反应,怎么回事? 不是获取进程关机权限就行的吗? 网上好多这种问题,都没见什么效果.
...全文
117 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
meijing0114 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jason_wentzel 的回复:]

试试SE_DEBUG_NAME特权
SetPrivilege(hToken, SE_DEBUG_NAME, TRUE);
BOOL CFD_Service::SetPrivilege(HANDLE hToken,LPCTSTR Privilege,BOOL bEnablePrivilege) //设置当前进程特权
{
TOKEN_PRIVILEGES tp;
LUID……
[/Quote]

能否稍微解释下?
meijing0114 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hoboo 的回复:]

代码没有问题。应该是当前登录帐号的权限不足,AdjustTokenPrivileges不成功。跟踪一下就知道了。
[/Quote]
请问如何跟踪才可以确定是登陆权限不足的问题?thx
糊里糊涂 2008-07-18
  • 打赏
  • 举报
回复
代码没有问题。应该是当前登录帐号的权限不足,AdjustTokenPrivileges不成功。跟踪一下就知道了。
孤客天涯 2008-07-17
  • 打赏
  • 举报
回复
试试SE_DEBUG_NAME特权
SetPrivilege(hToken, SE_DEBUG_NAME, TRUE);
BOOL CFD_Service::SetPrivilege(HANDLE hToken,LPCTSTR Privilege,BOOL bEnablePrivilege) //设置当前进程特权
{
TOKEN_PRIVILEGES tp;
LUID luid;
TOKEN_PRIVILEGES tpPrevious;
DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES);
if(!LookupPrivilegeValue( NULL, Privilege, &luid )) return FALSE;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid= luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),&tpPrevious,&cbPrevious);
if (GetLastError() != ERROR_SUCCESS) return FALSE;
tpPrevious.PrivilegeCount=1;
tpPrevious.Privileges[0].Luid=luid;
if(bEnablePrivilege)
{
tpPrevious.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED);
}
else
{
tpPrevious.Privileges[0].Attributes ^= (SE_PRIVILEGE_ENABLED &
tpPrevious.Privileges[0].Attributes);
}
AdjustTokenPrivileges(hToken,FALSE,&tpPrevious,cbPrevious,NULL,NULL);
if (GetLastError() != ERROR_SUCCESS) return FALSE;
return TRUE;
}
senkobqb 2008-07-17
  • 打赏
  • 举报
回复
补充: 已经包含了 #include <windows.h> 并且是release的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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