BOOL WINAPI OnSetConsoleActiveScreenBuffer(HANDLE hConsoleOutput) { //typedef BOOL (WINAPI* OnSetConsoleActiveScreenBuffer_t)(HANDLE hConsoleOutput); ORIGINALFAST(SetConsoleActiveScreenBuffer); if (!ghStdOutHandle) ghStdOutHandle = GetStdHandle(STD_OUTPUT_HANDLE); #ifdef _DEBUG HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); HANDLE hErr = GetStdHandle(STD_ERROR_HANDLE); #endif BOOL lbRc = FALSE; if (F(SetConsoleActiveScreenBuffer)) lbRc = F(SetConsoleActiveScreenBuffer)(hConsoleOutput); if (lbRc && (ghCurrentOutBuffer || (hConsoleOutput != ghStdOutHandle))) { #ifdef SHOWCREATEBUFFERINFO CONSOLE_SCREEN_BUFFER_INFO lsbi = {}; BOOL lbTest = GetConsoleScreenBufferInfo(hConsoleOutput, &lsbi); DWORD nErrCode = GetLastError(); _ASSERTE(lbTest && lsbi.dwSize.Y && "GetConsoleScreenBufferInfo(hConsoleOutput) failed"); #endif ghCurrentOutBuffer = hConsoleOutput; RequestLocalServerParm Parm = {(DWORD)sizeof(Parm), slsf_SetOutHandle, &ghCurrentOutBuffer}; RequestLocalServer(&Parm); } return lbRc; }
HANDLE WINAPI OnOpenFileMappingW(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName) { //typedef HANDLE (WINAPI* OnOpenFileMappingW_t)(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName); ORIGINAL_KRNL(OpenFileMappingW); HANDLE hRc = FALSE; extern BOOL gbTrueColorServerRequested; if (ghConEmuWndDC && lpName && *lpName && !gbTrueColorServerRequested) { /** * Share name to search for * Two replacements: * %d sizeof(AnnotationInfo) - compatibility/versioning field. * %d console window handle */ wchar_t szTrueColorMap[64]; // #define L"Console_annotationInfo_%x_%x" msprintf(szTrueColorMap, countof(szTrueColorMap), AnnotationShareName, (DWORD)sizeof(AnnotationInfo), ghConEmuWndDC); // При попытке открыть мэппинг для TrueColor - перейти в режим локального сервера if (lstrcmpi(lpName, szTrueColorMap) == 0) { RequestLocalServerParm Parm = {(DWORD)sizeof(Parm), slsf_RequestTrueColor|slsf_GetCursorEvent}; if (RequestLocalServer(&Parm) == 0) { if (Parm.pAnnotation) { gpAnnotationHeader = Parm.pAnnotation; hRc = (HANDLE)Parm.pAnnotation; goto wrap; } else { WARNING("Перенести обработку AnnotationShareName в хуки"); } if (ghConsoleCursorChanged && (ghConsoleCursorChanged != Parm.hCursorChangeEvent)) CloseHandle(ghConsoleCursorChanged); ghConsoleCursorChanged = Parm.hCursorChangeEvent; gfnSrvLogString = Parm.fSrvLogString; } } } hRc = F(OpenFileMappingW)(dwDesiredAccess, bInheritHandle, lpName); wrap: return hRc; }