ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

api.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.