我用SDK写了个关机和重启电脑程序,发现小问题

Eveilei 2010-01-30 10:09:00
ExitWindowsEx 实现关机和重启,没有提权,这个我还不算懂,我新手。

我在编译器运行程序,可以实现关机和重启。

但是如果我在debug和release里执行程序,程序没反应,为什么呢?在编译器(VC)执行能有多大区别?什么原因导致我的程序不能执行呢?

谢谢回答,我新手。
...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzy694358 2010-01-31
  • 打赏
  • 举报
回复
使用ExitWindowsEx 该函数
要有一定的权限的。
所以要先获取权限,这段代码网上很多,都有详细的解释。
不懂的话,上网找一下,拿段有详细注释的自己研究了
MoXiaoRab 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 eveilei 的回复:]
引用 3 楼 wltg2001 的回复:
要提权才行的,给你段代码:
HANDLE   hdl;
  OpenProcessToken(GetCurrentProcess(),   TOKEN_ADJUST_PRIVILEGES,   &hdl);
    PTOKEN_PRIVILEGES   ptoken   =   (PTOKEN_PRIVILEGES)   new   BYTE[sizeof(DWORD)   +
  sizeof(LUID_AND_ATTRIBUTES)];
  ptoken->PrivilegeCount   =   1;
  LUID   uid;
  LookupPrivilegeValue(NULL,   SE_SHUTDOWN_NAME,   &uid);

  ptoken->Privileges[0].Luid   =   uid;
  ptoken->Privileges[0].Attributes   =   SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hdl,   FALSE,   ptoken,   0,   NULL,   NULL);
    CloseHandle(hdl);
  delete   [](BYTE   *)ptoken;
  ExitWindowsEx(EWX_FORCE|EWX_POWEROFF,0);


惭愧啊,你的代码我还没看懂什么意思。。。
[/Quote]
我不是给你讲过要提权么。
clown 2010-01-31
  • 打赏
  • 举报
回复
权限问题 LS说的都对
zealand_1 2010-01-31
  • 打赏
  • 举报
回复
看MSDN吧
wltg2001 2010-01-31
  • 打赏
  • 举报
回复
惭愧啊,你的代码我还没看懂什么意思。。。
=========
没什么东西啊,OpenProcessToken和LookupPrivilegeValue以及AdjustTokenPrivileges等api而已,不懂也没啥,直接用吧
这不是鸭头 2010-01-31
  • 打赏
  • 举报
回复
权限,IDE的权限是比较高的。
Eveilei 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wltg2001 的回复:]
要提权才行的,给你段代码:
HANDLE  hdl;
  OpenProcessToken(GetCurrentProcess(),  TOKEN_ADJUST_PRIVILEGES,  &hdl);
    PTOKEN_PRIVILEGES  ptoken  =  (PTOKEN_PRIVILEGES)  new  BYTE[sizeof(DWORD)  +
  sizeof(LUID_AND_ATTRIBUTES)];
  ptoken->PrivilegeCount  =  1;
  LUID  uid;
  LookupPrivilegeValue(NULL,  SE_SHUTDOWN_NAME,  &uid);

  ptoken->Privileges[0].Luid  =  uid;
  ptoken->Privileges[0].Attributes  =  SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hdl,  FALSE,  ptoken,  0,  NULL,  NULL);
    CloseHandle(hdl);
  delete  [](BYTE  *)ptoken;
  ExitWindowsEx(EWX_FORCE|EWX_POWEROFF,0);

[/Quote]
惭愧啊,你的代码我还没看懂什么意思。。。
许文君 2010-01-31
  • 打赏
  • 举报
回复
一个是提升权限,还有1个可以是调用CMD下的关机命令,这个不要权限

system("shutdown -s -t ....");
wltg2001 2010-01-30
  • 打赏
  • 举报
回复
要提权才行的,给你段代码:
HANDLE hdl;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hdl);
PTOKEN_PRIVILEGES ptoken = (PTOKEN_PRIVILEGES) new BYTE[sizeof(DWORD) +
sizeof(LUID_AND_ATTRIBUTES)];
ptoken->PrivilegeCount = 1;
LUID uid;
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &uid);

ptoken->Privileges[0].Luid = uid;
ptoken->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hdl, FALSE, ptoken, 0, NULL, NULL);
CloseHandle(hdl);
delete [](BYTE *)ptoken;
ExitWindowsEx(EWX_FORCE|EWX_POWEROFF,0);
MoXiaoRab 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 eveilei 的回复:]
ExitWindowsEx 实现关机和重启,没有提权,这个我还不算懂,我新手。

我在编译器运行程序,可以实现关机和重启。

但是如果我在debug和release里执行程序,程序没反应,为什么呢?在编译器(VC)执行能有多大区别?什么原因导致我的程序不能执行呢?

谢谢回答,我新手。
[/Quote]
你的进程被IDE创建,继承自IDE的管理员权限
tiao618 2010-01-30
  • 打赏
  • 举报
回复
要是xp以上的系统
用管理员权限运行试试

16,472

社区成员

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

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

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