下面这段代码怎么不能关机??(win2k) 急呀

dycdyc123 2003-08-18 07:53:45
static HANDLE hToken;
static TOKEN_PRIVILEGES tp;
static LUID luid;
::OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken ) ;
::LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &luid );
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
::AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
::ExitWindowsEx(EWX_POWEROFF|EWX_FORCE, 0);
...全文
47 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dycdyc123 2003-08-22
  • 打赏
  • 举报
回复
好的

总算解决了

还是对系统没有比较深入的了解 ,主要是没有对线程的理解!

呵呵,好了 散分
dycdyc123 2003-08-21
  • 打赏
  • 举报
回复
这些代码 只是让我的机子重起

不能关机!

兄弟们,看清题目呀!


而且 把关机代码放在线程中运行,连重起都不行! 只是屏幕上什么也没有, 只有鼠标!
dycdyc123 2003-08-21
  • 打赏
  • 举报
回复
呵呵!

郁闷!
AaronChan 2003-08-21
  • 打赏
  • 举报
回复
楼主我跟你一样哈!代码肯定是没错的,记得好象在哪看过要硬件支持什么的,我也郁闷啊!WIN98一下就关了。
dycdyc123 2003-08-20
  • 打赏
  • 举报
回复
::AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);

->
::AdjustTokenPrivileges(hToken,FALSE,&tp,0,NULL,NULL);
^
这个 改了 但不管参数如何为,只能重起机子!
我用系统的关机 可以顺利关机!!!


这是怎么回事,系统是刚装的!
dycdyc123 2003-08-20
  • 打赏
  • 举报
回复
我自己的代码 试过

机子有反映,但不能关!机!
opqit 2003-08-20
  • 打赏
  • 举报
回复


第一步:
动态加载powrprof.dll文件
运行其中的IsPwrShutdownAllowed函数,取得返回值

第二步:
得到特权(NT5系统)

第三步:
返回为真,调用ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,0);
返回为假,调用ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);


dycdyc123 2003-08-20
  • 打赏
  • 举报
回复
InitiateSystemShutdown()


这一句干什么的?
wuxfBrave 2003-08-20
  • 打赏
  • 举报
回复
加一句 InitiateSystemShutdown()
akiko 2003-08-18
  • 打赏
  • 举报
回复
那最后一句再把EWX_SHUTDOWN招呼上吧
::ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF|EWX_FORCE, 0);
zhouyong0371 2003-08-18
  • 打赏
  • 举报
回复
怎么我用搂主的代码一下子电脑就关机了?楼主?
vcppman 2003-08-18
  • 打赏
  • 举报
回复
::AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);

->
::AdjustTokenPrivileges(hToken,FALSE,&tp,0,NULL,NULL);
^
试试看行不行呀!

实在不行,那就GetLastError看看好了
zhouyong0371 2003-08-18
  • 打赏
  • 举报
回复
关机代码倒数第二句,和你的有一点差别,你看一下。我的代码执行是成功的
zhouyong0371 2003-08-18
  • 打赏
  • 举报
回复
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
DWORD dwVersion;

dwVersion = GetVersion(); //获得Windows NT或Win32的版本号

switch(IsHow)
{
case 0://注销
ExitWindowsEx(EWX_LOGOFF,0);
break;

case 1://重新启动
if (dwVersion < 0x80000000)
{// Windows NT系列
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; // 设置一个权限
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

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

ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0);
}
else
{//Windows 95系列
ExitWindowsEx(EWX_FORCE | EWX_REBOOT,0);
}
break;

case 2://关闭计算机
if (dwVersion < 0x80000000)
{// Windows NT
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; // 设置一个权限
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

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

ExitWindowsEx(EWX_POWEROFF |EWX_FORCE, 0);
}
else
{
ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
}
break;
}
liuhongyong 2003-08-18
  • 打赏
  • 举报
回复
UP!我记的上次我只用一句就可以注销啊,
jinn 2003-08-18
  • 打赏
  • 举报
回复
有什么提示?当前帐号有关机权限吗?

15,471

社区成员

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

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