#include "csrmsg.h"
+
/* TYPES **********************************************************************/
+// Used in ntdll/csr/connect.c
+#define CSR_CSRSS_SECTION_SIZE 65536
+
typedef struct _CSR_NT_SESSION
{
ULONG ReferenceCount;
ULONG SessionId;
} CSR_NT_SESSION, *PCSR_NT_SESSION;
-/*** old thingie, remove it later... (put it in winsrv -- console) ***/
-#include <win/conmsg.h>
-typedef struct _CSRSS_CON_PROCESS_DATA
-{
- HANDLE ConsoleEvent;
- struct tagCSRSS_CONSOLE *Console;
- struct tagCSRSS_CONSOLE *ParentConsole;
- BOOL bInheritHandles;
- RTL_CRITICAL_SECTION HandleTableLock;
- ULONG HandleTableSize;
- struct _CSRSS_HANDLE *HandleTable;
- PCONTROLDISPATCHER CtrlDispatcher;
- LIST_ENTRY ConsoleLink;
-} CSRSS_CON_PROCESS_DATA, *PCSRSS_CON_PROCESS_DATA;
-/*********************************************************************/
typedef struct _CSR_PROCESS
{
CLIENT_ID ClientId;
LIST_ENTRY ListLink;
LIST_ENTRY ThreadList;
- struct _CSR_PROCESS *Parent;
PCSR_NT_SESSION NtSession;
ULONG ExpectedVersion;
HANDLE ClientPort;
ULONG Reserved;
ULONG ShutdownLevel;
ULONG ShutdownFlags;
- PVOID ServerData[ANYSIZE_ARRAY]; // ServerDllPerProcessData // One structure per CSR server.
- CSRSS_CON_PROCESS_DATA; //// FIXME: Remove it after we activate the previous member.
+ PVOID ServerData[ANYSIZE_ARRAY]; // One structure per CSR server.
} CSR_PROCESS, *PCSR_PROCESS;
typedef struct _CSR_THREAD
typedef enum _CSR_THREAD_FLAGS
{
- CsrThreadAltertable = 0x1,
+ CsrThreadAlertable = 0x1,
CsrThreadInTermination = 0x2,
CsrThreadTerminated = 0x4,
CsrThreadIsServerThread = 0x10
CsrDebugProcessChildren = 2
} CSR_PROCESS_DEBUG_FLAGS, *PCSR_PROCESS_DEBUG_FLAGS;
+typedef enum _CSR_REPLY_CODE
+{
+ CsrReplyImmediately = 0,
+ CsrReplyPending = 1,
+ CsrReplyDeadClient = 2,
+ CsrReplyAlreadySent = 3
+} CSR_REPLY_CODE, *PCSR_REPLY_CODE;
+
+
+/* FUNCTION TYPES AND STRUCTURES **********************************************/
/*
* Wait block
typedef struct _CSR_WAIT_BLOCK
{
- ULONG Size;
+ ULONG Size; // Size of the wait block (variable-sized)
LIST_ENTRY WaitList;
LIST_ENTRY UserWaitList;
PVOID WaitContext;
PCSR_THREAD WaitThread;
CSR_WAIT_FUNCTION WaitFunction;
- CSR_API_MESSAGE WaitApiMessage;
+ CSR_API_MESSAGE WaitApiMessage; // Variable-sized CSR API message
} CSR_WAIT_BLOCK, *PCSR_WAIT_BLOCK;
NTSTATUS
(NTAPI *PCSR_API_ROUTINE)(
IN OUT PCSR_API_MESSAGE ApiMessage,
- OUT PULONG Reply
+ IN OUT PCSR_REPLY_CODE ReplyCode OPTIONAL
);
-#define CSR_API(n) NTSTATUS NTAPI n( \
- IN OUT PCSR_API_MESSAGE ApiMessage, \
- OUT PULONG Reply)
- // IN OUT PCSR_REPLY_STATUS ReplyStatus)
+#define CSR_API(n) \
+ NTSTATUS NTAPI n(IN OUT PCSR_API_MESSAGE ApiMessage, \
+ IN OUT PCSR_REPLY_CODE ReplyCode OPTIONAL)
typedef
NTSTATUS
} CSR_SERVER_DLL, *PCSR_SERVER_DLL;
-/* FUNCTION TYPES *************************************************************/
-
typedef
NTSTATUS
(NTAPI *PCSR_SERVER_DLL_INIT_CALLBACK)(IN PCSR_SERVER_DLL LoadedServerDll);
-#define CSR_SERVER_DLL_INIT(n) NTSTATUS NTAPI n(IN PCSR_SERVER_DLL LoadedServerDll)
+#define CSR_SERVER_DLL_INIT(n) \
+ NTSTATUS NTAPI n(IN PCSR_SERVER_DLL LoadedServerDll)
/* PROTOTYPES ****************************************************************/
NTAPI
CsrCreateThread(IN PCSR_PROCESS CsrProcess,
IN HANDLE hThread,
- IN PCLIENT_ID ClientId);
+ IN PCLIENT_ID ClientId,
+ IN BOOLEAN HaveClient);
BOOLEAN
NTAPI
NTAPI
CsrValidateMessageBuffer(IN PCSR_API_MESSAGE ApiMessage,
IN PVOID *Buffer,
- IN ULONG ArgumentSize,
- IN ULONG ArgumentCount);
+ IN ULONG ElementCount,
+ IN ULONG ElementSize);
BOOLEAN
NTAPI