|
BO2k源码分析(二)----命令循环机制(5) CloseHandle(tok); } } //进入命令循环 EntryPoint(GetModuleHandle(NULL)); } return 0; } // Determine Operating System Version void GetOSVersion(void) { OSVERSIONINFO osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx(&osvi)==FALSE) { MessageBox( HWND_DESKTOP, "Unable to get version info", "GetOSVersion()", MB_OK ); } if(osvi.dwPlatformId==VER_PLATFORM_WIN32s) { MessageBox( HWND_DESKTOP, "This application does not run under WIN32s!", "Error", MB_OK ); } if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) g_bIsWinNT = 1; else g_bIsWinNT = 0; } /************Bo command process *****/ //本期重点所在 #define MAX_BO_COMMANDS 1024 typedef int (*BO_CMD_HANDLER)(SOCKET s,int comid, DWORD nArg1, char *svArg2, char *svArg3); typedef struct { BOOL bNativeComm; char *svFolderName; char *svCommName; char *svArgDesc1; char *svArgDesc2; char *svArgDesc3; } BO_CMD_DESC; BO_CMD_HANDLER *command_handler_table=NULL; BO_CMD_DESC *command_description_table=NULL; HANDLE g_hDispatchMutex=NULL; int InitializeCommandDispatcher(void) { int i; command_handler_table= (BO_CMD_HANDLER *)malloc(sizeof(BO_CMD_HANDLER)*MAX_BO_COMMANDS);
|