mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 08:55:19 +00:00
[WINLOGON]
Implement the RPC server for remote registry and system shutdown. Server functions are not implemented yet. svn path=/trunk/; revision=64410
This commit is contained in:
parent
0e13044f26
commit
bd645b8b0e
4 changed files with 591 additions and 2 deletions
|
@ -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)
|
||||
|
|
570
reactos/base/system/winlogon/rpcserver.c
Normal file
570
reactos/base/system/winlogon/rpcserver.c
Normal file
|
@ -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 <rpc.h>
|
||||
#include <winreg_s.h>
|
||||
|
||||
|
||||
/* 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 */
|
|
@ -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");
|
||||
|
|
|
@ -259,6 +259,10 @@ extern PWLSESSION WLSession;
|
|||
BOOL
|
||||
CreateUserEnvironment(IN PWLSESSION Session);
|
||||
|
||||
/* rpcserver.c */
|
||||
BOOL
|
||||
StartRpcServer(VOID);
|
||||
|
||||
/* sas.c */
|
||||
BOOL
|
||||
SetDefaultLanguage(IN BOOL UserProfile);
|
||||
|
|
Loading…
Reference in a new issue