ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

BOOL WINAPI ReadConsoleOutputAttribute ( HANDLE  hConsoleOutput,
LPWORD  lpAttribute,
DWORD  nLength,
COORD  dwReadCoord,
LPDWORD  lpNumberOfAttrsRead 
)

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;
}

Generated on Sun May 27 2012 04:41:12 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.