RT,先谢谢了~~~~~~~
这是我写的一个定时关机程序里的核心函数。也是从网上找的改了一下
void CExitwindowDlg::OnCloseComputer() //自定义函数
{
HANDLE processHandle = NULL; // 定义进程句柄;
DWORD thisProcessID = 0; // 定义进程标识符;
thisProcessID = GetCurrentProcessId(); // 得到当前进程的ID;
if(!thisProcessID)
return;
processHandle=OpenProcess(PROCESS_ALL_ACCESS|STANDARD_RIGHTS_REQUIRED,FALSE,thisProcessID); //得到当前进程的句柄;
if(!processHandle)
return;
HANDLE tokenHandle = NULL;
OpenProcessToken(processHandle,TOKEN_ADJUST_PRIVILEGES,&tokenHandle);
// 得到一个与进程有关的访问标记句柄;
if(!tokenHandle)
return;
CloseHandle(processHandle); // 进程句柄使用结束后关闭之;
TOKEN_PRIVILEGES tp; // 定义优先级标记结构体的一个实例;
LUID luid; // 定义查找ID结构体的一个实例;
if(!LookupPrivilegeValue(NULL,"SeShutdownPrivilege",&luid)) // 给luid赋制值;
return;
tp.PrivilegeCount = 1; // 给结构体实例赋值;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(tokenHandle,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES)NULL,(PDWORD)NULL);
if(GetLastError() != ERROR_SUCCESS)
return;
if(!ExitWindowsEx(EWX_POWEROFF,0)) // 关闭计算机; //重启时他的参数是 ExitWindowsEx(EWX_REBOOT,0)
return;
// MessageBox("function begin start.");
}
[此贴子已经被作者于2006-10-29 22:16:07编辑过]