Author: hbelusca Date: Fri Nov 2 18:00:47 2012 New Revision: 57666
URL: http://svn.reactos.org/svn/reactos?rev=57666&view=rev Log: [KERNEL32] This is the first of a series of commits aiming at making kernel32 using the new CSR messaging structures for communicating with Server Dlls.
Modified: branches/ros-csrss/dll/win32/kernel32/client/dosdev.c branches/ros-csrss/dll/win32/kernel32/client/proc.c branches/ros-csrss/dll/win32/kernel32/client/vdm.c branches/ros-csrss/dll/win32/kernel32/client/vista.c
Modified: branches/ros-csrss/dll/win32/kernel32/client/dosdev.c URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/cli... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/client/dosdev.c [iso-8859-1] (original) +++ branches/ros-csrss/dll/win32/kernel32/client/dosdev.c [iso-8859-1] Fri Nov 2 18:00:47 2012 @@ -90,8 +90,9 @@ { ULONG ArgumentCount; ULONG BufferSize; + BASE_API_MESSAGE ApiMessage; + PBASE_DEFINE_DOS_DEVICE DefineDosDeviceRequest = &ApiMessage.Data.DefineDosDeviceRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; - CSR_API_MESSAGE Request; NTSTATUS Status; UNICODE_STRING NtTargetPathU; UNICODE_STRING DeviceNameU; @@ -157,16 +158,16 @@ } else { - Request.Data.DefineDosDeviceRequest.dwFlags = dwFlags; + DefineDosDeviceRequest->dwFlags = dwFlags;
CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)DeviceUpcaseNameU.Buffer, DeviceUpcaseNameU.Length, - (PVOID*)&Request.Data.DefineDosDeviceRequest.DeviceName.Buffer); - - Request.Data.DefineDosDeviceRequest.DeviceName.Length = + (PVOID*)&DefineDosDeviceRequest->DeviceName.Buffer); + + DefineDosDeviceRequest->DeviceName.Length = DeviceUpcaseNameU.Length; - Request.Data.DefineDosDeviceRequest.DeviceName.MaximumLength = + DefineDosDeviceRequest->DeviceName.MaximumLength = DeviceUpcaseNameU.Length;
if (NtTargetPathU.Buffer) @@ -174,21 +175,20 @@ CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)NtTargetPathU.Buffer, NtTargetPathU.Length, - (PVOID*)&Request.Data.DefineDosDeviceRequest.TargetName.Buffer); - } - Request.Data.DefineDosDeviceRequest.TargetName.Length = + (PVOID*)&DefineDosDeviceRequest->TargetName.Buffer); + } + DefineDosDeviceRequest->TargetName.Length = NtTargetPathU.Length; - Request.Data.DefineDosDeviceRequest.TargetName.MaximumLength = + DefineDosDeviceRequest->TargetName.MaximumLength = NtTargetPathU.Length;
- Status = CsrClientCallServer(&Request, + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, CaptureBuffer, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepDefineDosDevice), - sizeof(CSR_API_MESSAGE)); + sizeof(BASE_DEFINE_DOS_DEVICE)); CsrFreeCaptureBuffer(CaptureBuffer);
- if (! NT_SUCCESS(Status) || - ! NT_SUCCESS(Status = Request.Status)) + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status)) { WARN("CsrClientCallServer() failed (Status %lx)\n", Status);
Modified: branches/ros-csrss/dll/win32/kernel32/client/proc.c URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/cli... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/client/proc.c [iso-8859-1] (original) +++ branches/ros-csrss/dll/win32/kernel32/client/proc.c [iso-8859-1] Fri Nov 2 18:00:47 2012 @@ -1,10 +1,9 @@ -/* $Id: proc.c 57086 2012-08-16 15:39:40Z akhaldi $ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries * FILE: lib/kernel32/proc/proc.c * PURPOSE: Process functions - * PROGRAMMER: Ariadne ( ariadne@xs4all.nl) + * PROGRAMMERS: Ariadne (ariadne@xs4all.nl) * UPDATE HISTORY: * Created 01/11/98 */ @@ -13,7 +12,7 @@
#include <k32.h>
-#define NDEBUG +// #define NDEBUG #include <debug.h>
/* GLOBALS *******************************************************************/ @@ -494,25 +493,26 @@ BasepNotifyCsrOfThread(IN HANDLE ThreadHandle, IN PCLIENT_ID ClientId) { - CSR_API_MESSAGE CsrRequest; - NTSTATUS Status; + NTSTATUS Status; + BASE_API_MESSAGE ApiMessage; + PBASE_CREATE_THREAD CreateThreadRequest = &ApiMessage.Data.CreateThreadRequest;
DPRINT("BasepNotifyCsrOfThread: Thread: %lx, Handle %lx\n", ClientId->UniqueThread, ThreadHandle);
/* Fill out the request */ - CsrRequest.Data.CreateThreadRequest.ClientId = *ClientId; - CsrRequest.Data.CreateThreadRequest.ThreadHandle = ThreadHandle; + CreateThreadRequest->ClientId = *ClientId; + CreateThreadRequest->ThreadHandle = ThreadHandle;
/* Call CSR */ - Status = CsrClientCallServer(&CsrRequest, + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepCreateThread), - sizeof(CSR_API_MESSAGE)); - if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status)) - { - DPRINT1("Failed to tell csrss about new thread: %lx %lx\n", Status, CsrRequest.Status); - return CsrRequest.Status; + sizeof(BASE_CREATE_THREAD)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(ApiMessage.Status)) + { + DPRINT1("Failed to tell csrss about new thread: %lx %lx\n", Status, ApiMessage.Status); + return ApiMessage.Status; }
/* Return Success */ @@ -531,13 +531,15 @@ BOOLEAN InheritHandles, DWORD dwCreationFlags) { + NTSTATUS Status; OBJECT_ATTRIBUTES LocalObjectAttributes; POBJECT_ATTRIBUTES ObjectAttributes; CONTEXT Context; INITIAL_TEB InitialTeb; - NTSTATUS Status; HANDLE hThread; - CSR_API_MESSAGE CsrRequest; + BASE_API_MESSAGE ApiMessage; + PBASE_CREATE_PROCESS CreateProcessRequest = &ApiMessage.Data.CreateProcessRequest; + DPRINT("BasepCreateFirstThread. hProcess: %lx\n", ProcessHandle);
/* Create the Thread's Stack */ @@ -573,20 +575,21 @@ }
/* Fill out the request to notify CSRSS */ - CsrRequest.Data.CreateProcessRequest.ClientId = *ClientId; - CsrRequest.Data.CreateProcessRequest.ProcessHandle = ProcessHandle; - CsrRequest.Data.CreateProcessRequest.ThreadHandle = hThread; - CsrRequest.Data.CreateProcessRequest.CreationFlags = dwCreationFlags; - CsrRequest.Data.CreateProcessRequest.bInheritHandles = InheritHandles; + CreateProcessRequest->ClientId = *ClientId; + CreateProcessRequest->ProcessHandle = ProcessHandle; + CreateProcessRequest->ThreadHandle = hThread; + CreateProcessRequest->CreationFlags = dwCreationFlags; + CreateProcessRequest->bInheritHandles = InheritHandles;
/* Call CSR */ - Status = CsrClientCallServer(&CsrRequest, + DPRINT1("Calling CsrClientCallServer from BasepCreateFirstThread...\n"); + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepCreateProcess), - sizeof(CSR_API_MESSAGE)); - if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status)) - { - DPRINT1("Failed to tell csrss about new process: %lx %lx\n", Status, CsrRequest.Status); + sizeof(BASE_CREATE_PROCESS)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(ApiMessage.Status)) + { + DPRINT1("Failed to tell csrss about new process: %lx %lx\n", Status, ApiMessage.Status); return NULL; }
@@ -1174,24 +1177,25 @@ GetProcessShutdownParameters(OUT LPDWORD lpdwLevel, OUT LPDWORD lpdwFlags) { - CSR_API_MESSAGE CsrRequest; - NTSTATUS Status; + NTSTATUS Status; + BASE_API_MESSAGE ApiMessage; + PBASE_GET_PROCESS_SHUTDOWN_PARAMS GetShutdownParametersRequest = &ApiMessage.Data.GetShutdownParametersRequest;
/* Ask CSRSS for shutdown information */ - Status = CsrClientCallServer(&CsrRequest, + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepGetProcessShutdownParam), - sizeof(CSR_API_MESSAGE)); - if (!(NT_SUCCESS(Status)) || !(NT_SUCCESS(CsrRequest.Status))) + sizeof(BASE_GET_PROCESS_SHUTDOWN_PARAMS)); + if (!(NT_SUCCESS(Status)) || !(NT_SUCCESS(ApiMessage.Status))) { /* Return the failure from CSRSS */ - BaseSetLastNTError(CsrRequest.Status); + BaseSetLastNTError(ApiMessage.Status); return FALSE; }
/* Get the data out of the LCP reply */ - *lpdwLevel = CsrRequest.Data.GetShutdownParametersRequest.Level; - *lpdwFlags = CsrRequest.Data.GetShutdownParametersRequest.Flags; + *lpdwLevel = GetShutdownParametersRequest->Level; + *lpdwFlags = GetShutdownParametersRequest->Flags; return TRUE; }
@@ -1203,20 +1207,21 @@ SetProcessShutdownParameters(IN DWORD dwLevel, IN DWORD dwFlags) { - CSR_API_MESSAGE CsrRequest; - NTSTATUS Status; + NTSTATUS Status; + BASE_API_MESSAGE ApiMessage; + PBASE_SET_PROCESS_SHUTDOWN_PARAMS SetShutdownParametersRequest = &ApiMessage.Data.SetShutdownParametersRequest;
/* Write the data into the CSRSS request and send it */ - CsrRequest.Data.SetShutdownParametersRequest.Level = dwLevel; - CsrRequest.Data.SetShutdownParametersRequest.Flags = dwFlags; - Status = CsrClientCallServer(&CsrRequest, + SetShutdownParametersRequest->Level = dwLevel; + SetShutdownParametersRequest->Flags = dwFlags; + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepSetProcessShutdownParam), - sizeof(CSR_API_MESSAGE)); - if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status)) + sizeof(BASE_SET_PROCESS_SHUTDOWN_PARAMS)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(ApiMessage.Status)) { /* Return the failure from CSRSS */ - BaseSetLastNTError(CsrRequest.Status); + BaseSetLastNTError(ApiMessage.Status); return FALSE; }
@@ -1740,7 +1745,9 @@ WINAPI ExitProcess(IN UINT uExitCode) { - CSR_API_MESSAGE CsrRequest; + BASE_API_MESSAGE ApiMessage; + PBASE_EXIT_PROCESS ExitProcessRequest = &ApiMessage.Data.ExitProcessRequest; + ASSERT(!BaseRunningInServerProcess);
_SEH2_TRY @@ -1755,11 +1762,11 @@ LdrShutdownProcess();
/* Notify Base Server of process termination */ - CsrRequest.Data.TerminateProcessRequest.uExitCode = uExitCode; - CsrClientCallServer(&CsrRequest, + ExitProcessRequest->uExitCode = uExitCode; + CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepExitProcess), - sizeof(CSR_API_MESSAGE)); + sizeof(BASE_EXIT_PROCESS));
/* Now do it again */ NtTerminateProcess(NtCurrentProcess(), uExitCode);
Modified: branches/ros-csrss/dll/win32/kernel32/client/vdm.c URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/cli... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/client/vdm.c [iso-8859-1] (original) +++ branches/ros-csrss/dll/win32/kernel32/client/vdm.c [iso-8859-1] Fri Nov 2 18:00:47 2012 @@ -70,7 +70,7 @@ IN PCWCH CommandLine, IN PCWCH CurrentDirectory, IN PANSI_STRING AnsiEnvironment, - IN PCSR_API_MESSAGE Msg, + IN PCSR_API_MESSAGE ApiMessage, IN OUT PULONG iTask, IN DWORD CreationFlags, IN LPSTARTUPINFOW StartupInfo) @@ -87,8 +87,10 @@ IN ULONG IndexInfo, IN ULONG BinaryType) { +#if 0 // Unimplemented in BASESRV NTSTATUS Status; - CSR_API_MESSAGE Msg; + BASE_API_MESSAGE ApiMessage; + PBASE_UPDATE_VDM_ENTRY UpdateVdmEntry = &ApiMessage.Data.UpdateVdmEntry;
/* Check what update is being sent */ switch (UpdateIndex) @@ -97,16 +99,16 @@ case VdmEntryUndo:
/* Tell the server how far we had gotten along */ - Msg.Data.UpdateVdmEntry.iTask = (ULONG)*WaitHandle; - Msg.Data.UpdateVdmEntry.VDMCreationState = IndexInfo; + UpdateVdmEntry->iTask = (ULONG)*WaitHandle; + UpdateVdmEntry->VDMCreationState = IndexInfo; break;
/* VDM is ready with a new process handle */ case VdmEntryUpdateProcess:
/* Send it the process handle */ - Msg.Data.UpdateVdmEntry.VDMProcessHandle = *WaitHandle; - Msg.Data.UpdateVdmEntry.iTask = IndexInfo; + UpdateVdmEntry->VDMProcessHandle = *WaitHandle; + UpdateVdmEntry->iTask = IndexInfo; break; }
@@ -114,32 +116,32 @@ if (BinaryType == BINARY_TYPE_WOW) { /* Magic value for 16-bit apps */ - Msg.Data.UpdateVdmEntry.ConsoleHandle = (HANDLE)-1; - } - else if (Msg.Data.UpdateVdmEntry.iTask) + UpdateVdmEntry->ConsoleHandle = (HANDLE)-1; + } + else if (UpdateVdmEntry->iTask) { /* No handle for true VDM */ - Msg.Data.UpdateVdmEntry.ConsoleHandle = 0; + UpdateVdmEntry->ConsoleHandle = 0; } else { /* Otherwise, send the regular consoel handle */ - Msg.Data.UpdateVdmEntry.ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; + UpdateVdmEntry->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; }
/* Finally write the index and binary type */ - Msg.Data.UpdateVdmEntry.EntryIndex = UpdateIndex; - Msg.Data.UpdateVdmEntry.BinaryType = BinaryType; + UpdateVdmEntry->EntryIndex = UpdateIndex; + UpdateVdmEntry->BinaryType = BinaryType;
/* Send the message to CSRSS */ - Status = CsrClientCallServer(&Msg, + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepUpdateVDMEntry), - sizeof(Msg)); - if (!(NT_SUCCESS(Status)) || !(NT_SUCCESS(Msg.Status))) + sizeof(BASE_UPDATE_VDM_ENTRY)); + if (!(NT_SUCCESS(Status)) || !(NT_SUCCESS(ApiMessage.Status))) { /* Handle failure */ - BaseSetLastNTError(Msg.Status); + BaseSetLastNTError(ApiMessage.Status); return FALSE; }
@@ -147,9 +149,9 @@ if (UpdateIndex == VdmEntryUpdateProcess) { /* Return it to the caller */ - *WaitHandle = Msg.Data.UpdateVdmEntry.WaitObjectForParent; - } - + *WaitHandle = UpdateVdmEntry->WaitObjectForParent; + } +#endif /* We made it */ return TRUE; } @@ -159,9 +161,11 @@ BaseCheckForVDM(IN HANDLE ProcessHandle, OUT LPDWORD ExitCode) { +#if 0 // Unimplemented in BASESRV NTSTATUS Status; EVENT_BASIC_INFORMATION EventBasicInfo; - CSR_API_MESSAGE Msg; + BASE_API_MESSAGE ApiMessage; + PBASE_GET_VDM_EXIT_CODE GetVdmExitCode = &ApiMessage.Data.GetVdmExitCode;
/* It's VDM if the process is actually a wait handle (an event) */ Status = NtQueryEvent(ProcessHandle, @@ -172,18 +176,19 @@ if (!NT_SUCCESS(Status)) return FALSE;
/* Setup the input parameters */ - Msg.Data.GetVdmExitCode.ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; - Msg.Data.GetVdmExitCode.hParent = ProcessHandle; + GetVdmExitCode->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; + GetVdmExitCode->hParent = ProcessHandle;
/* Call CSRSS */ - Status = CsrClientCallServer(&Msg, + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, - CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepCheckVDM /* BasepGetVDMExitCode */), - sizeof(Msg)); + CSR_CREATE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepGetVDMExitCode /* BasepCheckVDM */), + sizeof(BASE_GET_VDM_EXIT_CODE)); if (!NT_SUCCESS(Status)) return FALSE;
/* Get the exit code from the reply */ - *ExitCode = Msg.Data.GetVdmExitCode.ExitCode; + *ExitCode = GetVdmExitCode->ExitCode; +#endif return TRUE; }
Modified: branches/ros-csrss/dll/win32/kernel32/client/vista.c URL: http://svn.reactos.org/svn/reactos/branches/ros-csrss/dll/win32/kernel32/cli... ============================================================================== --- branches/ros-csrss/dll/win32/kernel32/client/vista.c [iso-8859-1] (original) +++ branches/ros-csrss/dll/win32/kernel32/client/vista.c [iso-8859-1] Fri Nov 2 18:00:47 2012 @@ -318,8 +318,9 @@ WINAPI GetConsoleHistoryInfo(PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo) { - CSR_API_MESSAGE Request; NTSTATUS Status; + CONSOLE_API_MESSAGE ApiMessage; + PCSRSS_GET_HISTORY_INFO GetHistoryInfo = &ApiMessage.Data.GetHistoryInfo;
if (lpConsoleHistoryInfo->cbSize != sizeof(CONSOLE_HISTORY_INFO)) { @@ -327,19 +328,19 @@ return FALSE; }
- Status = CsrClientCallServer(&Request, + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, - CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_HISTORY_INFO), - sizeof(CSR_API_MESSAGE)); - if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) + CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetHistory), + sizeof(CSRSS_GET_HISTORY_INFO)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status)) { BaseSetLastNTError(Status); return FALSE; }
- lpConsoleHistoryInfo->HistoryBufferSize = Request.Data.GetHistoryInfo.HistoryBufferSize; - lpConsoleHistoryInfo->NumberOfHistoryBuffers = Request.Data.GetHistoryInfo.NumberOfHistoryBuffers; - lpConsoleHistoryInfo->dwFlags = Request.Data.GetHistoryInfo.dwFlags; + lpConsoleHistoryInfo->HistoryBufferSize = GetHistoryInfo->HistoryBufferSize; + lpConsoleHistoryInfo->NumberOfHistoryBuffers = GetHistoryInfo->NumberOfHistoryBuffers; + lpConsoleHistoryInfo->dwFlags = GetHistoryInfo->dwFlags;
return TRUE; } @@ -354,8 +355,9 @@ WINAPI SetConsoleHistoryInfo(IN PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo) { - CSR_API_MESSAGE Request; NTSTATUS Status; + CONSOLE_API_MESSAGE ApiMessage; + PCSRSS_SET_HISTORY_INFO SetHistoryInfo = &ApiMessage.Data.SetHistoryInfo;
if (lpConsoleHistoryInfo->cbSize != sizeof(CONSOLE_HISTORY_INFO)) { @@ -363,15 +365,15 @@ return FALSE; }
- Request.Data.SetHistoryInfo.HistoryBufferSize = lpConsoleHistoryInfo->HistoryBufferSize; - Request.Data.SetHistoryInfo.NumberOfHistoryBuffers = lpConsoleHistoryInfo->NumberOfHistoryBuffers; - Request.Data.SetHistoryInfo.dwFlags = lpConsoleHistoryInfo->dwFlags; - - Status = CsrClientCallServer(&Request, + SetHistoryInfo->HistoryBufferSize = lpConsoleHistoryInfo->HistoryBufferSize; + SetHistoryInfo->NumberOfHistoryBuffers = lpConsoleHistoryInfo->NumberOfHistoryBuffers; + SetHistoryInfo->dwFlags = lpConsoleHistoryInfo->dwFlags; + + Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, NULL, - CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_HISTORY_INFO), - sizeof(CSR_API_MESSAGE)); - if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) + CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetHistory), + sizeof(CSRSS_SET_HISTORY_INFO)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status)) { BaseSetLastNTError(Status); return FALSE;