Author: ion
Date: Thu Feb 16 19:53:47 2012
New Revision: 55647
URL:
http://svn.reactos.org/svn/reactos?rev=55647&view=rev
Log:
[NTDLL/INCLUDE]: Rename the CSRSRV API Numbers not to conflict with the actual functions.
[CSRSRV]: Import server.c from CSRSRV2, and move the existing CsrSrv functions we had from
wapi.c to server.c (with the reactOS-specific hacks we had). The other CsrSrv* functions
are not yet used.
Added:
trunk/reactos/subsystems/win32/csrss/csrsrv/server.c
- copied, changed from r55585, trunk/reactos/subsystems/csr/csrsrv/server.c
Modified:
trunk/reactos/dll/ntdll/csr/api.c
trunk/reactos/dll/ntdll/csr/connect.c
trunk/reactos/include/reactos/subsys/csrss/csrss.h
trunk/reactos/subsystems/win32/csrss/csrsrv/CMakeLists.txt
trunk/reactos/subsystems/win32/csrss/csrsrv/api/wapi.c
trunk/reactos/subsystems/win32/csrss/csrsrv/csrsrv.rbuild
trunk/reactos/subsystems/win32/csrss/csrsrv/init.c
trunk/reactos/subsystems/win32/csrss/include/api.h
Modified: trunk/reactos/dll/ntdll/csr/api.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/ntdll/csr/api.c?rev=55…
==============================================================================
--- trunk/reactos/dll/ntdll/csr/api.c [iso-8859-1] (original)
+++ trunk/reactos/dll/ntdll/csr/api.c [iso-8859-1] Thu Feb 16 19:53:47 2012
@@ -48,7 +48,7 @@
/* Call it */
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL,
- CSR_MAKE_OPCODE(CsrSrvSetPriorityClass,
+ CSR_MAKE_OPCODE(CsrpSetPriorityClass,
CSR_SRV_SERVER),
sizeof(CSR_SET_PRIORITY_CLASS));
@@ -78,7 +78,7 @@
/* Call it */
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
NULL,
- CSR_MAKE_OPCODE(CsrSrvIdentifyAlertableThread,
+ CSR_MAKE_OPCODE(CsrpIdentifyAlertable,
CSR_SRV_SERVER),
sizeof(CSR_SET_PRIORITY_CLASS));
Modified: trunk/reactos/dll/ntdll/csr/connect.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/ntdll/csr/connect.c?re…
==============================================================================
--- trunk/reactos/dll/ntdll/csr/connect.c [iso-8859-1] (original)
+++ trunk/reactos/dll/ntdll/csr/connect.c [iso-8859-1] Thu Feb 16 19:53:47 2012
@@ -438,7 +438,7 @@
#if 0
Status = CsrClientCallServer(&ApiMessage,
CaptureBuffer,
- CSR_MAKE_OPCODE(CsrSrvClientConnect,
+ CSR_MAKE_OPCODE(CsrpClientConnect,
CSR_SRV_DLL),
sizeof(CSR_CLIENT_CONNECT));
#endif
Modified: trunk/reactos/include/reactos/subsys/csrss/csrss.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/subsys/csr…
==============================================================================
--- trunk/reactos/include/reactos/subsys/csrss/csrss.h [iso-8859-1] (original)
+++ trunk/reactos/include/reactos/subsys/csrss/csrss.h [iso-8859-1] Thu Feb 16 19:53:47
2012
@@ -864,9 +864,15 @@
/* Types used in the new CSR. Temporarly here for proper compile of NTDLL */
#define CSR_SRV_SERVER 0
-#define CsrSrvClientConnect 0
-#define CsrSrvIdentifyAlertableThread 3
-#define CsrSrvSetPriorityClass 4
+typedef enum _CSR_SRV_API_NUMBER
+{
+ CsrpClientConnect,
+ CsrpThreadConnect,
+ CsrpProfileControl,
+ CsrpIdentifyAlertable,
+ CsrpSetPriorityClass,
+ CsrpMaxApiNumber
+} CSR_SRV_API_NUMBER, *PCSR_SRV_API_NUMBER;
#define CSR_MAKE_OPCODE(s,m) ((s) << 16) | (m)
Modified: trunk/reactos/subsystems/win32/csrss/csrsrv/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/csrss/csr…
==============================================================================
--- trunk/reactos/subsystems/win32/csrss/csrsrv/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/csrss/csrsrv/CMakeLists.txt [iso-8859-1] Thu Feb 16
19:53:47 2012
@@ -13,6 +13,7 @@
init.c
wait.c
session.c
+ server.c
${CMAKE_CURRENT_BINARY_DIR}/csrsrv.def)
add_library(csrsrv SHARED ${SOURCE})
Modified: trunk/reactos/subsystems/win32/csrss/csrsrv/api/wapi.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/csrss/csr…
==============================================================================
--- trunk/reactos/subsystems/win32/csrss/csrsrv/api/wapi.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/csrss/csrsrv/api/wapi.c [iso-8859-1] Thu Feb 16
19:53:47 2012
@@ -111,197 +111,6 @@
/* Call the hard error handler in win32csr */
(VOID)CallHardError(ProcessData, Message);
-}
-
-PVOID CsrSrvSharedSectionHeap;
-PVOID CsrSrvSharedSectionBase;
-PVOID *CsrSrvSharedStaticServerData;
-ULONG CsrSrvSharedSectionSize;
-HANDLE CsrSrvSharedSection;
-
-/*++
- * @name CsrSrvCreateSharedSection
- *
- * The CsrSrvCreateSharedSection creates the Shared Section that all CSR Server
- * DLLs and Clients can use to share data.
- *
- * @param ParameterValue
- * Specially formatted string from our registry command-line which
- * specifies various arguments for the shared section.
- *
- * @return STATUS_SUCCESS in case of success, STATUS_UNSUCCESSFUL
- * othwerwise.
- *
- * @remarks None.
- *
- *--*/
-NTSTATUS
-NTAPI
-CsrSrvCreateSharedSection(IN PCHAR ParameterValue)
-{
- PCHAR SizeValue = ParameterValue;
- ULONG Size;
- NTSTATUS Status;
- LARGE_INTEGER SectionSize;
- ULONG ViewSize = 0;
- SYSTEM_BASIC_INFORMATION CsrNtSysInfo;
- PPEB Peb = NtCurrentPeb();
-
- /* ReactOS Hackssss */
- Status = NtQuerySystemInformation(SystemBasicInformation,
- &CsrNtSysInfo,
- sizeof(SYSTEM_BASIC_INFORMATION),
- NULL);
- ASSERT(NT_SUCCESS(Status));
-
- /* Find the first comma, and null terminate */
- while (*SizeValue)
- {
- if (*SizeValue == ',')
- {
- *SizeValue++ = '\0';
- break;
- }
- else
- {
- SizeValue++;
- }
- }
-
- /* Make sure it's valid */
- if (!*SizeValue) return STATUS_INVALID_PARAMETER;
-
- /* Convert it to an integer */
- Status = RtlCharToInteger(SizeValue, 0, &Size);
- if (!NT_SUCCESS(Status)) return Status;
-
- /* Multiply by 1024 entries and round to page size */
- CsrSrvSharedSectionSize = ROUND_UP(Size * 1024, CsrNtSysInfo.PageSize);
-
- /* Create the Secion */
- SectionSize.LowPart = CsrSrvSharedSectionSize;
- SectionSize.HighPart = 0;
- Status = NtCreateSection(&CsrSrvSharedSection,
- SECTION_ALL_ACCESS,
- NULL,
- &SectionSize,
- PAGE_EXECUTE_READWRITE,
- SEC_BASED | SEC_RESERVE,
- NULL);
- if (!NT_SUCCESS(Status)) return Status;
-
- /* Map the section */
- Status = NtMapViewOfSection(CsrSrvSharedSection,
- NtCurrentProcess(),
- &CsrSrvSharedSectionBase,
- 0,
- 0,
- NULL,
- &ViewSize,
- ViewUnmap,
- MEM_TOP_DOWN,
- PAGE_EXECUTE_READWRITE);
- if(!NT_SUCCESS(Status))
- {
- /* Fail */
- NtClose(CsrSrvSharedSection);
- return(Status);
- }
-
- /* FIXME: Write the value to registry */
-
- /* The Heap is the same place as the Base */
- CsrSrvSharedSectionHeap = CsrSrvSharedSectionBase;
-
- /* Create the heap */
- if (!(RtlCreateHeap(HEAP_ZERO_MEMORY,
- CsrSrvSharedSectionHeap,
- CsrSrvSharedSectionSize,
- PAGE_SIZE,
- 0,
- 0)))
- {
- /* Failure, unmap section and return */
- NtUnmapViewOfSection(NtCurrentProcess(),
- CsrSrvSharedSectionBase);
- NtClose(CsrSrvSharedSection);
- return STATUS_NO_MEMORY;
- }
-
- /* Now allocate space from the heap for the Shared Data */
- CsrSrvSharedStaticServerData = RtlAllocateHeap(CsrSrvSharedSectionHeap,
- 0,
- 4 * // HAX CSR_SERVER_DLL_MAX *
- sizeof(PVOID));
-
- /* Write the values to the PEB */
- Peb->ReadOnlySharedMemoryBase = CsrSrvSharedSectionBase;
- Peb->ReadOnlySharedMemoryHeap = CsrSrvSharedSectionHeap;
- Peb->ReadOnlyStaticServerData = CsrSrvSharedStaticServerData;
-
- /* Return */
- return STATUS_SUCCESS;
-}
-
-/*++
- * @name CsrSrvAttachSharedSection
- *
- * The CsrSrvAttachSharedSection maps the CSR Shared Section into a new
- * CSR Process' address space, and returns the pointers to the section
- * through the Connection Info structure.
- *
- * @param CsrProcess
- * Pointer to the CSR Process that is attempting a connection.
- *
- * @param ConnectInfo
- * Pointer to the CSR Connection Info structure for the incoming
- * connection.
- *
- * @return STATUS_SUCCESS in case of success, STATUS_UNSUCCESSFUL
- * othwerwise.
- *
- * @remarks None.
- *
- *--*/
-NTSTATUS
-NTAPI
-CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL,
- OUT PCSR_CONNECTION_INFO ConnectInfo)
-{
- NTSTATUS Status;
- ULONG ViewSize = 0;
-
- /* Check if we have a process */
- if (CsrProcess)
- {
- /* Map the section into this process */
- DPRINT("CSR Process Handle: %p. CSR Process: %p\n",
CsrProcess->ProcessHandle, CsrProcess);
- Status = NtMapViewOfSection(CsrSrvSharedSection,
- CsrProcess->ProcessHandle,
- &CsrSrvSharedSectionBase,
- 0,
- 0,
- NULL,
- &ViewSize,
- ViewUnmap,
- SEC_NO_CHANGE,
- PAGE_EXECUTE_READ);
- if (Status == STATUS_CONFLICTING_ADDRESSES)
- {
- /* I Think our csrss tries to connect to itself... */
- DPRINT1("Multiple mapping hack\n");
- Status = STATUS_SUCCESS;
- }
- if (!NT_SUCCESS(Status)) return Status;
- }
-
- /* Write the values in the Connection Info structure */
- ConnectInfo->SharedSectionBase = CsrSrvSharedSectionBase;
- ConnectInfo->SharedSectionHeap = CsrSrvSharedSectionHeap;
- ConnectInfo->SharedSectionData = CsrSrvSharedStaticServerData;
-
- /* Return success */
- return STATUS_SUCCESS;
}
/*++
Modified: trunk/reactos/subsystems/win32/csrss/csrsrv/csrsrv.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/csrss/csr…
==============================================================================
--- trunk/reactos/subsystems/win32/csrss/csrsrv/csrsrv.rbuild [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/csrss/csrsrv/csrsrv.rbuild [iso-8859-1] Thu Feb 16
19:53:47 2012
@@ -20,5 +20,6 @@
<file>init.c</file>
<file>wait.c</file>
<file>session.c</file>
+ <file>server.c</file>
<pch>srv.h</pch>
</module>
Modified: trunk/reactos/subsystems/win32/csrss/csrsrv/init.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/csrss/csr…
==============================================================================
--- trunk/reactos/subsystems/win32/csrss/csrsrv/init.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/csrss/csrsrv/init.c [iso-8859-1] Thu Feb 16 19:53:47
2012
@@ -181,10 +181,6 @@
VOID
WINAPI
BasepFakeStaticServerData(VOID);
-
-NTSTATUS
-NTAPI
-CsrSrvCreateSharedSection(IN PCHAR ParameterValue);
/*++
* @name CsrSetProcessSecurity
Copied: trunk/reactos/subsystems/win32/csrss/csrsrv/server.c (from r55585,
trunk/reactos/subsystems/csr/csrsrv/server.c)
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/csrss/csr…
==============================================================================
--- trunk/reactos/subsystems/csr/csrsrv/server.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/csrss/csrsrv/server.c [iso-8859-1] Thu Feb 16 19:53:47
2012
@@ -49,6 +49,39 @@
HANDLE CsrSrvSharedSection;
/* PRIVATE FUNCTIONS**********************************************************/
+
+/*++
+ * @name CsrServerDllInitialization
+ * @implemented NT4
+ *
+ * The CsrServerDllInitialization is the initialization routine for
+ * the this Server DLL.
+ *
+ * @param LoadedServerDll
+ * Pointer to the CSR Server DLL structure representing this Server DLL.
+ *
+ * @return STATUS_SUCCESS.
+ *
+ * @remarks None.
+ *
+ *--*/
+NTSTATUS
+NTAPI
+CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll)
+{
+ /* Setup the DLL Object */
+ LoadedServerDll->ApiBase = 0;
+ LoadedServerDll->HighestApiSupported = 5;
+ LoadedServerDll->DispatchTable = CsrServerApiDispatchTable;
+ LoadedServerDll->ValidTable = CsrServerApiServerValidTable;
+ LoadedServerDll->NameTable = CsrServerApiNameTable;
+ LoadedServerDll->SizeOfProcessData = 0;
+ LoadedServerDll->ConnectCallback = NULL;
+ LoadedServerDll->DisconnectCallback = NULL;
+
+ /* All done */
+ return STATUS_SUCCESS;
+}
/*++
* @name CsrLoadServerDll
@@ -173,7 +206,7 @@
if (NT_SUCCESS(Status))
{
/* Get the result from the Server DLL */
- Status = (*ServerDllInitProcedure)(ServerDll);
+ Status = ServerDllInitProcedure(ServerDll);
/* Check for Success */
if (NT_SUCCESS(Status))
@@ -215,39 +248,6 @@
}
/*++
- * @name CsrServerDllInitialization
- * @implemented NT4
- *
- * The CsrServerDllInitialization is the initialization routine for
- * the this Server DLL.
- *
- * @param LoadedServerDll
- * Pointer to the CSR Server DLL structure representing this Server DLL.
- *
- * @return STATUS_SUCCESS.
- *
- * @remarks None.
- *
- *--*/
-NTSTATUS
-NTAPI
-CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll)
-{
- /* Setup the DLL Object */
- LoadedServerDll->ApiBase = 0;
- LoadedServerDll->HighestApiSupported = 5;
- LoadedServerDll->DispatchTable = CsrServerApiDispatchTable;
- LoadedServerDll->ValidTable = CsrServerApiServerValidTable;
- LoadedServerDll->NameTable = CsrServerApiNameTable;
- LoadedServerDll->SizeOfProcessData = 0;
- LoadedServerDll->ConnectCallback = NULL;
- LoadedServerDll->DisconnectCallback = NULL;
-
- /* All done */
- return STATUS_SUCCESS;
-}
-
-/*++
* @name CsrSrvClientConnect
*
* The CsrSrvClientConnect CSR API handles a new connection to a server DLL.
@@ -269,6 +269,9 @@
CsrSrvClientConnect(IN OUT PCSR_API_MESSAGE ApiMessage,
IN OUT PULONG Reply OPTIONAL)
{
+ /* Hack */
+ return STATUS_SUCCESS;
+#if 0
NTSTATUS Status;
PCSR_CLIENT_CONNECT ClientConnect;
PCSR_SERVER_DLL ServerDll;
@@ -283,7 +286,7 @@
{
return STATUS_TOO_MANY_NAMES;
}
- else if (!(CsrLoadedServerDll[ClientConnect->ServerId]))
+ else if (!CsrLoadedServerDll[ClientConnect->ServerId])
{
return STATUS_INVALID_PARAMETER;
}
@@ -305,9 +308,9 @@
if (ServerDll->ConnectCallback)
{
/* Call the callback */
- Status = (ServerDll->ConnectCallback)(CurrentProcess,
- ClientConnect->ConnectionInfo,
-
&ClientConnect->ConnectionInfoSize);
+ Status = ServerDll->ConnectCallback(CurrentProcess,
+ ClientConnect->ConnectionInfo,
+ &ClientConnect->ConnectionInfoSize);
}
else
{
@@ -317,6 +320,7 @@
/* Return status */
return Status;
+#endif
}
/*++
@@ -347,7 +351,7 @@
PPEB Peb = NtCurrentPeb();
/* If there's no parameter, fail */
- if (ParameterValue) return STATUS_INVALID_PARAMETER;
+ if (!ParameterValue) return STATUS_INVALID_PARAMETER;
/* Find the first comma, and null terminate */
while (*SizeValue)
@@ -400,7 +404,7 @@
{
/* Fail */
NtClose(CsrSrvSharedSection);
- return(Status);
+ return Status;
}
/* FIXME: Write the value to registry */
@@ -469,7 +473,8 @@
/* Check if we have a process */
if (CsrProcess)
{
- /* Map the sectio into this process */
+ /* Map the section into this process */
+ DPRINT("CSR Process Handle: %p. CSR Process: %p\n",
CsrProcess->ProcessHandle, CsrProcess);
Status = NtMapViewOfSection(CsrSrvSharedSection,
CsrProcess->ProcessHandle,
&CsrSrvSharedSectionBase,
@@ -480,6 +485,12 @@
ViewUnmap,
SEC_NO_CHANGE,
PAGE_EXECUTE_READ);
+ if (Status == STATUS_CONFLICTING_ADDRESSES)
+ {
+ /* I Think our csrss tries to connect to itself... */
+ DPRINT1("Multiple mapping hack\n");
+ Status = STATUS_SUCCESS;
+ }
if (!NT_SUCCESS(Status)) return Status;
}
Modified: trunk/reactos/subsystems/win32/csrss/include/api.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/csrss/inc…
==============================================================================
--- trunk/reactos/subsystems/win32/csrss/include/api.h [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/csrss/include/api.h [iso-8859-1] Thu Feb 16 19:53:47
2012
@@ -14,6 +14,7 @@
#include <csrss/csrss.h>
+#define CSR_SRV_SERVER 0
#define CSR_SERVER_DLL_MAX 4
#define LOCK RtlEnterCriticalSection(&ProcessDataLock)
#define UNLOCK RtlLeaveCriticalSection(&ProcessDataLock)
@@ -151,6 +152,75 @@
CSR_API_MESSAGE WaitApiMessage;
} CSR_WAIT_BLOCK, *PCSR_WAIT_BLOCK;
+typedef
+NTSTATUS
+(NTAPI *PCSR_CONNECT_CALLBACK)(
+ IN PCSR_PROCESS CsrProcess,
+ IN OUT PVOID ConnectionInfo,
+ IN OUT PULONG ConnectionInfoLength
+);
+
+typedef
+VOID
+(NTAPI *PCSR_DISCONNECT_CALLBACK)(IN PCSR_PROCESS CsrProcess);
+
+typedef
+NTSTATUS
+(NTAPI *PCSR_NEWPROCESS_CALLBACK)(
+ IN PCSR_PROCESS Parent,
+ IN PCSR_PROCESS CsrProcess
+);
+
+typedef
+VOID
+(NTAPI *PCSR_HARDERROR_CALLBACK)(
+ IN PCSR_THREAD CsrThread,
+ IN PHARDERROR_MSG HardErrorMessage
+);
+
+typedef
+ULONG
+(NTAPI *PCSR_SHUTDOWNPROCESS_CALLBACK)(
+ IN PCSR_PROCESS CsrProcess,
+ IN ULONG Flags,
+ IN BOOLEAN FirstPhase
+);
+
+typedef
+NTSTATUS
+(NTAPI *PCSR_API_ROUTINE)(
+ IN OUT PCSR_API_MESSAGE ApiMessage,
+ IN OUT PULONG Reply
+);
+
+typedef struct _CSR_SERVER_DLL
+{
+ ULONG Length;
+ HANDLE Event;
+ ANSI_STRING Name;
+ HANDLE ServerHandle;
+ ULONG ServerId;
+ ULONG Unknown;
+ ULONG ApiBase;
+ ULONG HighestApiSupported;
+ PCSR_API_ROUTINE *DispatchTable;
+ PBOOLEAN ValidTable;
+ PCHAR *NameTable;
+ ULONG SizeOfProcessData;
+ PCSR_CONNECT_CALLBACK ConnectCallback;
+ PCSR_DISCONNECT_CALLBACK DisconnectCallback;
+ PCSR_HARDERROR_CALLBACK HardErrorCallback;
+ PVOID SharedSection;
+ PCSR_NEWPROCESS_CALLBACK NewProcessCallback;
+ PCSR_SHUTDOWNPROCESS_CALLBACK ShutdownProcessCallback;
+ ULONG Unknown2[3];
+} CSR_SERVER_DLL, *PCSR_SERVER_DLL;
+
+typedef
+NTSTATUS
+(NTAPI *PCSR_SERVER_DLL_INIT_CALLBACK)(IN PCSR_SERVER_DLL ServerDll);
+
+
typedef NTSTATUS (WINAPI *CSRSS_API_PROC)(PCSR_PROCESS ProcessData,
PCSR_API_MESSAGE Request);
@@ -237,6 +307,11 @@
extern RTL_CRITICAL_SECTION ProcessDataLock, CsrWaitListsLock;
extern UNICODE_STRING CsrDirectoryName;
extern ULONG CsrDebug;
+extern ULONG CsrTotalPerProcessDataLength;
+extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo;
+extern PVOID CsrSrvSharedSectionHeap;
+extern PVOID *CsrSrvSharedStaticServerData;
+extern HANDLE CsrInitializationEvent;
NTSTATUS
NTAPI
@@ -273,6 +348,43 @@
NTAPI
CsrInitializeNtSessionList(VOID);
+NTSTATUS
+NTAPI
+CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL,
+OUT PCSR_CONNECTION_INFO ConnectInfo);
+
+NTSTATUS
+NTAPI
+CsrSrvCreateSharedSection(IN PCHAR ParameterValue);
+
+NTSTATUS
+NTAPI
+CsrSrvClientConnect(
+ IN OUT PCSR_API_MESSAGE ApiMessage,
+ IN OUT PULONG Reply
+);
+
+NTSTATUS
+NTAPI
+CsrSrvUnusedFunction(
+ IN OUT PCSR_API_MESSAGE ApiMessage,
+ IN OUT PULONG Reply
+);
+
+NTSTATUS
+NTAPI
+CsrSrvIdentifyAlertableThread(
+ IN OUT PCSR_API_MESSAGE ApiMessage,
+ IN OUT PULONG Reply
+);
+
+NTSTATUS
+NTAPI
+CsrSrvSetPriorityClass(
+ IN OUT PCSR_API_MESSAGE ApiMessage,
+ IN OUT PULONG Reply
+);
+
/* api/user.c */
CSR_API(CsrRegisterServicesProcess);