int Main(HINSTANCE hInstance) { WNDCLASSEX wcx; HWND wnd; MSG msg; if ((wnd = FindWindow(App.Class, App.Title)) != NULL) { /* reload config */ PostMessage(wnd, WM_APP_RELOAD, 0, 0); return 0; } CoInitializeEx(0, COINIT_MULTITHREADED); CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); WinAPI_Initialize(); Global_Initialize(); Status_Initialize(); Config_Initialize(); SpecialKey_Initialize(); ExtractIconEx(AppIcon.File, IsVistaOrGreater() ? AppIcon.Index.Vista : AppIcon.Index.XP, &Global.hIconLarge, &Global.hIconSmall, 1); ZeroMemory(&wcx, sizeof wcx); wcx.cbSize = sizeof wcx; wcx.style = CS_NOCLOSE; wcx.lpfnWndProc = WndProc; wcx.hInstance = hInstance; wcx.hCursor = (HCURSOR)LoadImage(NULL, IDC_ARROW, IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wcx.lpszClassName = App.Class; wcx.hIcon = Global.hIconLarge; wcx.hIconSm = Global.hIconSmall; RegisterClassEx(&wcx); CreateWindowEx(0, wcx.lpszClassName, App.Title, WS_POPUP, CW_USEDEFAULT, 0, 10, 10, NULL, NULL, wcx.hInstance, NULL); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } DestroyIcon(Global.hIconLarge); DestroyIcon(Global.hIconSmall); WinAPI_Uninitialize(); CoUninitialize(); return (int)msg.wParam; }
MI_Result Initialize() { MI_Result r; static size_t nbufsize = 256; g_batch = Batch_New(64); if (!g_batch) return MI_RESULT_SERVER_LIMITS_EXCEEDED; g_dirpath = (char*)Batch_Get(g_batch, nbufsize); g_logfilepath = (char*)Batch_Get(g_batch, nbufsize); if (!g_logfilepath || !g_dirpath) { r = MI_RESULT_SERVER_LIMITS_EXCEEDED; goto error; } sprintf(g_dirpath, dirformat, gethomedir(), "indicationlog"); if (Isdir(g_dirpath) == PAL_FALSE) { if (Mkdir(g_dirpath, 0777) != 0) { r = MI_RESULT_FAILED; goto error; } } sprintf(g_logfilepath, filenameformat, g_dirpath, "provider", "log"); #if !defined(_MSC_VER) { // // Delete file if larger than certain size // struct stat buf; if (stat(g_logfilepath, &buf) == 0) { if ( (unsigned long)buf.st_size > 0x800000UL ) File_Remove(g_logfilepath); } } #endif g_logfile = File_Open(g_logfilepath, "a+"); if (!g_logfile) { r = MI_RESULT_FAILED; goto error; } Config_Initialize(&cfgTest_Indication); Config_Initialize(&cfgL_IndicationC1); Config_Initialize(&cfgL_IndicationC2); Config_Initialize(&cfgL_IndicationC3); Config_Initialize(&cfgR_IndicationC1); Config_Initialize(&cfgR_IndicationC2); Config_Initialize(&cfgR_IndicationC3); Config_Initialize(&cfgTest_Class); Config_Initialize(&cfgL_LifecycleC1); Config_Initialize(&cfgL_LifecycleC2); Config_Initialize(&cfgR_LifecycleC1); Config_Initialize(&cfgR_LifecycleC2); ReloadConfig(); LOGMSG(("\r\n\r\n\r\n\r\n===================================================")); LOGMSG(("Initialize")); return MI_RESULT_OK; error: if (g_logfile) { File_Close(g_logfile); g_logfile = NULL; } if (g_batch) { Batch_Delete(g_batch); g_batch = NULL; } return r; }