DWORD ScmStartDriver(PSERVICE pService) { DWORD dwError; DPRINT("ScmStartDriver(%p)\n", pService); dwError = ScmLoadDriver(pService); if (dwError == ERROR_SUCCESS) { pService->Status.dwCurrentState = SERVICE_RUNNING; pService->Status.dwControlsAccepted = SERVICE_ACCEPT_STOP; pService->Status.dwWin32ExitCode = ERROR_SUCCESS; } DPRINT("ScmStartDriver returns %lu\n", dwError); return dwError; }
static BOOL TuiInit(DWORD OemCP) { BOOL Ret = FALSE; CONSOLE_SCREEN_BUFFER_INFO ScrInfo; DWORD BytesReturned; WNDCLASSEXW wc; ATOM ConsoleClassAtom; USHORT TextAttribute = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED; /* Exit if we were already initialized */ if (ConsInitialized) return TRUE; /* * Initialize the TUI front-end: * - load the console driver, * - set default screen attributes, * - grab the console size. */ ScmLoadDriver(L"Blue"); ConsoleDeviceHandle = CreateFileW(L"\\\\.\\BlueScreen", FILE_ALL_ACCESS, 0, NULL, OPEN_EXISTING, 0, NULL); if (INVALID_HANDLE_VALUE == ConsoleDeviceHandle) { DPRINT1("Failed to open BlueScreen.\n"); return FALSE; } if (!DeviceIoControl(ConsoleDeviceHandle, IOCTL_CONSOLE_LOADFONT, &OemCP, sizeof(OemCP), NULL, 0, &BytesReturned, NULL)) { DPRINT1("Failed to load the font for codepage %d\n", OemCP); /* Let's suppose the font is good enough to continue */ } if (!DeviceIoControl(ConsoleDeviceHandle, IOCTL_CONSOLE_SET_TEXT_ATTRIBUTE, &TextAttribute, sizeof(TextAttribute), NULL, 0, &BytesReturned, NULL)) { DPRINT1("Failed to set text attribute\n"); } ActiveConsole = NULL; InitializeListHead(&VirtConsList); InitializeCriticalSection(&ActiveVirtConsLock); if (!DeviceIoControl(ConsoleDeviceHandle, IOCTL_CONSOLE_GET_SCREEN_BUFFER_INFO, NULL, 0, &ScrInfo, sizeof(ScrInfo), &BytesReturned, NULL)) { DPRINT1("Failed to get console info\n"); Ret = FALSE; goto Quit; } PhysicalConsoleSize = ScrInfo.dwSize; /* Register the TUI notification window class */ RtlZeroMemory(&wc, sizeof(WNDCLASSEXW)); wc.cbSize = sizeof(WNDCLASSEXW); wc.lpszClassName = TUI_CONSOLE_WINDOW_CLASS; wc.lpfnWndProc = TuiConsoleWndProc; wc.cbWndExtra = 0; wc.hInstance = ConSrvDllInstance; ConsoleClassAtom = RegisterClassExW(&wc); if (ConsoleClassAtom == 0) { DPRINT1("Failed to register TUI console wndproc\n"); Ret = FALSE; } else { Ret = TRUE; } Quit: if (Ret == FALSE) { DeleteCriticalSection(&ActiveVirtConsLock); CloseHandle(ConsoleDeviceHandle); } ConsInitialized = Ret; return Ret; }