Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenapi.h
Go to the documentation of this file.
00001 /* $Id: api.h 55718 2012-02-19 19:40:28Z ion $ 00002 * 00003 * COPYRIGHT: See COPYING in the top level directory 00004 * PROJECT: ReactOS system libraries 00005 * FILE: subsys/csrss/include/api.h 00006 * PURPOSE: CSRSS API interface 00007 */ 00008 00009 #pragma once 00010 00011 #define NTOS_MODE_USER 00012 #include <ndk/psfuncs.h> 00013 #include <ndk/rtlfuncs.h> 00014 00015 #include <csrss/csrss.h> 00016 00017 #define CSR_SRV_SERVER 0 00018 #define CSR_SERVER_DLL_MAX 4 00019 #define LOCK RtlEnterCriticalSection(&ProcessDataLock) 00020 #define UNLOCK RtlLeaveCriticalSection(&ProcessDataLock) 00021 #define CsrAcquireProcessLock() LOCK 00022 #define CsrReleaseProcessLock() UNLOCK 00023 #define ProcessStructureListLocked() \ 00024 (ProcessDataLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread) 00025 00026 #define CsrAcquireWaitLock() \ 00027 RtlEnterCriticalSection(&CsrWaitListsLock); 00028 00029 #define CsrReleaseWaitLock() \ 00030 RtlLeaveCriticalSection(&CsrWaitListsLock); 00031 00032 #define CsrAcquireNtSessionLock() \ 00033 RtlEnterCriticalSection(&CsrNtSessionLock); 00034 00035 #define CsrReleaseNtSessionLock() \ 00036 RtlLeaveCriticalSection(&CsrNtSessionLock); 00037 00038 typedef enum _CSR_THREAD_FLAGS 00039 { 00040 CsrThreadAltertable = 0x1, 00041 CsrThreadInTermination = 0x2, 00042 CsrThreadTerminated = 0x4, 00043 CsrThreadIsServerThread = 0x10 00044 } CSR_THREAD_FLAGS, *PCSR_THREAD_FLAGS; 00045 00046 typedef enum _SHUTDOWN_RESULT 00047 { 00048 CsrShutdownCsrProcess = 1, 00049 CsrShutdownNonCsrProcess, 00050 CsrShutdownCancelled 00051 } SHUTDOWN_RESULT, *PSHUTDOWN_RESULT; 00052 00053 typedef enum _CSR_SHUTDOWN_FLAGS 00054 { 00055 CsrShutdownSystem = 4, 00056 CsrShutdownOther = 8 00057 } CSR_SHUTDOWN_FLAGS, *PCSR_SHUTDOWN_FLAGS; 00058 00059 typedef enum _CSR_DEBUG_FLAGS 00060 { 00061 CsrDebugOnlyThisProcess = 1, 00062 CsrDebugProcessChildren = 2 00063 } CSR_PROCESS_DEBUG_FLAGS, *PCSR_PROCESS_DEBUG_FLAGS; 00064 00065 typedef enum _CSR_PROCESS_FLAGS 00066 { 00067 CsrProcessTerminating = 0x1, 00068 CsrProcessSkipShutdown = 0x2, 00069 CsrProcessNormalPriority = 0x10, 00070 CsrProcessIdlePriority = 0x20, 00071 CsrProcessHighPriority = 0x40, 00072 CsrProcessRealtimePriority = 0x80, 00073 CsrProcessCreateNewGroup = 0x100, 00074 CsrProcessTerminated = 0x200, 00075 CsrProcessLastThreadTerminated = 0x400, 00076 CsrProcessIsConsoleApp = 0x800 00077 } CSR_PROCESS_FLAGS, *PCSR_PROCESS_FLAGS; 00078 00079 #define CsrProcessPriorityFlags (CsrProcessNormalPriority | \ 00080 CsrProcessIdlePriority | \ 00081 CsrProcessHighPriority | \ 00082 CsrProcessRealtimePriority) 00083 00084 typedef struct _CSRSS_CON_PROCESS_DATA 00085 { 00086 HANDLE ConsoleEvent; 00087 struct tagCSRSS_CONSOLE *Console; 00088 struct tagCSRSS_CONSOLE *ParentConsole; 00089 BOOL bInheritHandles; 00090 RTL_CRITICAL_SECTION HandleTableLock; 00091 ULONG HandleTableSize; 00092 struct _CSRSS_HANDLE *HandleTable; 00093 PCONTROLDISPATCHER CtrlDispatcher; 00094 LIST_ENTRY ConsoleLink; 00095 } CSRSS_CON_PROCESS_DATA, *PCSRSS_CON_PROCESS_DATA; 00096 00097 typedef struct _CSR_NT_SESSION 00098 { 00099 ULONG ReferenceCount; 00100 LIST_ENTRY SessionLink; 00101 ULONG SessionId; 00102 } CSR_NT_SESSION, *PCSR_NT_SESSION; 00103 00104 typedef struct _CSR_PROCESS 00105 { 00106 CLIENT_ID ClientId; 00107 LIST_ENTRY ListLink; 00108 LIST_ENTRY ThreadList; 00109 struct _CSR_PROCESS *Parent; 00110 PCSR_NT_SESSION NtSession; 00111 ULONG ExpectedVersion; 00112 HANDLE ClientPort; 00113 ULONG_PTR ClientViewBase; 00114 ULONG_PTR ClientViewBounds; 00115 HANDLE ProcessHandle; 00116 ULONG SequenceNumber; 00117 ULONG Flags; 00118 ULONG DebugFlags; 00119 CLIENT_ID DebugCid; 00120 ULONG ReferenceCount; 00121 ULONG ProcessGroupId; 00122 ULONG ProcessGroupSequence; 00123 ULONG fVDM; 00124 ULONG ThreadCount; 00125 ULONG PriorityClass; 00126 ULONG Reserved; 00127 ULONG ShutdownLevel; 00128 ULONG ShutdownFlags; 00129 // PVOID ServerData[ANYSIZE_ARRAY]; 00130 CSRSS_CON_PROCESS_DATA; 00131 } CSR_PROCESS, *PCSR_PROCESS; 00132 00133 typedef struct _CSR_THREAD 00134 { 00135 LARGE_INTEGER CreateTime; 00136 LIST_ENTRY Link; 00137 LIST_ENTRY HashLinks; 00138 CLIENT_ID ClientId; 00139 PCSR_PROCESS Process; 00140 struct _CSR_WAIT_BLOCK *WaitBlock; 00141 HANDLE ThreadHandle; 00142 ULONG Flags; 00143 ULONG ReferenceCount; 00144 ULONG ImpersonationCount; 00145 } CSR_THREAD, *PCSR_THREAD; 00146 00147 typedef 00148 BOOLEAN 00149 (*CSR_WAIT_FUNCTION)( 00150 IN PLIST_ENTRY WaitList, 00151 IN PCSR_THREAD WaitThread, 00152 IN PCSR_API_MESSAGE WaitApiMessage, 00153 IN PVOID WaitContext, 00154 IN PVOID WaitArgument1, 00155 IN PVOID WaitArgument2, 00156 IN ULONG WaitFlags 00157 ); 00158 00159 typedef struct _CSR_WAIT_BLOCK 00160 { 00161 ULONG Size; 00162 LIST_ENTRY WaitList; 00163 LIST_ENTRY UserWaitList; 00164 PVOID WaitContext; 00165 PCSR_THREAD WaitThread; 00166 CSR_WAIT_FUNCTION WaitFunction; 00167 CSR_API_MESSAGE WaitApiMessage; 00168 } CSR_WAIT_BLOCK, *PCSR_WAIT_BLOCK; 00169 00170 typedef 00171 NTSTATUS 00172 (NTAPI *PCSR_CONNECT_CALLBACK)( 00173 IN PCSR_PROCESS CsrProcess, 00174 IN OUT PVOID ConnectionInfo, 00175 IN OUT PULONG ConnectionInfoLength 00176 ); 00177 00178 typedef 00179 VOID 00180 (NTAPI *PCSR_DISCONNECT_CALLBACK)(IN PCSR_PROCESS CsrProcess); 00181 00182 typedef 00183 NTSTATUS 00184 (NTAPI *PCSR_NEWPROCESS_CALLBACK)( 00185 IN PCSR_PROCESS Parent, 00186 IN PCSR_PROCESS CsrProcess 00187 ); 00188 00189 typedef 00190 VOID 00191 (NTAPI *PCSR_HARDERROR_CALLBACK)( 00192 IN PCSR_THREAD CsrThread, 00193 IN PHARDERROR_MSG HardErrorMessage 00194 ); 00195 00196 typedef 00197 ULONG 00198 (NTAPI *PCSR_SHUTDOWNPROCESS_CALLBACK)( 00199 IN PCSR_PROCESS CsrProcess, 00200 IN ULONG Flags, 00201 IN BOOLEAN FirstPhase 00202 ); 00203 00204 typedef 00205 NTSTATUS 00206 (NTAPI *PCSR_API_ROUTINE)( 00207 IN OUT PCSR_API_MESSAGE ApiMessage, 00208 IN OUT PULONG Reply 00209 ); 00210 00211 typedef struct _CSR_SERVER_DLL 00212 { 00213 ULONG Length; 00214 HANDLE Event; 00215 ANSI_STRING Name; 00216 HANDLE ServerHandle; 00217 ULONG ServerId; 00218 ULONG Unknown; 00219 ULONG ApiBase; 00220 ULONG HighestApiSupported; 00221 PCSR_API_ROUTINE *DispatchTable; 00222 PBOOLEAN ValidTable; 00223 PCHAR *NameTable; 00224 ULONG SizeOfProcessData; 00225 PCSR_CONNECT_CALLBACK ConnectCallback; 00226 PCSR_DISCONNECT_CALLBACK DisconnectCallback; 00227 PCSR_HARDERROR_CALLBACK HardErrorCallback; 00228 PVOID SharedSection; 00229 PCSR_NEWPROCESS_CALLBACK NewProcessCallback; 00230 PCSR_SHUTDOWNPROCESS_CALLBACK ShutdownProcessCallback; 00231 ULONG Unknown2[3]; 00232 } CSR_SERVER_DLL, *PCSR_SERVER_DLL; 00233 00234 typedef 00235 NTSTATUS 00236 (NTAPI *PCSR_SERVER_DLL_INIT_CALLBACK)(IN PCSR_SERVER_DLL ServerDll); 00237 00238 00239 typedef NTSTATUS (WINAPI *CSRSS_API_PROC)(PCSR_PROCESS ProcessData, 00240 PCSR_API_MESSAGE Request); 00241 00242 typedef struct _CSRSS_API_DEFINITION 00243 { 00244 ULONG Type; 00245 ULONG MinRequestSize; 00246 CSRSS_API_PROC Handler; 00247 } CSRSS_API_DEFINITION, *PCSRSS_API_DEFINITION; 00248 00249 #define CSRSS_DEFINE_API(Func, Handler) \ 00250 { Func, sizeof(CSRSS_##Func), Handler } 00251 00252 typedef struct _CSRSS_LISTEN_DATA 00253 { 00254 HANDLE ApiPortHandle; 00255 ULONG ApiDefinitionsCount; 00256 PCSRSS_API_DEFINITION *ApiDefinitions; 00257 } CSRSS_LISTEN_DATA, *PCSRSS_LISTEN_DATA; 00258 00259 #define CSR_API(n) NTSTATUS WINAPI n (\ 00260 PCSR_PROCESS ProcessData,\ 00261 PCSR_API_MESSAGE Request) 00262 00263 /* init.c */ 00264 extern HANDLE hBootstrapOk; 00265 NTSTATUS NTAPI CsrServerInitialization(ULONG ArgumentCount, PCHAR Arguments[]); 00266 00267 /* api/process.c */ 00268 CSR_API(CsrConnectProcess); 00269 CSR_API(CsrSrvCreateProcess); 00270 CSR_API(CsrTerminateProcess); 00271 CSR_API(CsrSrvCreateThread); 00272 CSR_API(CsrGetShutdownParameters); 00273 CSR_API(CsrSetShutdownParameters); 00274 00275 VOID 00276 NTAPI 00277 CsrSetBackgroundPriority(IN PCSR_PROCESS CsrProcess); 00278 00279 PCSR_THREAD 00280 NTAPI 00281 CsrAllocateThread(IN PCSR_PROCESS CsrProcess); 00282 00283 PCSR_PROCESS 00284 NTAPI 00285 CsrAllocateProcess(VOID); 00286 00287 VOID 00288 NTAPI 00289 CsrDeallocateProcess(IN PCSR_PROCESS CsrProcess); 00290 00291 VOID 00292 NTAPI 00293 CsrRemoveProcess(IN PCSR_PROCESS CsrProcess); 00294 00295 VOID 00296 NTAPI 00297 CsrDereferenceThread(IN PCSR_THREAD CsrThread); 00298 00299 VOID 00300 NTAPI 00301 CsrInsertProcess(IN PCSR_PROCESS Parent OPTIONAL, 00302 IN PCSR_PROCESS CurrentProcess OPTIONAL, 00303 IN PCSR_PROCESS CsrProcess); 00304 00305 00306 /* api/wapi.c */ 00307 NTSTATUS FASTCALL CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions); 00308 VOID FASTCALL CsrApiCallHandler(PCSR_PROCESS ProcessData, 00309 PCSR_API_MESSAGE Request); 00310 VOID WINAPI CsrSbApiRequestThread (PVOID PortHandle); 00311 VOID NTAPI ClientConnectionThread(HANDLE ServerPort); 00312 00313 VOID 00314 NTAPI 00315 CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage); 00316 00317 extern HANDLE CsrApiPort; 00318 extern HANDLE CsrSmApiPort; 00319 extern HANDLE CsrSbApiPort; 00320 extern LIST_ENTRY CsrThreadHashTable[256]; 00321 extern PCSR_PROCESS CsrRootProcess; 00322 extern RTL_CRITICAL_SECTION ProcessDataLock, CsrWaitListsLock; 00323 extern UNICODE_STRING CsrDirectoryName; 00324 extern ULONG CsrDebug; 00325 extern ULONG CsrTotalPerProcessDataLength; 00326 extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo; 00327 extern PVOID CsrSrvSharedSectionHeap; 00328 extern PVOID *CsrSrvSharedStaticServerData; 00329 extern HANDLE CsrInitializationEvent; 00330 extern PCSR_SERVER_DLL CsrLoadedServerDll[CSR_SERVER_DLL_MAX]; 00331 extern ULONG CsrMaxApiRequestThreads; 00332 00333 NTSTATUS 00334 NTAPI 00335 CsrApiPortInitialize(VOID); 00336 00337 NTSTATUS 00338 NTAPI 00339 CsrCreateProcess(IN HANDLE hProcess, 00340 IN HANDLE hThread, 00341 IN PCLIENT_ID ClientId, 00342 IN PCSR_NT_SESSION NtSession, 00343 IN ULONG Flags, 00344 IN PCLIENT_ID DebugCid); 00345 00346 BOOLEAN 00347 NTAPI 00348 ProtectHandle(IN HANDLE ObjectHandle); 00349 00350 VOID 00351 NTAPI 00352 CsrInsertThread(IN PCSR_PROCESS Process, 00353 IN PCSR_THREAD Thread); 00354 00355 VOID 00356 NTAPI 00357 CsrLockedReferenceThread(IN PCSR_THREAD CsrThread); 00358 00359 /* api/process.c */ 00360 typedef NTSTATUS (WINAPI *CSRSS_ENUM_PROCESS_PROC)(PCSR_PROCESS ProcessData, 00361 PVOID Context); 00362 NTSTATUS WINAPI CsrInitializeProcessStructure(VOID); 00363 00364 NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc, PVOID Context); 00365 PCSR_THREAD NTAPI CsrAddStaticServerThread(IN HANDLE hThread, IN PCLIENT_ID ClientId, IN ULONG ThreadFlags); 00366 PCSR_THREAD NTAPI CsrLocateThreadInProcess(IN PCSR_PROCESS CsrProcess OPTIONAL, IN PCLIENT_ID Cid); 00367 PCSR_THREAD NTAPI CsrLocateThreadByClientId(OUT PCSR_PROCESS *Process OPTIONAL, IN PCLIENT_ID ClientId); 00368 NTSTATUS NTAPI CsrLockProcessByClientId(IN HANDLE Pid, OUT PCSR_PROCESS *CsrProcess OPTIONAL); 00369 NTSTATUS NTAPI CsrCreateThread(IN PCSR_PROCESS CsrProcess, IN HANDLE hThread, IN PCLIENT_ID ClientId); 00370 NTSTATUS NTAPI CsrUnlockProcess(IN PCSR_PROCESS CsrProcess); 00371 00372 //hack 00373 VOID NTAPI CsrThreadRefcountZero(IN PCSR_THREAD CsrThread); 00374 00375 NTSTATUS 00376 NTAPI 00377 CsrInitializeNtSessionList(VOID); 00378 00379 NTSTATUS 00380 NTAPI 00381 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL, 00382 OUT PCSR_CONNECTION_INFO ConnectInfo); 00383 00384 NTSTATUS 00385 NTAPI 00386 CsrSrvCreateSharedSection(IN PCHAR ParameterValue); 00387 00388 NTSTATUS 00389 NTAPI 00390 CsrSrvClientConnect( 00391 IN OUT PCSR_API_MESSAGE ApiMessage, 00392 IN OUT PULONG Reply 00393 ); 00394 00395 NTSTATUS 00396 NTAPI 00397 CsrSrvUnusedFunction( 00398 IN OUT PCSR_API_MESSAGE ApiMessage, 00399 IN OUT PULONG Reply 00400 ); 00401 00402 NTSTATUS 00403 NTAPI 00404 CsrSrvIdentifyAlertableThread( 00405 IN OUT PCSR_API_MESSAGE ApiMessage, 00406 IN OUT PULONG Reply 00407 ); 00408 00409 NTSTATUS 00410 NTAPI 00411 CsrSrvSetPriorityClass( 00412 IN OUT PCSR_API_MESSAGE ApiMessage, 00413 IN OUT PULONG Reply 00414 ); 00415 00416 NTSTATUS 00417 NTAPI 00418 CsrDestroyProcess(IN PCLIENT_ID Cid, 00419 IN NTSTATUS ExitStatus); 00420 00421 NTSTATUS 00422 NTAPI 00423 CsrDestroyThread(IN PCLIENT_ID Cid); 00424 00425 VOID 00426 NTAPI 00427 CsrLockedDereferenceThread(IN PCSR_THREAD CsrThread); 00428 00429 BOOLEAN 00430 NTAPI 00431 CsrNotifyWaitBlock(IN PCSR_WAIT_BLOCK WaitBlock, 00432 IN PLIST_ENTRY WaitList, 00433 IN PVOID WaitArgument1, 00434 IN PVOID WaitArgument2, 00435 IN ULONG WaitFlags, 00436 IN BOOLEAN DereferenceThread); 00437 00438 VOID 00439 NTAPI 00440 CsrReferenceNtSession(IN PCSR_NT_SESSION Session); 00441 00442 LONG 00443 NTAPI 00444 CsrUnhandledExceptionFilter(IN PEXCEPTION_POINTERS ExceptionInfo); 00445 00446 VOID 00447 NTAPI 00448 CsrDereferenceNtSession(IN PCSR_NT_SESSION Session, 00449 IN NTSTATUS ExitStatus); 00450 00451 VOID 00452 NTAPI 00453 CsrLockedDereferenceProcess(PCSR_PROCESS CsrProcess); 00454 00455 VOID 00456 NTAPI 00457 CsrDereferenceProcess(IN PCSR_PROCESS CsrProcess); 00458 00459 NTSTATUS 00460 NTAPI 00461 CsrLoadServerDll(IN PCHAR DllString, 00462 IN PCHAR EntryPoint OPTIONAL, 00463 IN ULONG ServerId); 00464 00465 /* api/user.c */ 00466 CSR_API(CsrRegisterServicesProcess); 00467 00468 /* EOF */ Generated on Sun May 27 2012 04:33:18 for ReactOS by
1.7.6.1
|