使用钩子函数监视计算机关机检测移动存储介质
一小程序:使用钩子函数监视计算机关机事件,使在用户关机时能检测是否存在移动存储介质,然后直至用户取出移动存储介质才使关闭计算机,若没有则直接关闭。
第一次使用钩子,希望各位大哥大姐帮帮忙……
在线等……
[解决办法]
hook ExitWindowEx函数,具体查MSDN,不过这个函数的执行是要有权限的,提供一段示代码:
::AfxMessageBox( "系统即将关闭,请保存未保存的文档! ");
HANDLE hToken;
DWORD len=0;
char tokenInformation[500];
TOKEN_PRIVILEGES *token;
BOOL is=FALSE;
//打开当前进程的权限
is=::OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);
if(!is)
{
::AfxMessageBox( "打开进程权限失败! ");
return;
}
is=::GetTokenInformation(hToken,TokenPrivileges,tokenInformation,500,&len);
if(!is)
{
::AfxMessageBox( "获得进程权限失败! ");
return;
}
token=(TOKEN_PRIVILEGES *)tokenInformation;
//提升当前进程的权限
for(int i=0;i <(int)token-> PrivilegeCount;i++)
token-> Privileges[i].Attributes=SE_PRIVILEGE_ENABLED;
//改变进程的权限
::AdjustTokenPrivileges(hToken,FALSE,token,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
//重新启动关闭Windows
::ExitWindowsEx(EWX_REBOOT,0);
[解决办法]
具体代码已发到你信箱,请查收! 给分!