|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
csrpro.c
Abstract:
This module implements functions that are used by the Win32 Process Object APIs to communicate with csrss.
Author:
Michael Zoran (mzoran) 21-Jun-1998
Revision History:
--*/
#include "basedll.h"
NTSTATUS CsrBasepCreateProcess( PBASE_CREATEPROCESS_MSG a ) {
#if defined(BUILD_WOW6432)
return NtWow64CsrBasepCreateProcess(a); #else
NTSTATUS Status; BASE_API_MSG m; PCSR_CAPTURE_HEADER CaptureBuffer = NULL;
m.u.CreateProcess = *a; if (m.u.CreateProcess.Sxs.Flags != 0) { const PUNICODE_STRING StringsToCapture[] = { &m.u.CreateProcess.Sxs.Manifest.Path, &m.u.CreateProcess.Sxs.Policy.Path, &m.u.CreateProcess.Sxs.AssemblyDirectory };
Status = CsrCaptureMessageMultiUnicodeStringsInPlace( &CaptureBuffer, RTL_NUMBER_OF(StringsToCapture), StringsToCapture ); if (!NT_SUCCESS(Status)) { goto Exit; } } CsrClientCallServer( (PCSR_API_MSG)&m, CaptureBuffer, CSR_MAKE_API_NUMBER( BASESRV_SERVERDLL_INDEX, BasepCreateProcess ), sizeof( m.u.CreateProcess ) ); if ( CaptureBuffer ) CsrFreeCaptureBuffer( CaptureBuffer );
Status = (NTSTATUS)m.ReturnValue;
Exit: return Status; #endif
}
VOID CsrBasepExitProcess( UINT uExitCode ) {
#if defined(BUILD_WOW6432)
NtWow64CsrBasepExitProcess(uExitCode); return; #else
BASE_API_MSG m; PBASE_EXITPROCESS_MSG a = &m.u.ExitProcess;
a->uExitCode = uExitCode; CsrClientCallServer( (PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER( BASESRV_SERVERDLL_INDEX, BasepExitProcess ), sizeof( *a ) ); #endif
}
NTSTATUS CsrBasepSetProcessShutdownParam( DWORD dwLevel, DWORD dwFlags ) {
#if defined(BUILD_WOW6432)
return NtWow64CsrBasepSetProcessShutdownParam(dwLevel, dwFlags); #else
BASE_API_MSG m; PBASE_SHUTDOWNPARAM_MSG a = &m.u.ShutdownParam;
a->ShutdownLevel = dwLevel; a->ShutdownFlags = dwFlags;
CsrClientCallServer((PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepSetProcessShutdownParam), sizeof(*a));
return m.ReturnValue;
#endif
}
NTSTATUS CsrBasepGetProcessShutdownParam( LPDWORD lpdwLevel, LPDWORD lpdwFlags ) {
#if defined(BUILD_WOW6432)
return NtWow64CsrBasepGetProcessShutdownParam(lpdwLevel, lpdwFlags); #else
BASE_API_MSG m; PBASE_SHUTDOWNPARAM_MSG a = &m.u.ShutdownParam;
CsrClientCallServer((PCSR_API_MSG)&m, NULL, CSR_MAKE_API_NUMBER(BASESRV_SERVERDLL_INDEX, BasepSetProcessShutdownParam), sizeof(*a));
*lpdwLevel = a->ShutdownLevel; *lpdwFlags = a->ShutdownFlags;
return m.ReturnValue;
#endif
}
|