Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 2749 of file console.c.
Referenced by TConsole::Darkbg(), and TConsole::Lightbg().
{ PCSR_API_MESSAGE Request; ULONG CsrRequest; NTSTATUS Status; DWORD Size; if (lpNumberOfAttrsRead != NULL) *lpNumberOfAttrsRead = nLength; Request = RtlAllocateHeap(RtlGetProcessHeap(), 0, max(sizeof(CSR_API_MESSAGE), CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_ATTRIB) + min (nLength, CSRSS_MAX_READ_CONSOLE_OUTPUT_ATTRIB / sizeof(WORD)) * sizeof(WORD))); if (Request == NULL) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } CsrRequest = MAKE_CSR_API(READ_CONSOLE_OUTPUT_ATTRIB, CSR_CONSOLE); while (nLength != 0) { Request->Data.ReadConsoleOutputAttribRequest.ConsoleHandle = hConsoleOutput; Request->Data.ReadConsoleOutputAttribRequest.ReadCoord = dwReadCoord; if (nLength > CSRSS_MAX_READ_CONSOLE_OUTPUT_ATTRIB / sizeof(WORD)) Size = CSRSS_MAX_READ_CONSOLE_OUTPUT_ATTRIB / sizeof(WCHAR); else Size = nLength; Request->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead = Size; Status = CsrClientCallServer(Request, NULL, CsrRequest, max(sizeof(CSR_API_MESSAGE), CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_ATTRIB) + Size * sizeof(WORD))); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Request->Status)) { RtlFreeHeap(RtlGetProcessHeap(), 0, Request); BaseSetLastNTError(Status); return FALSE; } memcpy(lpAttribute, Request->Data.ReadConsoleOutputAttribRequest.Attribute, Size * sizeof(WORD)); lpAttribute += Size; nLength -= Size; Request->Data.ReadConsoleOutputAttribRequest.ReadCoord = Request->Data.ReadConsoleOutputAttribRequest.EndCoord; } RtlFreeHeap(RtlGetProcessHeap(), 0, Request); return TRUE; }