From 1e4253f2c06909f05af93d39569f3cf07f3657de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 2 Nov 2012 18:00:47 +0000 Subject: [PATCH] [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. svn path=/branches/ros-csrss/; revision=57666 --- dll/win32/kernel32/client/dosdev.c | 24 ++++---- dll/win32/kernel32/client/proc.c | 89 ++++++++++++++++-------------- dll/win32/kernel32/client/vdm.c | 55 +++++++++--------- dll/win32/kernel32/client/vista.c | 34 ++++++------ 4 files changed, 108 insertions(+), 94 deletions(-) diff --git a/dll/win32/kernel32/client/dosdev.c b/dll/win32/kernel32/client/dosdev.c index 2882de566ba..8843ed20a84 100644 --- a/dll/win32/kernel32/client/dosdev.c +++ b/dll/win32/kernel32/client/dosdev.c @@ -90,8 +90,9 @@ DefineDosDeviceW( { 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 @@ DefineDosDeviceW( } else { - Request.Data.DefineDosDeviceRequest.dwFlags = dwFlags; + DefineDosDeviceRequest->dwFlags = dwFlags; CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)DeviceUpcaseNameU.Buffer, DeviceUpcaseNameU.Length, - (PVOID*)&Request.Data.DefineDosDeviceRequest.DeviceName.Buffer); + (PVOID*)&DefineDosDeviceRequest->DeviceName.Buffer); - Request.Data.DefineDosDeviceRequest.DeviceName.Length = + DefineDosDeviceRequest->DeviceName.Length = DeviceUpcaseNameU.Length; - Request.Data.DefineDosDeviceRequest.DeviceName.MaximumLength = + DefineDosDeviceRequest->DeviceName.MaximumLength = DeviceUpcaseNameU.Length; if (NtTargetPathU.Buffer) @@ -174,21 +175,20 @@ DefineDosDeviceW( CsrCaptureMessageBuffer(CaptureBuffer, (PVOID)NtTargetPathU.Buffer, NtTargetPathU.Length, - (PVOID*)&Request.Data.DefineDosDeviceRequest.TargetName.Buffer); + (PVOID*)&DefineDosDeviceRequest->TargetName.Buffer); } - Request.Data.DefineDosDeviceRequest.TargetName.Length = + 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); diff --git a/dll/win32/kernel32/client/proc.c b/dll/win32/kernel32/client/proc.c index 921c669e119..0c4f36b4ed4 100644 --- a/dll/win32/kernel32/client/proc.c +++ b/dll/win32/kernel32/client/proc.c @@ -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 -#define NDEBUG +// #define NDEBUG #include /* GLOBALS *******************************************************************/ @@ -494,25 +493,26 @@ WINAPI BasepNotifyCsrOfThread(IN HANDLE ThreadHandle, IN PCLIENT_ID ClientId) { - CSR_API_MESSAGE CsrRequest; 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)) + sizeof(BASE_CREATE_THREAD)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(ApiMessage.Status)) { - DPRINT1("Failed to tell csrss about new thread: %lx %lx\n", Status, CsrRequest.Status); - return CsrRequest.Status; + DPRINT1("Failed to tell csrss about new thread: %lx %lx\n", Status, ApiMessage.Status); + return ApiMessage.Status; } /* Return Success */ @@ -531,13 +531,15 @@ BasepCreateFirstThread(HANDLE ProcessHandle, 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 @@ BasepCreateFirstThread(HANDLE ProcessHandle, } /* 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)) + sizeof(BASE_CREATE_PROCESS)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(ApiMessage.Status)) { - DPRINT1("Failed to tell csrss about new process: %lx %lx\n", Status, CsrRequest.Status); + DPRINT1("Failed to tell csrss about new process: %lx %lx\n", Status, ApiMessage.Status); return NULL; } @@ -1174,24 +1177,25 @@ WINAPI GetProcessShutdownParameters(OUT LPDWORD lpdwLevel, OUT LPDWORD lpdwFlags) { - CSR_API_MESSAGE CsrRequest; 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 @@ WINAPI SetProcessShutdownParameters(IN DWORD dwLevel, IN DWORD dwFlags) { - CSR_API_MESSAGE CsrRequest; 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 @@ VOID 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 @@ ExitProcess(IN UINT uExitCode) 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); diff --git a/dll/win32/kernel32/client/vdm.c b/dll/win32/kernel32/client/vdm.c index 803558703a7..051c9e4c1c0 100644 --- a/dll/win32/kernel32/client/vdm.c +++ b/dll/win32/kernel32/client/vdm.c @@ -70,7 +70,7 @@ BaseCheckVDM(IN ULONG BinaryType, 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 @@ BaseUpdateVDMEntry(IN ULONG UpdateIndex, 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 @@ BaseUpdateVDMEntry(IN ULONG UpdateIndex, 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 @@ BaseUpdateVDMEntry(IN ULONG UpdateIndex, if (BinaryType == BINARY_TYPE_WOW) { /* Magic value for 16-bit apps */ - Msg.Data.UpdateVdmEntry.ConsoleHandle = (HANDLE)-1; + UpdateVdmEntry->ConsoleHandle = (HANDLE)-1; } - else if (Msg.Data.UpdateVdmEntry.iTask) + 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 @@ BaseUpdateVDMEntry(IN ULONG UpdateIndex, 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 @@ WINAPI 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 @@ BaseCheckForVDM(IN HANDLE ProcessHandle, 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; } diff --git a/dll/win32/kernel32/client/vista.c b/dll/win32/kernel32/client/vista.c index 697207dabc9..71a9038fb47 100644 --- a/dll/win32/kernel32/client/vista.c +++ b/dll/win32/kernel32/client/vista.c @@ -318,8 +318,9 @@ BOOL 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 @@ GetConsoleHistoryInfo(PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo) 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 @@ BOOL 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 @@ SetConsoleHistoryInfo(IN PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo) return FALSE; } - Request.Data.SetHistoryInfo.HistoryBufferSize = lpConsoleHistoryInfo->HistoryBufferSize; - Request.Data.SetHistoryInfo.NumberOfHistoryBuffers = lpConsoleHistoryInfo->NumberOfHistoryBuffers; - Request.Data.SetHistoryInfo.dwFlags = lpConsoleHistoryInfo->dwFlags; + SetHistoryInfo->HistoryBufferSize = lpConsoleHistoryInfo->HistoryBufferSize; + SetHistoryInfo->NumberOfHistoryBuffers = lpConsoleHistoryInfo->NumberOfHistoryBuffers; + SetHistoryInfo->dwFlags = lpConsoleHistoryInfo->dwFlags; - 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, ConsolepSetHistory), + sizeof(CSRSS_SET_HISTORY_INFO)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status)) { BaseSetLastNTError(Status); return FALSE;