From bd645b8b0e772bfdbfbcc9530a4e230c40b2232c Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Tue, 30 Sep 2014 17:13:16 +0000 Subject: [PATCH] [WINLOGON] Implement the RPC server for remote registry and system shutdown. Server functions are not implemented yet. svn path=/trunk/; revision=64410 --- reactos/base/system/winlogon/CMakeLists.txt | 12 +- reactos/base/system/winlogon/rpcserver.c | 570 ++++++++++++++++++++ reactos/base/system/winlogon/winlogon.c | 7 + reactos/base/system/winlogon/winlogon.h | 4 + 4 files changed, 591 insertions(+), 2 deletions(-) create mode 100644 reactos/base/system/winlogon/rpcserver.c diff --git a/reactos/base/system/winlogon/CMakeLists.txt b/reactos/base/system/winlogon/CMakeLists.txt index 9a82f501c08..079fe92eac6 100644 --- a/reactos/base/system/winlogon/CMakeLists.txt +++ b/reactos/base/system/winlogon/CMakeLists.txt @@ -1,16 +1,24 @@ +include_directories( + ${REACTOS_SOURCE_DIR}/include/reactos/idl + ${CMAKE_CURRENT_BINARY_DIR}) + +add_rpc_files(server ${REACTOS_SOURCE_DIR}/include/reactos/idl/winreg.idl) + list(APPEND SOURCE environment.c + rpcserver.c sas.c screensaver.c setup.c winlogon.c wlx.c - winlogon.h) + winlogon.h + ${CMAKE_CURRENT_BINARY_DIR}/winreg_s.c) add_executable(winlogon ${SOURCE} winlogon.rc) target_link_libraries(winlogon wine) set_module_type(winlogon win32gui) -add_importlibs(winlogon user32 advapi32 userenv secur32 msvcrt kernel32 ntdll) +add_importlibs(winlogon user32 advapi32 userenv secur32 rpcrt4 msvcrt kernel32 ntdll) add_pch(winlogon winlogon.h SOURCE) add_cd_file(TARGET winlogon DESTINATION reactos/system32 FOR all) diff --git a/reactos/base/system/winlogon/rpcserver.c b/reactos/base/system/winlogon/rpcserver.c new file mode 100644 index 00000000000..9c713184839 --- /dev/null +++ b/reactos/base/system/winlogon/rpcserver.c @@ -0,0 +1,570 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Winlogon + * FILE: base/system/winlogon/rpcserver.c + * PURPOSE: RPC server interface for the remote registry calls + * PROGRAMMERS: Eric Kohl + */ + +/* INCLUDES *****************************************************************/ + +#include "winlogon.h" + +#include +#include + + +/* FUNCTIONS *****************************************************************/ + +BOOL +StartRpcServer(VOID) +{ + RPC_STATUS Status; + + TRACE("ScmStartRpcServer() called\n"); + + Status = RpcServerUseProtseqEpW(L"ncacn_np", + 10, + L"\\pipe\\winreg", + NULL); + if (Status != RPC_S_OK) + { + ERR("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); + return FALSE; + } + + Status = RpcServerRegisterIf(winreg_v1_0_s_ifspec, + NULL, + NULL); + if (Status != RPC_S_OK) + { + ERR("RpcServerRegisterIf() failed (Status %lx)\n", Status); + return FALSE; + } + + Status = RpcServerListen(1, 20, TRUE); + if (Status != RPC_S_OK) + { + ERR("RpcServerListen() failed (Status %lx)\n", Status); + return FALSE; + } + + TRACE("StartRpcServer() done\n"); + return TRUE; +} + + +void __RPC_FAR * __RPC_USER MIDL_user_allocate(SIZE_T len) +{ + return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); +} + + +void __RPC_USER MIDL_user_free(void __RPC_FAR * ptr) +{ + HeapFree(GetProcessHeap(), 0, ptr); +} + + +void __RPC_USER RPC_HKEY_rundown(RPC_HKEY hSCObject) +{ +} + + +/* Function 0 */ +error_status_t +WINAPI +OpenClassesRoot( + PREGISTRY_SERVER_NAME ServerName, + REGSAM samDesired, + PRPC_HKEY phKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 1 */ +error_status_t +WINAPI +OpenCurrentUser( + PREGISTRY_SERVER_NAME ServerName, + REGSAM samDesired, + PRPC_HKEY phKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 2 */ +error_status_t +WINAPI +OpenLocalMachine( + PREGISTRY_SERVER_NAME ServerName, + REGSAM samDesired, + PRPC_HKEY phKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 3 */ +error_status_t +WINAPI +OpenPerformanceData( + PREGISTRY_SERVER_NAME ServerName, + REGSAM samDesired, + PRPC_HKEY phKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 4 */ +error_status_t +WINAPI +OpenUsers( + PREGISTRY_SERVER_NAME ServerName, + REGSAM samDesired, + PRPC_HKEY phKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 5 */ +error_status_t +WINAPI +BaseRegCloseKey( + PRPC_HKEY hKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 6 */ +error_status_t +WINAPI +BaseRegCreateKey( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpSubKey, + PRPC_UNICODE_STRING lpClass, + DWORD dwOptions, + REGSAM samDesired, + PRPC_SECURITY_ATTRIBUTES lpSecurityAttributes, + PRPC_HKEY phkResult, + LPDWORD lpdwDisposition) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 7 */ +error_status_t +WINAPI +BaseRegDeleteKey( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpSubKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 8 */ +error_status_t +WINAPI +BaseRegDeleteValue( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpValueName) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 9 */ +error_status_t +WINAPI +BaseRegEnumKey( + RPC_HKEY hKey, + DWORD dwIndex, + PRPC_UNICODE_STRING lpNameIn, + PRPC_UNICODE_STRING lpNameOut, + PRPC_UNICODE_STRING lpClassIn, + PRPC_UNICODE_STRING *lplpClassOut, + PFILETIME lpftLastWriteTime) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 10 */ +error_status_t +WINAPI +BaseRegEnumValue( + RPC_HKEY hKey, + DWORD dwIndex, + PRPC_UNICODE_STRING lpValueNameIn, + PRPC_UNICODE_STRING lpValueNameOut, + LPDWORD lpType, + LPBYTE lpData, + LPDWORD lpcbData, + LPDWORD lpcbLen) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 11 */ +error_status_t +__stdcall +BaseRegFlushKey( + RPC_HKEY hKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 12 */ +error_status_t +__stdcall +BaseRegGetKeySecurity( + RPC_HKEY hKey, + SECURITY_INFORMATION SecurityInformation, + PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptorIn, + PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptorOut) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 13 */ +error_status_t +__stdcall +BaseRegLoadKey( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpSubKey, + PRPC_UNICODE_STRING lpFile) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 14 */ +void +__stdcall +Opnum14NotImplemented( + handle_t IDL_handle) +{ + TRACE("\n"); +} + + +/* Function 15 */ +error_status_t +__stdcall +BaseRegOpenKey( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpSubKey, + DWORD dwOptions, + REGSAM samDesired, + PRPC_HKEY phkResult) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 16 */ +error_status_t +__stdcall +BaseRegQueryInfoKey( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpClassIn, + PRPC_UNICODE_STRING lpClassOut, + LPDWORD lpcSubKeys, + LPDWORD lpcbMaxSubKeyLen, + LPDWORD lpcbMaxClassLen, + LPDWORD lpcValues, + LPDWORD lpcbMaxValueNameLen, + LPDWORD lpcbMaxValueLen, + LPDWORD lpcbSecurityDescriptor, + PFILETIME lpftLastWriteTime) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 17 */ +error_status_t +__stdcall +BaseRegQueryValue( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpValueName, + LPDWORD lpType, + LPBYTE lpData, + LPDWORD lpcbData, + LPDWORD lpcbLen) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 18 */ +error_status_t +__stdcall +BaseRegReplaceKey( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpSubKey, + PRPC_UNICODE_STRING lpNewFile, + PRPC_UNICODE_STRING lpOldFile) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 19 */ +error_status_t +__stdcall +BaseRegRestoreKey( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpFile, + DWORD Flags) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 20 */ +error_status_t +__stdcall +BaseRegSaveKey( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpFile, + PRPC_SECURITY_ATTRIBUTES pSecurityAttributes) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 21 */ +error_status_t +__stdcall +BaseRegSetKeySecurity( + RPC_HKEY hKey, + SECURITY_INFORMATION SecurityInformation, + PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptor) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 22 */ +error_status_t +__stdcall +BaseRegSetValue( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpValueName, + DWORD dwType, + LPBYTE lpData, + DWORD cbData) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 23 */ +error_status_t +__stdcall +BaseRegUnLoadKey( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpSubKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 24 */ +ULONG +__stdcall +BaseInitiateSystemShutdown( + PREGISTRY_SERVER_NAME ServerName, + PRPC_UNICODE_STRING lpMessage, + ULONG dwTimeout, + BOOLEAN bForceAppsClosed, + BOOLEAN bRebootAfterShutdown) +{ + TRACE("BaseInitiateSystemShutdown()\n"); + return ERROR_SUCCESS; +} + + +/* Function 25 */ +ULONG +__stdcall +BaseAbortSystemShutdown( + PREGISTRY_SERVER_NAME ServerName) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 26 */ +error_status_t +__stdcall +BaseRegGetVersion( + RPC_HKEY hKey, + LPDWORD lpdwVersion) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 27 */ +error_status_t +__stdcall +OpenCurrentConfig( + PREGISTRY_SERVER_NAME ServerName, + REGSAM samDesired, + PRPC_HKEY phKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 28 */ +void +__stdcall +Opnum28NotImplemented( + handle_t IDL_handle) +{ + TRACE("\n"); +} + + +/* Function 29 */ +error_status_t +__stdcall +BaseRegQueryMultipleValues( + RPC_HKEY hKey, + PRVALENT val_listIn, + PRVALENT val_listOut, + DWORD num_vals, + char *lpvalueBuf, + LPDWORD ldwTotsize) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 30 */ +ULONG +__stdcall +BaseInitiateSystemShutdownEx( + PREGISTRY_SERVER_NAME ServerName, + PRPC_UNICODE_STRING lpMessage, + ULONG dwTimeout, + BOOLEAN bForceAppsClosed, + BOOLEAN bRebootAfterShutdown, + ULONG dwReason) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 31 */ +error_status_t +__stdcall +BaseRegSaveKeyEx( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpFile, + PRPC_SECURITY_ATTRIBUTES pSecurityAttributes, + DWORD Flags) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 32 */ +error_status_t +__stdcall +OpenPerformanceText( + PREGISTRY_SERVER_NAME ServerName, + REGSAM samDesired, + PRPC_HKEY phKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 33 */ +error_status_t +__stdcall +OpenPerformanceNlsText( + PREGISTRY_SERVER_NAME ServerName, + REGSAM samDesired, + PRPC_HKEY phKey) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 34 */ +error_status_t +__stdcall +BaseRegQueryMultipleValues2( + RPC_HKEY hKey, + PRVALENT val_listIn, + PRVALENT val_listOut, + DWORD num_vals, + char *lpvalueBuf, + LPDWORD ldwTotsize, + LPDWORD ldwRequiredSize) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + + +/* Function 35 */ +error_status_t +__stdcall +BaseRegDeleteKeyEx( + RPC_HKEY hKey, + PRPC_UNICODE_STRING lpSubKey, + REGSAM AccessMask, + DWORD Reserved) +{ + TRACE("\n"); + return ERROR_SUCCESS; +} + +/* EOF */ diff --git a/reactos/base/system/winlogon/winlogon.c b/reactos/base/system/winlogon/winlogon.c index 76f0c394f6a..4bc48215239 100644 --- a/reactos/base/system/winlogon/winlogon.c +++ b/reactos/base/system/winlogon/winlogon.c @@ -356,6 +356,13 @@ WinMain( ExitProcess(1); } + if (!StartRpcServer()) + { + ERR("WL: Could not start the RPC server\n"); + NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); + ExitProcess(1); + } + if (!StartServicesManager()) { ERR("WL: Could not start services.exe\n"); diff --git a/reactos/base/system/winlogon/winlogon.h b/reactos/base/system/winlogon/winlogon.h index 228b5e1794f..ba5a3e4a036 100644 --- a/reactos/base/system/winlogon/winlogon.h +++ b/reactos/base/system/winlogon/winlogon.h @@ -259,6 +259,10 @@ extern PWLSESSION WLSession; BOOL CreateUserEnvironment(IN PWLSESSION Session); +/* rpcserver.c */ +BOOL +StartRpcServer(VOID); + /* sas.c */ BOOL SetDefaultLanguage(IN BOOL UserProfile); -- 2.17.1