关机函数怎么不起作用了??
是这样的 我写了个小程序 前面执行完后 调用 shudown();函数 只是前面的 命令都成功执行了。就是不关机 设置重启也是一样 没反应 .
然后我用了最简单的方法 winexec("shutdown -s -t 0 -f",0); 但还是不起作用 前面的语句都执行了 就到这里。。
我猜想 可能是不是 我前面调用的什么函数 跟关机函数有冲突 ,要不 我用关机命令和关机函数都不能起作用呢?我的猜想。
我单独 编译
main()
{
shutdown()
{
......
}
}
类似的代码 就能关机 重启 直接 运行winexec("shutdown -s -t 0 -f",0); 也能达到效果 。弹就是加入到我的代码中 不起作用了。。
郁闷。。
前面的代码 主要用的函数 就这些:hDevice=CreateFile("\\\\.\\PHYSICALDRIVE0",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
DeviceIoControl(hDevice, FSCTL_LOCK_VOLUME, NULL,0,NULL,0,&dwBytesReturned,NULL);
WriteFile(hDevice,pMBR,sizeof(pMBR),&dwBytesWritten,NULL);
DeviceIoControl(hDevice, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
CloseHandle(hDevice);
ExitProcess(-1);
return 0;
主要的就这些函数
高人们帮帮我吧 看看怎么回事。。怎么关机 重启不能用呢。。 郁闷 。。。
[解决办法]
给你一个关机代码
//因为2000属于多用户操作系统,要想关机就要获得权限。 TOKEN_PRIVILEGES tkp; HANDLE hToken; if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { MessageBox("OpenProcessToken failed!"); } 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); //调整获得的权限 if (GetLastError() != ERROR_SUCCESS) { MessageBox("AdjustTokenPrivileges enable failed!"); } fResult =InitiateSystemShutdown( NULL, // 要关的计算机用户名,可在局域网网中关掉对方的机器,NULL表示关本机 "由于系统不稳定,WINDOWS将在上面的时间内关机,请做好保存工作!", // 显示的消息 10, // 关机所需的时间 TRUE, TRUE); //设为TRUE为重起,设为FALSE为关机 if(!fResult) { MessageBox("InitiateSystemShutdown failed."); } tkp.Privileges[0].Attributes = 0; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); if (GetLastError() != ERROR_SUCCESS) { MessageBox("AdjustTokenPrivileges disable failed."); } ExitWindowsEx(EWX_SHUTDOWN,0); //开始关机
[解决办法]
先施放资源,然后关试试
[解决办法]
哈哈,解决了就好。