diff options
Diffstat (limited to 'public/sdk/inc/ntcsrsrv.h')
-rw-r--r-- | public/sdk/inc/ntcsrsrv.h | 568 |
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_ |