Author: hbelusca Date: Wed Nov 7 22:23:36 2012 New Revision: 57689 URL: http://svn.reactos.org/svn/reactos?rev=57689&view=rev Log: [CONSRV] - Use the DLL instance for getting its win23 resources. - Use the CONSOLE_PROCESS_DATA structure (see r57686) for accessing console-specific fields of the processes (instead of using them implemented in the CSR_PROCESS structure). - Win32CsrDuplicateHandleTable --> ConsoleNewProcess since it's the callback function called when a new process is created, and start to move some hacks currently present in BaseSrvCreateProcess.
TODO: suppress the starting-application-related hacks in BaseSrvCreateProcess (in basesrv). Modified: branches/ros-csrss/win32ss/user/consrv/guiconsole.c branches/ros-csrss/win32ss/user/consrv/handle.c branches/ros-csrss/win32ss/user/consrv/lineinput.c Modified: branches/ros-csrss/win32ss/user/consrv/guiconsole.c URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/win32ss/user/consrv/guiconsole.c?rev=57689&r1=57688&r2=57689&view=diff ============================================================================== --- branches/ros-csrss/win32ss/user/consrv/guiconsole.c [iso-8859-1] (original) +++ branches/ros-csrss/win32ss/user/consrv/guiconsole.c [iso-8859-1] Wed Nov 7 22:23:36 2012 @@ -130,13 +130,12 @@ UINT i = 0; WCHAR szMenuString[255]; HMENU hSubMenu; - HINSTANCE hInst = GetModuleHandleW(L"win32csr"); do { if (Items[i].uID != (UINT)-1) { - if (LoadStringW(hInst, + if (LoadStringW(ConSrvDllInstance, Items[i].uID, szMenuString, sizeof(szMenuString) / sizeof(szMenuString[0])) > 0) @@ -406,15 +405,16 @@ GuiConsoleWriteUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData) { HKEY hKey; - PCSR_PROCESS ProcessData; + PCONSOLE_PROCESS_DATA ProcessData; if (Console->ProcessList.Flink == &Console->ProcessList) { DPRINT("GuiConsoleWriteUserSettings: No Process!!!\n"); return; } - ProcessData = CONTAINING_RECORD(Console->ProcessList.Flink, CSR_PROCESS, ConsoleLink); - if (!GuiConsoleOpenUserSettings(GuiData, PtrToUlong(ProcessData->ClientId.UniqueProcess), &hKey, KEY_READ | KEY_WRITE, TRUE)) + + ProcessData = CONTAINING_RECORD(Console->ProcessList.Flink, CONSOLE_PROCESS_DATA, ConsoleLink); + if (!GuiConsoleOpenUserSettings(GuiData, PtrToUlong(ProcessData->Process->ClientId.UniqueProcess), &hKey, KEY_READ | KEY_WRITE, TRUE)) { return; } @@ -703,7 +703,7 @@ HFONT OldFont; TEXTMETRICW Metrics; SIZE CharSize; - PCSR_PROCESS ProcessData; + PCONSOLE_PROCESS_DATA ProcessData; HKEY hKey; Console->hWindow = hWnd; @@ -717,8 +717,8 @@ GuiConsoleUseDefaults(Console, GuiData, Console->ActiveBuffer); if (Console->ProcessList.Flink != &Console->ProcessList) { - ProcessData = CONTAINING_RECORD(Console->ProcessList.Flink, CSR_PROCESS, ConsoleLink); - if (GuiConsoleOpenUserSettings(GuiData, PtrToUlong(ProcessData->ClientId.UniqueProcess), &hKey, KEY_READ, FALSE)) + ProcessData = CONTAINING_RECORD(Console->ProcessList.Flink, CONSOLE_PROCESS_DATA, ConsoleLink); + if (GuiConsoleOpenUserSettings(GuiData, PtrToUlong(ProcessData->Process->ClientId.UniqueProcess), &hKey, KEY_READ, FALSE)) { GuiConsoleReadUserSettings(hKey, Console, GuiData, Console->ActiveBuffer); RegCloseKey(hKey); @@ -801,7 +801,7 @@ SetEvent(GuiData->hGuiInitEvent); - return (BOOL) DefWindowProcW(hWnd, WM_NCCREATE, 0, (LPARAM) Create); + return (BOOL)DefWindowProcW(hWnd, WM_NCCREATE, 0, (LPARAM)Create); } static VOID @@ -1276,7 +1276,7 @@ PCSRSS_CONSOLE Console; PGUI_CONSOLE_DATA GuiData; PLIST_ENTRY current_entry; - PCSR_PROCESS current; + PCONSOLE_PROCESS_DATA current; GuiConsoleGetDataPointers(hWnd, &Console, &GuiData); @@ -1285,7 +1285,7 @@ current_entry = Console->ProcessList.Flink; while (current_entry != &Console->ProcessList) { - current = CONTAINING_RECORD(current_entry, CSR_PROCESS, ConsoleLink); + current = CONTAINING_RECORD(current_entry, CONSOLE_PROCESS_DATA, ConsoleLink); current_entry = current_entry->Flink; /* FIXME: Windows will wait up to 5 seconds for the thread to exit. @@ -2194,7 +2194,7 @@ wc.lpszClassName = L"Win32CsrCreateNotify"; wc.lpfnWndProc = GuiConsoleNotifyWndProc; wc.style = 0; - wc.hInstance = (HINSTANCE) GetModuleHandleW(NULL); + wc.hInstance = (HINSTANCE)GetModuleHandleW(NULL); wc.hIcon = NULL; wc.hCursor = NULL; wc.hbrBackground = NULL; @@ -2212,14 +2212,14 @@ wc.lpszClassName = L"ConsoleWindowClass"; wc.lpfnWndProc = GuiConsoleWndProc; wc.style = 0; - wc.hInstance = (HINSTANCE) GetModuleHandleW(NULL); - wc.hIcon = LoadIconW(GetModuleHandleW(L"win32csr"), MAKEINTRESOURCEW(1)); + wc.hInstance = (HINSTANCE)GetModuleHandleW(NULL); + wc.hIcon = LoadIconW(ConSrvDllInstance, MAKEINTRESOURCEW(1)); wc.hCursor = LoadCursorW(NULL, (LPCWSTR) IDC_ARROW); wc.hbrBackground = CreateSolidBrush(RGB(0,0,0)); wc.lpszMenuName = NULL; wc.cbClsExtra = 0; wc.cbWndExtra = 0; - wc.hIconSm = LoadImageW(GetModuleHandleW(L"win32csr"), MAKEINTRESOURCEW(1), IMAGE_ICON, + wc.hIconSm = LoadImageW(ConSrvDllInstance, MAKEINTRESOURCEW(1), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED); if (RegisterClassExW(&wc) == 0) @@ -2255,7 +2255,7 @@ Title = L""; } - SendMessageW(Console->hWindow, WM_SETTEXT, 0, (LPARAM) Title); + SendMessageW(Console->hWindow, WM_SETTEXT, 0, (LPARAM)Title); if (NULL != Buffer) { @@ -2277,7 +2277,7 @@ static VOID WINAPI GuiCleanupConsole(PCSRSS_CONSOLE Console) { - SendMessageW(NotifyWnd, PM_DESTROY_CONSOLE, 0, (LPARAM) Console); + SendMessageW(NotifyWnd, PM_DESTROY_CONSOLE, 0, (LPARAM)Console); } static CSRSS_CONSOLE_VTBL GuiVtbl = @@ -2362,7 +2362,7 @@ */ GuiData->hGuiInitEvent = CreateEventW(NULL, FALSE, FALSE, NULL); /* create console */ - PostMessageW(NotifyWnd, PM_CREATE_CONSOLE, ShowCmd, (LPARAM) Console); + PostMessageW(NotifyWnd, PM_CREATE_CONSOLE, ShowCmd, (LPARAM)Console); /* wait untill initialization has finished */ WaitForSingleObject(GuiData->hGuiInitEvent, INFINITE); Modified: branches/ros-csrss/win32ss/user/consrv/handle.c URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/win32ss/user/consrv/handle.c?rev=57689&r1=57688&r2=57689&view=diff ============================================================================== --- branches/ros-csrss/win32ss/user/consrv/handle.c [iso-8859-1] (original) +++ branches/ros-csrss/win32ss/user/consrv/handle.c [iso-8859-1] Wed Nov 7 22:23:36 2012 @@ -15,15 +15,6 @@ #include <debug.h> -typedef struct _CSRSS_HANDLE -{ - Object_t *Object; - DWORD Access; - BOOL Inheritable; - DWORD ShareMode; -} CSRSS_HANDLE, *PCSRSS_HANDLE; - - /* FUNCTIONS *****************************************************************/ static @@ -80,7 +71,7 @@ NTSTATUS FASTCALL -Win32CsrReleaseObject(PCSR_PROCESS ProcessData, +Win32CsrReleaseObject(PCONSOLE_PROCESS_DATA ProcessData, HANDLE Handle) { ULONG_PTR h = (ULONG_PTR)Handle >> 2; @@ -100,7 +91,7 @@ NTSTATUS FASTCALL -Win32CsrLockObject(PCSR_PROCESS ProcessData, +Win32CsrLockObject(PCONSOLE_PROCESS_DATA ProcessData, HANDLE Handle, Object_t **Object, DWORD Access, @@ -108,7 +99,7 @@ { ULONG_PTR h = (ULONG_PTR)Handle >> 2; - DPRINT("CsrGetObject, Object: %x, %x, %x\n", + DPRINT("Win32CsrLockObject, Object: %x, %x, %x\n", Object, Handle, ProcessData ? ProcessData->HandleTableSize : 0); RtlEnterCriticalSection(&ProcessData->HandleTableLock); @@ -139,10 +130,87 @@ ConioDeleteConsole(&Console->Header); } +NTSTATUS +NTAPI +ConsoleNewProcess(PCSR_PROCESS SourceProcess, + PCSR_PROCESS TargetProcess) +{ + PCONSOLE_PROCESS_DATA SourceProcessData, TargetProcessData; + ULONG i; + + DPRINT1("ConsoleNewProcess inside\n"); + DPRINT1("SourceProcess = 0x%p ; TargetProcess = 0x%p\n", SourceProcess, TargetProcess); + + /* An empty target process is invalid */ + if (!TargetProcess) + return STATUS_INVALID_PARAMETER; + + DPRINT1("ConsoleNewProcess - OK\n"); + + TargetProcessData = ConsoleGetPerProcessData(TargetProcess); + + /* Initialize the new (target) process */ + TargetProcessData->Process = TargetProcess; + RtlInitializeCriticalSection(&TargetProcessData->HandleTableLock); + + /* Do nothing if the source process is NULL */ + if (!SourceProcess) + return STATUS_SUCCESS; + + SourceProcessData = ConsoleGetPerProcessData(SourceProcess); + + // TODO: Check if one of the processes is really a CONSOLE. + /* + if (!(CreateProcessRequest->CreationFlags & (CREATE_NEW_CONSOLE | DETACHED_PROCESS))) + { + // NewProcess == TargetProcess. + NewProcess->ParentConsole = Process->Console; + NewProcess->bInheritHandles = CreateProcessRequest->bInheritHandles; + } + */ + + /* Only inherit if the if the flag was set */ + if (!TargetProcessData->bInheritHandles) return STATUS_SUCCESS; + + if (TargetProcessData->HandleTableSize) + { + return STATUS_INVALID_PARAMETER; + } + + RtlEnterCriticalSection(&SourceProcessData->HandleTableLock); + + TargetProcessData->HandleTable = RtlAllocateHeap(ConSrvHeap, + HEAP_ZERO_MEMORY, + SourceProcessData->HandleTableSize + * sizeof(CSRSS_HANDLE)); + if (TargetProcessData->HandleTable == NULL) + { + RtlLeaveCriticalSection(&SourceProcessData->HandleTableLock); + return STATUS_UNSUCCESSFUL; + } + + TargetProcessData->HandleTableSize = SourceProcessData->HandleTableSize; + + for (i = 0; i < SourceProcessData->HandleTableSize; i++) + { + if (SourceProcessData->HandleTable[i].Object != NULL && + SourceProcessData->HandleTable[i].Inheritable) + { + TargetProcessData->HandleTable[i] = SourceProcessData->HandleTable[i]; + Win32CsrCreateHandleEntry(&TargetProcessData->HandleTable[i]); + } + } + + RtlLeaveCriticalSection(&SourceProcessData->HandleTableLock); + + return STATUS_SUCCESS; +} + VOID WINAPI -Win32CsrReleaseConsole(PCSR_PROCESS ProcessData) -{ +Win32CsrReleaseConsole(PCSR_PROCESS Process) +{ + PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(Process); PCSRSS_CONSOLE Console; ULONG i; @@ -172,7 +240,7 @@ NTSTATUS FASTCALL -Win32CsrInsertObject(PCSR_PROCESS ProcessData, +Win32CsrInsertObject(PCONSOLE_PROCESS_DATA ProcessData, PHANDLE Handle, Object_t *Object, DWORD Access, @@ -215,112 +283,22 @@ Win32CsrCreateHandleEntry(&ProcessData->HandleTable[i]); *Handle = UlongToHandle((i << 2) | 0x3); RtlLeaveCriticalSection(&ProcessData->HandleTableLock); - return(STATUS_SUCCESS); -} - -NTSTATUS -WINAPI -Win32CsrDuplicateHandleTable(PCSR_PROCESS SourceProcessData, - PCSR_PROCESS TargetProcessData) -{ - ULONG i; - - /* Only inherit if the flag was set */ - if (!TargetProcessData->bInheritHandles) return STATUS_SUCCESS; - - if (TargetProcessData->HandleTableSize) - { - return STATUS_INVALID_PARAMETER; - } - - RtlEnterCriticalSection(&SourceProcessData->HandleTableLock); - - /* we are called from CreateProcessData, it isn't necessary to lock the target process data */ - - TargetProcessData->HandleTable = RtlAllocateHeap(ConSrvHeap, - HEAP_ZERO_MEMORY, - SourceProcessData->HandleTableSize - * sizeof(CSRSS_HANDLE)); - if (TargetProcessData->HandleTable == NULL) - { - RtlLeaveCriticalSection(&SourceProcessData->HandleTableLock); - return(STATUS_UNSUCCESSFUL); - } - TargetProcessData->HandleTableSize = SourceProcessData->HandleTableSize; - for (i = 0; i < SourceProcessData->HandleTableSize; i++) - { - if (SourceProcessData->HandleTable[i].Object != NULL && - SourceProcessData->HandleTable[i].Inheritable) - { - TargetProcessData->HandleTable[i] = SourceProcessData->HandleTable[i]; - Win32CsrCreateHandleEntry(&TargetProcessData->HandleTable[i]); - } - } - RtlLeaveCriticalSection(&SourceProcessData->HandleTableLock); - return(STATUS_SUCCESS); -} - -CSR_API(CsrGetHandle) -{ - NTSTATUS Status = STATUS_SUCCESS; - PCSRSS_GET_INPUT_HANDLE GetInputHandleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetInputHandleRequest; - PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; - - GetInputHandleRequest->Handle = INVALID_HANDLE_VALUE; - - RtlEnterCriticalSection(&ProcessData->HandleTableLock); - if (ProcessData->Console) - { - DWORD DesiredAccess = GetInputHandleRequest->Access; - DWORD ShareMode = GetInputHandleRequest->ShareMode; - - PCSRSS_CONSOLE Console = ProcessData->Console; - Object_t *Object; - - EnterCriticalSection(&Console->Lock); - if (ApiMessage->ApiNumber == ConsolepGetHandleInformation) - Object = &Console->ActiveBuffer->Header; - else - Object = &Console->Header; - - if (((DesiredAccess & GENERIC_READ) && Object->ExclusiveRead != 0) || - ((DesiredAccess & GENERIC_WRITE) && Object->ExclusiveWrite != 0) || - (!(ShareMode & FILE_SHARE_READ) && Object->AccessRead != 0) || - (!(ShareMode & FILE_SHARE_WRITE) && Object->AccessWrite != 0)) - { - DPRINT1("Sharing violation\n"); - Status = STATUS_SHARING_VIOLATION; - } - else - { - Status = Win32CsrInsertObject(ProcessData, - &GetInputHandleRequest->Handle, - Object, - DesiredAccess, - GetInputHandleRequest->Inheritable, - ShareMode); - } - LeaveCriticalSection(&Console->Lock); - } - RtlLeaveCriticalSection(&ProcessData->HandleTableLock); - - return Status; -} - -// CSR_API(CsrSetHandle) ?? + return STATUS_SUCCESS; +} CSR_API(SrvCloseHandle) { PCSRSS_CLOSE_HANDLE CloseHandleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.CloseHandleRequest; - return Win32CsrReleaseObject(CsrGetClientThread()->Process, CloseHandleRequest->Handle); + return Win32CsrReleaseObject(ConsoleGetPerProcessData(CsrGetClientThread()->Process), + CloseHandleRequest->Handle); } CSR_API(SrvVerifyConsoleIoHandle) { NTSTATUS Status = STATUS_SUCCESS; PCSRSS_VERIFY_HANDLE VerifyHandleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.VerifyHandleRequest; - PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; + PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process); ULONG_PTR Index; Index = (ULONG_PTR)VerifyHandleRequest->Handle >> 2; @@ -342,7 +320,7 @@ PCSRSS_HANDLE Entry; DWORD DesiredAccess; PCSRSS_DUPLICATE_HANDLE DuplicateHandleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.DuplicateHandleRequest; - PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; + PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process); Index = (ULONG_PTR)DuplicateHandleRequest->Handle >> 2; RtlEnterCriticalSection(&ProcessData->HandleTableLock); @@ -372,11 +350,11 @@ } ApiMessage->Status = Win32CsrInsertObject(ProcessData, - &DuplicateHandleRequest->Handle, - Entry->Object, - DesiredAccess, - DuplicateHandleRequest->Inheritable, - Entry->ShareMode); + &DuplicateHandleRequest->Handle, + Entry->Object, + DesiredAccess, + DuplicateHandleRequest->Inheritable, + Entry->ShareMode); if (NT_SUCCESS(ApiMessage->Status) && DuplicateHandleRequest->Options & DUPLICATE_CLOSE_SOURCE) { @@ -391,7 +369,9 @@ { PCSRSS_GET_INPUT_WAIT_HANDLE GetConsoleInputWaitHandle = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetConsoleInputWaitHandle; - GetConsoleInputWaitHandle->InputWaitHandle = CsrGetClientThread()->Process->ConsoleEvent; + GetConsoleInputWaitHandle->InputWaitHandle = + ConsoleGetPerProcessData(CsrGetClientThread()->Process)->ConsoleEvent; + return STATUS_SUCCESS; } Modified: branches/ros-csrss/win32ss/user/consrv/lineinput.c URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/win32ss/user/consrv/lineinput.c?rev=57689&r1=57688&r2=57689&view=diff ============================================================================== --- branches/ros-csrss/win32ss/user/consrv/lineinput.c [iso-8859-1] (original) +++ branches/ros-csrss/win32ss/user/consrv/lineinput.c [iso-8859-1] Wed Nov 7 22:23:36 2012 @@ -152,21 +152,21 @@ CSR_API(SrvGetConsoleCommandHistoryLength) { PCSRSS_GET_COMMAND_HISTORY_LENGTH GetCommandHistoryLength = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetCommandHistoryLength; - PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; + PCSR_PROCESS Process = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; NTSTATUS Status; PHISTORY_BUFFER Hist; ULONG Length = 0; INT i; - if (!Win32CsrValidateBuffer(ProcessData, + if (!Win32CsrValidateBuffer(Process, GetCommandHistoryLength->ExeName.Buffer, GetCommandHistoryLength->ExeName.Length, 1)) { return STATUS_ACCESS_VIOLATION; } - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(Process), &Console); if (NT_SUCCESS(Status)) { Hist = HistoryFindBuffer(Console, &GetCommandHistoryLength->ExeName); @@ -184,7 +184,7 @@ CSR_API(SrvGetConsoleCommandHistory) { PCSRSS_GET_COMMAND_HISTORY GetCommandHistory = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetCommandHistory; - PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; + PCSR_PROCESS Process = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; NTSTATUS Status; PHISTORY_BUFFER Hist; @@ -192,15 +192,15 @@ ULONG BufferSize = GetCommandHistory->Length; INT i; - if (!Win32CsrValidateBuffer(ProcessData, Buffer, BufferSize, 1) || - !Win32CsrValidateBuffer(ProcessData, + if (!Win32CsrValidateBuffer(Process, Buffer, BufferSize, 1) || + !Win32CsrValidateBuffer(Process, GetCommandHistory->ExeName.Buffer, GetCommandHistory->ExeName.Length, 1)) { return STATUS_ACCESS_VIOLATION; } - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(Process), &Console); if (NT_SUCCESS(Status)) { Hist = HistoryFindBuffer(Console, &GetCommandHistory->ExeName); @@ -228,19 +228,19 @@ CSR_API(SrvExpungeConsoleCommandHistory) { PCSRSS_EXPUNGE_COMMAND_HISTORY ExpungeCommandHistory = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ExpungeCommandHistory; - PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; + PCSR_PROCESS Process = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; PHISTORY_BUFFER Hist; NTSTATUS Status; - if (!Win32CsrValidateBuffer(ProcessData, + if (!Win32CsrValidateBuffer(Process, ExpungeCommandHistory->ExeName.Buffer, ExpungeCommandHistory->ExeName.Length, 1)) { return STATUS_ACCESS_VIOLATION; } - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(Process), &Console); if (NT_SUCCESS(Status)) { Hist = HistoryFindBuffer(Console, &ExpungeCommandHistory->ExeName); @@ -253,21 +253,21 @@ CSR_API(SrvSetConsoleNumberOfCommands) { PCSRSS_SET_HISTORY_NUMBER_COMMANDS SetHistoryNumberCommands = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetHistoryNumberCommands; - PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; + PCSR_PROCESS Process = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; PHISTORY_BUFFER Hist; NTSTATUS Status; WORD MaxEntries = SetHistoryNumberCommands->NumCommands; PUNICODE_STRING OldEntryList, NewEntryList; - if (!Win32CsrValidateBuffer(ProcessData, + if (!Win32CsrValidateBuffer(Process, SetHistoryNumberCommands->ExeName.Buffer, SetHistoryNumberCommands->ExeName.Length, 1)) { return STATUS_ACCESS_VIOLATION; } - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(Process), &Console); if (NT_SUCCESS(Status)) { Hist = HistoryFindBuffer(Console, &SetHistoryNumberCommands->ExeName); @@ -304,7 +304,7 @@ { PCSRSS_GET_HISTORY_INFO GetHistoryInfo = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetHistoryInfo; PCSRSS_CONSOLE Console; - NTSTATUS Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); + NTSTATUS Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console); if (NT_SUCCESS(Status)) { GetHistoryInfo->HistoryBufferSize = Console->HistoryBufferSize; @@ -319,7 +319,7 @@ { PCSRSS_SET_HISTORY_INFO SetHistoryInfo = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetHistoryInfo; PCSRSS_CONSOLE Console; - NTSTATUS Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); + NTSTATUS Status = ConioConsoleFromProcessData(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console); if (NT_SUCCESS(Status)) { Console->HistoryBufferSize = (WORD)SetHistoryInfo->HistoryBufferSize;