ReactOS 0.4.15-dev-7788-g1ad9096
csrmsg.h
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Client/Server Runtime SubSystem
4 * FILE: include/reactos/subsys/csr/csrmsg.h
5 * PURPOSE: Public definitions for communication
6 * between CSR Clients and Servers
7 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
8 * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
9 */
10
11#ifndef _CSRMSG_H
12#define _CSRMSG_H
13
14#pragma once
15
16
17#define CSR_PORT_NAME L"ApiPort" // CSR_API_PORT_NAME
18
19
20#define CSRSRV_SERVERDLL_INDEX 0
21#define CSRSRV_FIRST_API_NUMBER 0
22
24{
30
33
34
36
37#define CSR_CREATE_API_NUMBER(ServerId, ApiId) \
38 (CSR_API_NUMBER)(((ServerId) << 16) | (ApiId))
39
40#define CSR_API_NUMBER_TO_SERVER_ID(ApiNumber) \
41 (ULONG)((ULONG)(ApiNumber) >> 16)
42
43#define CSR_API_NUMBER_TO_API_ID(ApiNumber) \
44 (ULONG)((ULONG)(ApiNumber) & 0xFFFF)
45
46
48{
49 HANDLE ObjectDirectory; // Unused on Windows >= 2k3
59
60#if defined(_M_IX86)
61C_ASSERT(sizeof(CSR_API_CONNECTINFO) == 0x24);
62#endif
63
64// We must have a size at most equal to the maximum acceptable LPC data size.
66
67
68#if (NTDDI_VERSION < NTDDI_WS03)
69
70typedef struct _CSR_IDENTIFY_ALERTABLE_THREAD
71{
72 CLIENT_ID Cid;
73} CSR_IDENTIFY_ALERTABLE_THREAD, *PCSR_IDENTIFY_ALERTABLE_THREAD;
74
75typedef struct _CSR_SET_PRIORITY_CLASS
76{
78 ULONG PriorityClass;
79} CSR_SET_PRIORITY_CLASS, *PCSR_SET_PRIORITY_CLASS;
80
81#endif // (NTDDI_VERSION < NTDDI_WS03)
82
83typedef struct _CSR_CLIENT_CONNECT
84{
89
90typedef struct _CSR_CAPTURE_BUFFER
91{
98
99
100typedef struct _CSR_API_MESSAGE
101{
103 union
104 {
105 CSR_API_CONNECTINFO ConnectionInfo; // Uniquely used in CSRSRV for internal signaling (opening a new connection).
106 struct
107 {
110 NTSTATUS Status; // ReturnValue;
112 union
113 {
115#if (NTDDI_VERSION < NTDDI_WS03)
116 CSR_SET_PRIORITY_CLASS SetPriorityClass;
117 CSR_IDENTIFY_ALERTABLE_THREAD IdentifyAlertableThread;
118#endif
119 //
120 // This padding is used to make the CSR_API_MESSAGE structure
121 // large enough to hold full other API_MESSAGE-type structures
122 // used by other servers. These latter structures's sizes must
123 // be checked against the size of CSR_API_MESSAGE by using the
124 // CHECK_API_MSG_SIZE macro defined below.
125 //
126 // This is required because LPC will use this generic structure
127 // for communicating all the different servers' messages, and
128 // thus we avoid possible buffer overflows with this method.
129 // The problems there are, that we have to manually adjust the
130 // size of the padding to hope that all the servers' messaging
131 // structures will hold in it, or, that we have to be careful
132 // to not define too big messaging structures for the servers.
133 //
134 // Finally, the overall message structure size must be at most
135 // equal to the maximum acceptable LPC message size.
136 //
139 };
140 };
142
143// We must have a size at most equal to the maximum acceptable LPC message size.
145
146// Macro to check that the total size of servers' message structures
147// are at most equal to the size of the CSR_API_MESSAGE structure.
148#define CHECK_API_MSG_SIZE(type) C_ASSERT(sizeof(type) <= sizeof(CSR_API_MESSAGE))
149
150#endif // _CSRMSG_H
151
152/* EOF */
LONG NTSTATUS
Definition: precomp.h:26
struct _CSR_CLIENT_CONNECT CSR_CLIENT_CONNECT
struct _CSR_API_MESSAGE * PCSR_API_MESSAGE
enum _CSRSRV_API_NUMBER CSRSRV_API_NUMBER
struct _CSR_API_MESSAGE CSR_API_MESSAGE
struct _CSR_API_CONNECTINFO CSR_API_CONNECTINFO
struct _CSR_CAPTURE_BUFFER CSR_CAPTURE_BUFFER
ULONG CSR_API_NUMBER
Definition: csrmsg.h:35
enum _CSRSRV_API_NUMBER * PCSRSRV_API_NUMBER
#define CSRSRV_FIRST_API_NUMBER
Definition: csrmsg.h:21
struct _CSR_CAPTURE_BUFFER * PCSR_CAPTURE_BUFFER
struct _CSR_CLIENT_CONNECT * PCSR_CLIENT_CONNECT
_CSRSRV_API_NUMBER
Definition: csrmsg.h:24
@ CsrpThreadConnect
Definition: csrmsg.h:26
@ CsrpSetPriorityClass
Definition: csrmsg.h:29
@ CsrpProfileControl
Definition: csrmsg.h:27
@ CsrpMaxApiNumber
Definition: csrmsg.h:31
@ CsrpClientConnect
Definition: csrmsg.h:25
@ CsrpIdentifyAlertableThread
Definition: csrmsg.h:28
struct _CSR_API_CONNECTINFO * PCSR_API_CONNECTINFO
BOOL WINAPI SetPriorityClass(IN HANDLE hProcess, IN DWORD dwPriorityClass)
Definition: proc.c:1692
#define C_ASSERT(e)
Definition: intsafe.h:73
#define LPC_MAX_MESSAGE_LENGTH
Definition: lpctypes.h:284
#define LPC_MAX_DATA_LENGTH
Definition: lpctypes.h:291
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:71
HANDLE ObjectDirectory
Definition: csrmsg.h:49
HANDLE ServerProcessId
Definition: csrmsg.h:57
PVOID SharedStaticServerData
Definition: csrmsg.h:51
PVOID SharedSectionBase
Definition: csrmsg.h:50
PVOID SharedSectionHeap
Definition: csrmsg.h:52
ULONG SizeOfTebData
Definition: csrmsg.h:55
ULONG NumberOfServerDllNames
Definition: csrmsg.h:56
ULONG SizeOfPebData
Definition: csrmsg.h:54
ULONG Reserved
Definition: csrmsg.h:111
NTSTATUS Status
Definition: csrmsg.h:110
PCSR_CAPTURE_BUFFER CsrCaptureData
Definition: csrmsg.h:108
ULONG_PTR ApiMessageData[39]
Definition: csrmsg.h:137
PORT_MESSAGE Header
Definition: csrmsg.h:102
CSR_API_CONNECTINFO ConnectionInfo
Definition: csrmsg.h:105
union _CSR_API_MESSAGE::@3481::@3483::@3485 Data
CSR_API_NUMBER ApiNumber
Definition: csrmsg.h:109
CSR_CLIENT_CONNECT CsrClientConnect
Definition: csrmsg.h:114
ULONG PointerCount
Definition: csrmsg.h:94
ULONG_PTR PointerOffsetsArray[ANYSIZE_ARRAY]
Definition: csrmsg.h:96
struct _CSR_CAPTURE_BUFFER * PreviousCaptureBuffer
Definition: csrmsg.h:93
ULONG ConnectionInfoSize
Definition: csrmsg.h:87
PVOID ConnectionInfo
Definition: csrmsg.h:86
#define ANYSIZE_ARRAY
Definition: typedefs.h:46
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t ULONG
Definition: typedefs.h:59