158 lines
3.3 KiB
C
158 lines
3.3 KiB
C
/*++
|
|
|
|
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
|
|
|
|
}
|