summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/ntcsrsrv.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/sdk/inc/ntcsrsrv.h568
1 files changed, 568 insertions, 0 deletions
diff --git a/public/sdk/inc/ntcsrsrv.h b/public/sdk/inc/ntcsrsrv.h
new file mode 100644
index 000000000..38408088b
--- /dev/null
+++ b/public/sdk/inc/ntcsrsrv.h
@@ -0,0 +1,568 @@
+/*++ BUILD Version: 0002 // Increment this if a change has global effects
+
+Copyright (c) 1990-1993 Microsoft Corporation
+
+Module Name:
+
+ ntcsrsrv.h
+
+Abstract:
+
+ This module defines the public interfaces of the Server portion of
+ the Client-Server Runtime (Csr) Subsystem.
+
+Author:
+
+ Steve Wood (stevewo) 09-Oct-1990
+
+Revision History:
+
+--*/
+
+#ifndef _NTCSRSRVAPI_
+#define _NTCSRSRVAPI_
+
+//
+// Define API decoration for direct importing system DLL references.
+//
+
+#if !defined(_CSRSRV_)
+#define NTCSRAPI DECLSPEC_IMPORT
+#else
+#define NTCSRAPI
+#endif
+
+#include "ntcsrmsg.h"
+
+//
+// NT Session structure allocated in the server context for each new NT
+// session that is a client of the server.
+//
+
+typedef struct _CSR_NT_SESSION {
+ LIST_ENTRY SessionLink;
+ ULONG SessionId;
+ ULONG ReferenceCount;
+ STRING RootDirectory;
+} CSR_NT_SESSION, *PCSR_NT_SESSION;
+
+//
+// Per Thread data structure allocated in the server context for each new
+// client thread that is allowed to communicate with the server.
+//
+
+#define CSR_ALERTABLE_THREAD 0x00000001
+#define CSR_THREAD_TERMINATING 0x00000002
+#define CSR_THREAD_DESTROYED 0x00000004
+
+typedef struct _CSR_THREAD {
+ LARGE_INTEGER CreateTime;
+ LIST_ENTRY Link;
+ LIST_ENTRY HashLinks;
+ CLIENT_ID ClientId;
+
+ struct _CSR_PROCESS *Process;
+ struct _CSR_WAIT_BLOCK *WaitBlock;
+ HANDLE ThreadHandle;
+ ULONG Flags;
+ ULONG ReferenceCount;
+
+ //
+ // deadlock detection aids
+ //
+
+ NTSTATUS ShutDownStatus;
+ HANDLE ServerId;
+
+ ULONG ImpersonateCount;
+
+ PVOID ServerDllPerThreadData[ 1 ]; // Variable length array
+} CSR_THREAD, *PCSR_THREAD;
+
+
+//
+// Per Process data structure allocated in the server context for each new
+// client process that successfully connects to the server.
+//
+
+//
+// 0x00000010 -> 0x000000x0 are used in ntcsrmsg.h
+//
+
+#define CSR_DEBUG_THIS_PROCESS 0x00000001
+#define CSR_DEBUG_PROCESS_TREE 0x00000002
+#define CSR_DEBUG_WIN32SERVER 0x00000004
+
+#define CSR_CREATE_PROCESS_GROUP 0x00000100
+#define CSR_PROCESS_DESTROYED 0x00000200
+#define CSR_PROCESS_LASTTHREADOK 0x00000400
+#define CSR_PROCESS_CONSOLEAPP 0x00000800
+#define CSR_PROCESS_TERMINATED 0x00001000
+
+//
+// Flags defines
+//
+#define CSR_PROCESS_TERMINATING 1
+#define CSR_PROCESS_SHUTDOWNSKIP 2
+
+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;
+ PCH ClientViewBase;
+ PCH ClientViewBounds;
+ HANDLE ProcessHandle;
+ ULONG SequenceNumber;
+ ULONG Flags;
+ ULONG DebugFlags;
+ CLIENT_ID DebugUserInterface;
+
+ ULONG ReferenceCount;
+ ULONG ProcessGroupId;
+ ULONG ProcessGroupSequence;
+
+ ULONG fVDM;
+
+ ULONG ThreadCount;
+
+ UCHAR PriorityClass;
+ UCHAR Spare0;
+ UCHAR Spare1;
+ UCHAR Spare2;
+ ULONG Spare3;
+ ULONG ShutdownLevel;
+ ULONG ShutdownFlags;
+ PVOID ServerDllPerProcessData[ 1 ]; // Variable length array
+} CSR_PROCESS, *PCSR_PROCESS;
+
+
+//
+// All exported API calls define the same interface to the Server Request
+// loop. The return value is any arbritrary 32-bit value, which will be
+// be returned in the ReturnValue field of the reply message.
+//
+
+typedef enum _CSR_REPLY_STATUS {
+ CsrReplyImmediate,
+ CsrReplyPending,
+ CsrClientDied
+} CSR_REPLY_STATUS, *PCSR_REPLY_STATUS;
+
+typedef
+ULONG
+(*PCSR_API_ROUTINE)(
+ IN OUT PCSR_API_MSG ReplyMsg,
+ OUT PCSR_REPLY_STATUS ReplyStatus
+ );
+
+typedef
+ULONG
+(*PCSR_1P_API_ROUTINE)(
+ IN OUT PCSR_API_MSG ReplyMsg
+ );
+
+typedef
+ULONG
+(*PCSR_API_DISPATCH_ROUTINE)(
+ IN OUT PCSR_API_MSG ReplyMsg,
+ IN ULONG ApiIndex
+ );
+
+#define CSR_SERVER_QUERYCLIENTTHREAD() \
+ ((PCSR_THREAD)(NtCurrentTeb()->CsrClientThread))
+
+
+//
+// Server data structure allocated for each Server DLL loaded into the
+// context of the server process.
+//
+
+typedef
+NTSTATUS
+(*PCSR_SERVER_CONNECT_ROUTINE)(
+ IN PCSR_PROCESS Process,
+ IN OUT PVOID ConnectionInformation,
+ IN OUT PULONG ConnectionInformationLength
+ );
+
+typedef
+VOID
+(*PCSR_SERVER_DISCONNECT_ROUTINE)(
+ IN PCSR_PROCESS Process
+ );
+
+typedef
+NTSTATUS
+(*PCSR_SERVER_ADDPROCESS_ROUTINE)(
+ IN PCSR_PROCESS ParentProcess,
+ IN PCSR_PROCESS Process
+ );
+
+typedef
+NTSTATUS
+(*PCSR_SERVER_ADDTHREAD_ROUTINE)(
+ IN PCSR_THREAD t
+ );
+
+typedef
+NTSTATUS
+(*PCSR_SERVER_DELETETHREAD_ROUTINE)(
+ IN PCSR_THREAD t
+ );
+
+typedef
+NTSTATUS
+(*PCSR_SERVER_INITTHREAD_ROUTINE)();
+
+typedef
+VOID
+(*PCSR_SERVER_EXCEPTION_ROUTINE)(
+ IN PEXCEPTION_POINTERS ExceptionPointers,
+ IN BOOLEAN FirstPass
+ );
+
+typedef
+VOID
+(*PCSR_SERVER_HARDERROR_ROUTINE)(
+ IN PCSR_THREAD Thread,
+ IN PHARDERROR_MSG HardErrorMsg
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrServerInitialization(
+ IN ULONG argc,
+ IN PCH argv[]
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrCallServerFromServer(
+ PCSR_API_MSG ReceiveMsg,
+ PCSR_API_MSG ReplyMsg
+ );
+
+//
+// ShutdownProcessRoutine return values
+//
+
+#define SHUTDOWN_KNOWN_PROCESS 1
+#define SHUTDOWN_UNKNOWN_PROCESS 2
+#define SHUTDOWN_CANCEL 3
+
+//
+// Private ShutdownFlags flag
+//
+#define SHUTDOWN_SYSTEMCONTEXT 0x00000004
+#define SHUTDOWN_OTHERCONTEXT 0x00000008
+
+typedef
+ULONG
+(*PCSR_SERVER_SHUTDOWNPROCESS_ROUTINE)(
+ IN PCSR_PROCESS Process,
+ IN ULONG Flags,
+ IN BOOLEAN fFirstPass
+ );
+
+NTCSRAPI
+ULONG
+NTAPI
+CsrComputePriorityClass(
+ IN PCSR_PROCESS Process
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrShutdownProcesses(
+ PLUID LuidCaller,
+ ULONG Flags
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrGetProcessLuid(
+ HANDLE ProcessHandle,
+ PLUID LuidProcess
+ );
+
+typedef struct _CSR_SERVER_DLL {
+ ULONG Length;
+ HANDLE CsrInitializationEvent;
+ STRING ModuleName;
+ HANDLE ModuleHandle;
+ ULONG ServerDllIndex;
+ ULONG ServerDllConnectInfoLength;
+ ULONG ApiNumberBase;
+ ULONG MaxApiNumber;
+ union {
+ PCSR_API_ROUTINE *ApiDispatchTable;
+ PCSR_1P_API_ROUTINE *QuickApiDispatchTable;
+ };
+ PBOOLEAN ApiServerValidTable;
+ PSZ *ApiNameTable;
+ ULONG PerProcessDataLength;
+ ULONG PerThreadDataLength;
+ PCSR_SERVER_CONNECT_ROUTINE ConnectRoutine;
+ PCSR_SERVER_DISCONNECT_ROUTINE DisconnectRoutine;
+ PCSR_SERVER_ADDTHREAD_ROUTINE AddThreadRoutine;
+ PCSR_SERVER_DELETETHREAD_ROUTINE DeleteThreadRoutine;
+ PCSR_SERVER_INITTHREAD_ROUTINE InitThreadRoutine;
+ PCSR_SERVER_EXCEPTION_ROUTINE ExceptionRoutine;
+ PCSR_SERVER_HARDERROR_ROUTINE HardErrorRoutine;
+ PVOID SharedStaticServerData;
+ PCSR_SERVER_ADDPROCESS_ROUTINE AddProcessRoutine;
+ PCSR_SERVER_SHUTDOWNPROCESS_ROUTINE ShutdownProcessRoutine;
+ PCSR_API_DISPATCH_ROUTINE ApiDispatchRoutine;
+} CSR_SERVER_DLL, *PCSR_SERVER_DLL;
+
+typedef
+NTSTATUS
+(*PCSR_SERVER_DLL_INIT_ROUTINE)(
+ IN PCSR_SERVER_DLL LoadedServerDll
+ );
+
+typedef
+VOID
+(*PCSR_ATTACH_COMPLETE_ROUTINE)(
+ VOID
+ );
+
+NTCSRAPI
+VOID
+NTAPI
+CsrReferenceThread(
+ PCSR_THREAD t
+ );
+
+NTCSRAPI
+VOID
+NTAPI
+CsrDereferenceThread(
+ PCSR_THREAD t
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrCreateProcess(
+ IN HANDLE ProcessHandle,
+ IN HANDLE ThreadHandle,
+ IN PCLIENT_ID ClientId,
+ IN PCSR_NT_SESSION Session,
+ IN ULONG DebugFlags,
+ IN PCLIENT_ID DebugUserInterface OPTIONAL
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrDebugProcess(
+ IN ULONG TargetProcessId,
+ IN PCLIENT_ID DebugUserInterface,
+ IN PCSR_ATTACH_COMPLETE_ROUTINE AttachCompleteRoutine
+ );
+
+NTCSRAPI
+VOID
+NTAPI
+CsrDereferenceProcess(
+ PCSR_PROCESS p
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrDestroyProcess(
+ IN PCLIENT_ID ClientId,
+ IN NTSTATUS ExitStatus
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrLockProcessByClientId(
+ IN HANDLE UniqueProcessId,
+ OUT PCSR_PROCESS *Process
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrUnlockProcess(
+ IN PCSR_PROCESS Process
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrLockThreadByClientId(
+ IN HANDLE UniqueThreadId,
+ OUT PCSR_THREAD *Thread
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrUnlockThread(
+ IN PCSR_THREAD Thread
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrCreateThread(
+ IN PCSR_PROCESS Process,
+ IN HANDLE ThreadHandle,
+ IN PCLIENT_ID ClientId
+ );
+
+NTCSRAPI
+PCSR_THREAD
+NTAPI
+CsrLocateThreadInProcess(
+ IN PCSR_PROCESS Process,
+ IN PCLIENT_ID ClientId
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrCreateRemoteThread(
+ IN HANDLE ThreadHandle,
+ IN PCLIENT_ID ClientId
+ );
+
+NTCSRAPI
+NTSTATUS
+NTAPI
+CsrDestroyThread(
+ IN PCLIENT_ID ClientId
+ );
+
+//
+// WaitFlags
+//
+
+typedef
+BOOLEAN
+(*CSR_WAIT_ROUTINE)(
+ IN PLIST_ENTRY WaitQueue,
+ IN PCSR_THREAD WaitingThread,
+ IN PCSR_API_MSG WaitReplyMessage,
+ IN PVOID WaitParameter,
+ IN PVOID SatisfyParameter1,
+ IN PVOID SatisfyParameter2,
+ IN ULONG WaitFlags
+ );
+
+typedef struct _CSR_WAIT_BLOCK {
+ ULONG Length;
+ LIST_ENTRY Link;
+ LIST_ENTRY UserLink;
+ PVOID WaitParameter;
+ PCSR_THREAD WaitingThread;
+ CSR_WAIT_ROUTINE WaitRoutine;
+ CSR_API_MSG WaitReplyMessage;
+} CSR_WAIT_BLOCK, *PCSR_WAIT_BLOCK;
+
+NTCSRAPI
+BOOLEAN
+NTAPI
+CsrCreateWait(
+ IN PLIST_ENTRY WaitQueue,
+ IN CSR_WAIT_ROUTINE WaitRoutine,
+ IN PCSR_THREAD WaitingThread,
+ IN OUT PCSR_API_MSG WaitReplyMessage,
+ IN PVOID WaitParameter,
+ IN PLIST_ENTRY UserLinkListHead OPTIONAL
+ );
+
+NTCSRAPI
+VOID
+NTAPI
+CsrDereferenceWait(
+ IN PLIST_ENTRY WaitQueue
+ );
+
+NTCSRAPI
+BOOLEAN
+NTAPI
+CsrNotifyWait(
+ IN PLIST_ENTRY WaitQueue,
+ IN BOOLEAN SatisfyAll,
+ IN PVOID SatisfyParameter1,
+ IN PVOID SatisfyParameter2
+ );
+
+NTCSRAPI
+VOID
+NTAPI
+CsrDestroyWait(
+ IN PCSR_WAIT_BLOCK WaitBlock
+ );
+
+NTCSRAPI
+PVOID
+NTAPI
+CsrAddStaticServerThread(
+ IN HANDLE ThreadHandle,
+ IN PCLIENT_ID ClientId,
+ IN ULONG Flags
+ );
+
+NTCSRAPI
+PCSR_THREAD
+NTAPI
+CsrConnectToUser(
+ VOID
+ );
+
+NTCSRAPI
+BOOLEAN
+NTAPI
+CsrImpersonateClient(
+ IN PCSR_THREAD Thread
+ );
+
+NTCSRAPI
+BOOLEAN
+NTAPI
+CsrRevertToSelf(
+ VOID
+ );
+
+NTCSRAPI
+VOID
+NTAPI
+CsrSetForegroundPriority(
+ IN PCSR_PROCESS Process
+ );
+
+NTCSRAPI
+VOID
+NTAPI
+CsrSetBackgroundPriority(
+ IN PCSR_PROCESS Process
+ );
+
+NTCSRAPI
+EXCEPTION_DISPOSITION
+NTAPI
+CsrUnhandledExceptionFilter(
+ IN PEXCEPTION_POINTERS ExceptionInfo
+ );
+
+typedef struct _CSR_FAST_ANSI_OEM_TABLES {
+ char OemToAnsiTable[256];
+ char AnsiToOemTable[256];
+} CSR_FAST_ANSI_OEM_TABLES, *PCSR_FAST_ANSI_OEM_TABLES;
+
+#endif // _NTCSRSRVAPI_