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=556... ============================================================================== --- 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?rev... ============================================================================== --- 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/csrs... ============================================================================== --- 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/csrs... ============================================================================== --- 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/csrs... ============================================================================== --- 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/csrs... ============================================================================== --- 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/csrs... ============================================================================== --- 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/csrs... ============================================================================== --- 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/incl... ============================================================================== --- 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);