- Use the ConsoleGetPerProcessData macro (--> CONSOLE_PROCESS_DATA structure).
- Do not forget to leave a critical section if we fail.

svn path=/branches/ros-csrss/; revision=57731
This commit is contained in:
Hermès Bélusca-Maïto 2012-11-18 14:21:21 +00:00
parent a4ef6acb0a
commit f079b2b2b6

View file

@ -1239,23 +1239,24 @@ CSR_API(CsrSetTextAttrib)
CSR_API(SrvCreateConsoleScreenBuffer) CSR_API(SrvCreateConsoleScreenBuffer)
{ {
NTSTATUS Status;
PCSRSS_CREATE_SCREEN_BUFFER CreateScreenBufferRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.CreateScreenBufferRequest; PCSRSS_CREATE_SCREEN_BUFFER CreateScreenBufferRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.CreateScreenBufferRequest;
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process);
PCSRSS_CONSOLE Console; PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff; PCSRSS_SCREEN_BUFFER Buff;
NTSTATUS Status;
DPRINT("SrvCreateConsoleScreenBuffer\n"); DPRINT("SrvCreateConsoleScreenBuffer\n");
RtlEnterCriticalSection(&ProcessData->HandleTableLock); RtlEnterCriticalSection(&ProcessData->HandleTableLock);
Status = ConioConsoleFromProcessData(ProcessData, &Console); Status = ConioConsoleFromProcessData(ProcessData, &Console);
if (! NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
return Status; return Status;
} }
Buff = HeapAlloc(ConSrvHeap, HEAP_ZERO_MEMORY, sizeof(CSRSS_SCREEN_BUFFER)); Buff = HeapAlloc(ConSrvHeap, HEAP_ZERO_MEMORY, sizeof(CSRSS_SCREEN_BUFFER));
if (Buff != NULL) if (Buff != NULL)
{ {
if (Console->ActiveBuffer) if (Console->ActiveBuffer)
@ -1298,7 +1299,9 @@ CSR_API(SrvCreateConsoleScreenBuffer)
} }
ConioUnlockConsole(Console); ConioUnlockConsole(Console);
RtlLeaveCriticalSection(&ProcessData->HandleTableLock); RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
return Status; return Status;
} }