ReactOS  0.4.15-dev-3441-g67ad4e7
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 
23 typedef enum _CSRSRV_API_NUMBER
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 
47 typedef struct _CSR_API_CONNECTINFO
48 {
49  HANDLE ObjectDirectory; // Unused on Windows >= 2k3
59 
60 #if defined(_M_IX86)
61 C_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 
70 typedef struct _CSR_IDENTIFY_ALERTABLE_THREAD
71 {
72  CLIENT_ID Cid;
73 } CSR_IDENTIFY_ALERTABLE_THREAD, *PCSR_IDENTIFY_ALERTABLE_THREAD;
74 
75 typedef 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 
83 typedef struct _CSR_CLIENT_CONNECT
84 {
89 
90 typedef struct _CSR_CAPTURE_BUFFER
91 {
98 
99 
100 typedef 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  //
138  } Data;
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 */
ULONG CSR_API_NUMBER
Definition: csrmsg.h:35
ULONG SizeOfPebData
Definition: csrmsg.h:54
#define ANYSIZE_ARRAY
Definition: typedefs.h:46
CSR_CLIENT_CONNECT CsrClientConnect
Definition: csrmsg.h:114
enum _CSRSRV_API_NUMBER CSRSRV_API_NUMBER
struct _CSR_CAPTURE_BUFFER CSR_CAPTURE_BUFFER
PVOID SharedStaticServerData
Definition: csrmsg.h:51
LONG NTSTATUS
Definition: precomp.h:26
BOOL WINAPI SetPriorityClass(IN HANDLE hProcess, IN DWORD dwPriorityClass)
Definition: proc.c:1693
ULONG NumberOfServerDllNames
Definition: csrmsg.h:56
PVOID ConnectionInfo
Definition: csrmsg.h:86
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:70
PCSR_CAPTURE_BUFFER CsrCaptureData
Definition: csrmsg.h:108
union _CSR_API_MESSAGE::@3395::@3397::@3399 Data
uint32_t ULONG_PTR
Definition: typedefs.h:65
PVOID SharedSectionBase
Definition: csrmsg.h:50
NTSTATUS Status
Definition: csrmsg.h:110
#define LPC_MAX_DATA_LENGTH
Definition: lpctypes.h:291
HANDLE ServerProcessId
Definition: csrmsg.h:57
HANDLE ObjectDirectory
Definition: csrmsg.h:49
PVOID SharedSectionHeap
Definition: csrmsg.h:52
ULONG_PTR ApiMessageData[39]
Definition: csrmsg.h:137
CSR_API_NUMBER ApiNumber
Definition: csrmsg.h:109
struct _CSR_CAPTURE_BUFFER * PCSR_CAPTURE_BUFFER
CSR_API_CONNECTINFO ConnectionInfo
Definition: csrmsg.h:105
struct _CSR_API_CONNECTINFO CSR_API_CONNECTINFO
ULONG ConnectionInfoSize
Definition: csrmsg.h:87
struct _CSR_CAPTURE_BUFFER * PreviousCaptureBuffer
Definition: csrmsg.h:93
ULONG SizeOfTebData
Definition: csrmsg.h:55
struct _CSR_API_MESSAGE * PCSR_API_MESSAGE
#define CSRSRV_FIRST_API_NUMBER
Definition: csrmsg.h:21
ULONG PointerCount
Definition: csrmsg.h:94
struct _CSR_API_CONNECTINFO * PCSR_API_CONNECTINFO
C_ASSERT(sizeof(CSR_API_CONNECTINFO)<=LPC_MAX_DATA_LENGTH)
enum _CSRSRV_API_NUMBER * PCSRSRV_API_NUMBER
#define LPC_MAX_MESSAGE_LENGTH
Definition: lpctypes.h:284
ULONG Reserved
Definition: csrmsg.h:111
unsigned int ULONG
Definition: retypes.h:1
struct _CSR_CLIENT_CONNECT * PCSR_CLIENT_CONNECT
struct _CSR_CLIENT_CONNECT CSR_CLIENT_CONNECT
PORT_MESSAGE Header
Definition: csrmsg.h:102
ULONG_PTR PointerOffsetsArray[ANYSIZE_ARRAY]
Definition: csrmsg.h:96
struct _CSR_API_MESSAGE CSR_API_MESSAGE
_CSRSRV_API_NUMBER
Definition: csrmsg.h:23