From c43df67bd667173b7f1961bb0d388f3bdb885db8 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 21 May 2012 13:38:32 +0000 Subject: [PATCH] [SAMLIB/SAMSRV/SYSSETUP] - Use Wine debug messages in samlib.dll. - Move SAM initialization code from samlib.dll to samsrv.dll. - Lsass.exe initializes SAM instead of syssetup.dll. svn path=/trunk/; revision=56648 --- reactos/dll/win32/samlib/CMakeLists.txt | 1 + reactos/dll/win32/samlib/dllmain.c | 48 +-- reactos/dll/win32/samlib/precomp.h | 2 +- reactos/dll/win32/samlib/samlib.c | 322 ++----------------- reactos/dll/win32/samlib/samlib.spec | 1 - reactos/dll/win32/samsrv/CMakeLists.txt | 3 +- reactos/dll/win32/samsrv/samsrv.c | 10 +- reactos/dll/win32/samsrv/samsrv.h | 7 +- reactos/dll/win32/samsrv/setup.c | 316 ++++++++++++++++++ reactos/dll/win32/syssetup/install.c | 7 - reactos/include/reactos/libs/samlib/samlib.h | 3 - 11 files changed, 366 insertions(+), 354 deletions(-) create mode 100644 reactos/dll/win32/samsrv/setup.c diff --git a/reactos/dll/win32/samlib/CMakeLists.txt b/reactos/dll/win32/samlib/CMakeLists.txt index 2ac70d5f12e..9af1c0cf606 100644 --- a/reactos/dll/win32/samlib/CMakeLists.txt +++ b/reactos/dll/win32/samlib/CMakeLists.txt @@ -21,6 +21,7 @@ list(APPEND SOURCE add_library(samlib SHARED ${SOURCE}) set_module_type(samlib win32dll UNICODE) +target_link_libraries(samlib wine ${PSEH_LIB}) add_importlibs(samlib rpcrt4 advapi32 msvcrt kernel32 ntdll) add_pch(samlib precomp.h) add_cd_file(TARGET samlib DESTINATION reactos/system32 FOR all) diff --git a/reactos/dll/win32/samlib/dllmain.c b/reactos/dll/win32/samlib/dllmain.c index 27f247121be..e790d30be05 100644 --- a/reactos/dll/win32/samlib/dllmain.c +++ b/reactos/dll/win32/samlib/dllmain.c @@ -29,7 +29,7 @@ #include "precomp.h" -//#define LOG_DEBUG_MESSAGES +WINE_DEFAULT_DEBUG_CHANNEL(samlib); /* GLOBALS *******************************************************************/ @@ -45,50 +45,4 @@ DllMain (HINSTANCE hInstance, return TRUE; } - -void -DebugPrint (char* fmt,...) -{ -#ifdef LOG_DEBUG_MESSAGES - char FileName[MAX_PATH]; - HANDLE hLogFile; - DWORD dwBytesWritten; -#endif - char buffer[512]; - va_list ap; - - va_start (ap, fmt); - vsprintf (buffer, fmt, ap); - va_end (ap); - - OutputDebugStringA (buffer); - -#ifdef LOG_DEBUG_MESSAGES - strcpy (FileName, "C:\\reactos\\samlib.log"); - hLogFile = CreateFileA (FileName, - GENERIC_WRITE, - 0, - NULL, - OPEN_ALWAYS, - FILE_ATTRIBUTE_NORMAL, - NULL); - if (hLogFile == INVALID_HANDLE_VALUE) - return; - - if (SetFilePointer(hLogFile, 0, NULL, FILE_END) == 0xFFFFFFFF) - { - CloseHandle (hLogFile); - return; - } - - WriteFile (hLogFile, - buffer, - strlen(buffer), - &dwBytesWritten, - NULL); - - CloseHandle (hLogFile); -#endif -} - /* EOF */ diff --git a/reactos/dll/win32/samlib/precomp.h b/reactos/dll/win32/samlib/precomp.h index 165d03474da..16f548cc8b7 100644 --- a/reactos/dll/win32/samlib/precomp.h +++ b/reactos/dll/win32/samlib/precomp.h @@ -10,4 +10,4 @@ #include "sam_c.h" -#include "debug.h" +#include diff --git a/reactos/dll/win32/samlib/samlib.c b/reactos/dll/win32/samlib/samlib.c index 43b05a60c17..e17b3d3a679 100644 --- a/reactos/dll/win32/samlib/samlib.c +++ b/reactos/dll/win32/samlib/samlib.c @@ -27,277 +27,15 @@ /* INCLUDES *****************************************************************/ -#define NDEBUG #include "precomp.h" +WINE_DEFAULT_DEBUG_CHANNEL(samlib); /* GLOBALS *******************************************************************/ /* FUNCTIONS *****************************************************************/ - -static BOOL -CreateBuiltinAliases (HKEY hAliasesKey) -{ - return TRUE; -} - - -static BOOL -CreateBuiltinGroups (HKEY hGroupsKey) -{ - return TRUE; -} - - -static BOOL -CreateBuiltinUsers (HKEY hUsersKey) -{ - return TRUE; -} - - -BOOL WINAPI -SamInitializeSAM (VOID) -{ - DWORD dwDisposition; - HKEY hSamKey; - HKEY hDomainsKey; - HKEY hAccountKey; - HKEY hBuiltinKey; - HKEY hAliasesKey; - HKEY hGroupsKey; - HKEY hUsersKey; - - DPRINT("SamInitializeSAM() called\n"); - - if (RegCreateKeyExW (HKEY_LOCAL_MACHINE, - L"SAM\\SAM", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hSamKey, - &dwDisposition)) - { - DPRINT1 ("Failed to create 'Sam' key! (Error %lu)\n", GetLastError()); - return FALSE; - } - - if (RegCreateKeyExW (hSamKey, - L"Domains", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hDomainsKey, - &dwDisposition)) - { - DPRINT1 ("Failed to create 'Domains' key! (Error %lu)\n", GetLastError()); - RegCloseKey (hSamKey); - return FALSE; - } - - RegCloseKey (hSamKey); - - /* Create the 'Domains\\Account' key */ - if (RegCreateKeyExW (hDomainsKey, - L"Account", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hAccountKey, - &dwDisposition)) - { - DPRINT1 ("Failed to create 'Domains\\Account' key! (Error %lu)\n", GetLastError()); - RegCloseKey (hDomainsKey); - return FALSE; - } - - - /* Create the 'Account\Aliases' key */ - if (RegCreateKeyExW (hAccountKey, - L"Aliases", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hAliasesKey, - &dwDisposition)) - { - DPRINT1 ("Failed to create 'Account\\Aliases' key! (Error %lu)\n", GetLastError()); - RegCloseKey (hAccountKey); - RegCloseKey (hDomainsKey); - return FALSE; - } - - RegCloseKey (hAliasesKey); - - - /* Create the 'Account\Groups' key */ - if (RegCreateKeyExW (hAccountKey, - L"Groups", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hGroupsKey, - &dwDisposition)) - { - DPRINT1 ("Failed to create 'Account\\Groups' key! (Error %lu)\n", GetLastError()); - RegCloseKey (hAccountKey); - RegCloseKey (hDomainsKey); - return FALSE; - } - - RegCloseKey (hGroupsKey); - - - /* Create the 'Account\Users' key */ - if (RegCreateKeyExW (hAccountKey, - L"Users", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hUsersKey, - &dwDisposition)) - { - DPRINT1 ("Failed to create 'Account\\Users' key! (Error %lu)\n", GetLastError()); - RegCloseKey (hAccountKey); - RegCloseKey (hDomainsKey); - return FALSE; - } - - RegCloseKey (hUsersKey); - - RegCloseKey (hAccountKey); - - - /* Create the 'Domains\\Builtin' */ - if (RegCreateKeyExW (hDomainsKey, - L"Builtin", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hBuiltinKey, - &dwDisposition)) - { - DPRINT1 ("Failed to create Builtin key! (Error %lu)\n", GetLastError()); - RegCloseKey (hDomainsKey); - return FALSE; - } - - - /* Create the 'Builtin\Aliases' key */ - if (RegCreateKeyExW (hBuiltinKey, - L"Aliases", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hAliasesKey, - &dwDisposition)) - { - DPRINT1 ("Failed to create 'Builtin\\Aliases' key! (Error %lu)\n", GetLastError()); - RegCloseKey (hBuiltinKey); - RegCloseKey (hDomainsKey); - return FALSE; - } - - /* Create builtin aliases */ - if (!CreateBuiltinAliases (hAliasesKey)) - { - DPRINT1 ("Failed to create builtin aliases!\n"); - RegCloseKey (hAliasesKey); - RegCloseKey (hBuiltinKey); - RegCloseKey (hDomainsKey); - return FALSE; - } - - RegCloseKey (hAliasesKey); - - - /* Create the 'Builtin\Groups' key */ - if (RegCreateKeyExW (hBuiltinKey, - L"Groups", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hGroupsKey, - &dwDisposition)) - { - DPRINT1 ("Failed to create 'Builtin\\Groups' key! (Error %lu)\n", GetLastError()); - RegCloseKey (hBuiltinKey); - RegCloseKey (hDomainsKey); - return FALSE; - } - - /* Create builtin groups */ - if (!CreateBuiltinGroups (hGroupsKey)) - { - DPRINT1 ("Failed to create builtin groups!\n"); - RegCloseKey (hGroupsKey); - RegCloseKey (hBuiltinKey); - RegCloseKey (hDomainsKey); - return FALSE; - } - - RegCloseKey (hGroupsKey); - - - /* Create the 'Builtin\Users' key */ - if (RegCreateKeyExW (hBuiltinKey, - L"Users", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hUsersKey, - &dwDisposition)) - { - DPRINT1 ("Failed to create 'Builtin\\Users' key! (Error %lu)\n", GetLastError()); - RegCloseKey (hBuiltinKey); - RegCloseKey (hDomainsKey); - return FALSE; - } - - /* Create builtin users */ - if (!CreateBuiltinUsers (hUsersKey)) - { - DPRINT1 ("Failed to create builtin users!\n"); - RegCloseKey (hUsersKey); - RegCloseKey (hBuiltinKey); - RegCloseKey (hDomainsKey); - return FALSE; - } - - RegCloseKey (hUsersKey); - - RegCloseKey (hBuiltinKey); - - RegCloseKey (hDomainsKey); - - DPRINT ("SamInitializeSAM() done\n"); - - return TRUE; -} - - /* * ERROR_USER_EXISTS */ @@ -310,7 +48,7 @@ SamCreateUser (PWSTR UserName, HKEY hUsersKey; HKEY hUserKey; - DPRINT ("SamCreateUser() called\n"); + TRACE("SamCreateUser() called\n"); /* FIXME: Check whether the SID is a real user sid */ @@ -321,7 +59,7 @@ SamCreateUser (PWSTR UserName, KEY_ALL_ACCESS, &hUsersKey)) { - DPRINT1 ("Failed to open Account key! (Error %lu)\n", GetLastError()); + ERR("Failed to open Account key! (Error %lu)\n", GetLastError()); return FALSE; } @@ -336,7 +74,7 @@ SamCreateUser (PWSTR UserName, &hUserKey, &dwDisposition)) { - DPRINT1 ("Failed to create/open the user key! (Error %lu)\n", GetLastError()); + ERR("Failed to create/open the user key! (Error %lu)\n", GetLastError()); RegCloseKey (hUsersKey); return FALSE; } @@ -345,7 +83,7 @@ SamCreateUser (PWSTR UserName, if (dwDisposition == REG_OPENED_EXISTING_KEY) { - DPRINT1 ("User already exists!\n"); + ERR("User already exists!\n"); RegCloseKey (hUserKey); SetLastError (ERROR_USER_EXISTS); return FALSE; @@ -360,7 +98,7 @@ SamCreateUser (PWSTR UserName, (LPBYTE)UserName, (wcslen (UserName) + 1) * sizeof (WCHAR))) { - DPRINT1 ("Failed to set the user name value! (Error %lu)\n", GetLastError()); + ERR("Failed to set the user name value! (Error %lu)\n", GetLastError()); RegCloseKey (hUserKey); return FALSE; } @@ -373,7 +111,7 @@ SamCreateUser (PWSTR UserName, (LPBYTE)UserPassword, (wcslen (UserPassword) + 1) * sizeof (WCHAR))) { - DPRINT1 ("Failed to set the user name value! (Error %lu)\n", GetLastError()); + ERR("Failed to set the user name value! (Error %lu)\n", GetLastError()); RegCloseKey (hUserKey); return FALSE; } @@ -386,14 +124,14 @@ SamCreateUser (PWSTR UserName, (LPBYTE)UserSid, RtlLengthSid (UserSid))) { - DPRINT1 ("Failed to set the user SID value! (Error %lu)\n", GetLastError()); + ERR("Failed to set the user SID value! (Error %lu)\n", GetLastError()); RegCloseKey (hUserKey); return FALSE; } RegCloseKey (hUserKey); - DPRINT ("SamCreateUser() done\n"); + TRACE("SamCreateUser() done\n"); return TRUE; } @@ -412,7 +150,7 @@ SamCheckUserPassword (PWSTR UserName, HKEY hUsersKey; HKEY hUserKey; - DPRINT ("SamCheckUserPassword() called\n"); + TRACE("SamCheckUserPassword() called\n"); /* Open the Users key */ if (RegOpenKeyExW (HKEY_LOCAL_MACHINE, @@ -421,7 +159,7 @@ SamCheckUserPassword (PWSTR UserName, KEY_READ, &hUsersKey)) { - DPRINT1 ("Failed to open Users key! (Error %lu)\n", GetLastError()); + ERR("Failed to open Users key! (Error %lu)\n", GetLastError()); return FALSE; } @@ -434,12 +172,12 @@ SamCheckUserPassword (PWSTR UserName, { if (GetLastError () == ERROR_FILE_NOT_FOUND) { - DPRINT1 ("Invalid user name!\n"); + ERR("Invalid user name!\n"); SetLastError (ERROR_NO_SUCH_USER); } else { - DPRINT1 ("Failed to open user key! (Error %lu)\n", GetLastError()); + ERR("Failed to open user key! (Error %lu)\n", GetLastError()); } RegCloseKey (hUsersKey); @@ -457,7 +195,7 @@ SamCheckUserPassword (PWSTR UserName, (LPBYTE)szPassword, &dwLength)) { - DPRINT1 ("Failed to read the password! (Error %lu)\n", GetLastError()); + ERR("Failed to read the password! (Error %lu)\n", GetLastError()); RegCloseKey (hUserKey); return FALSE; } @@ -468,12 +206,12 @@ SamCheckUserPassword (PWSTR UserName, if ((wcslen (szPassword) != wcslen (UserPassword)) || (wcscmp (szPassword, UserPassword) != 0)) { - DPRINT1 ("Wrong password!\n"); + ERR("Wrong password!\n"); SetLastError (ERROR_WRONG_PASSWORD); return FALSE; } - DPRINT ("SamCheckUserPassword() done\n"); + TRACE("SamCheckUserPassword() done\n"); return TRUE; } @@ -488,7 +226,7 @@ SamGetUserSid (PWSTR UserName, HKEY hUsersKey; HKEY hUserKey; - DPRINT ("SamGetUserSid() called\n"); + TRACE("SamGetUserSid() called\n"); if (Sid != NULL) *Sid = NULL; @@ -500,7 +238,7 @@ SamGetUserSid (PWSTR UserName, KEY_READ, &hUsersKey)) { - DPRINT1 ("Failed to open Users key! (Error %lu)\n", GetLastError()); + ERR("Failed to open Users key! (Error %lu)\n", GetLastError()); return FALSE; } @@ -513,12 +251,12 @@ SamGetUserSid (PWSTR UserName, { if (GetLastError () == ERROR_FILE_NOT_FOUND) { - DPRINT1 ("Invalid user name!\n"); + ERR("Invalid user name!\n"); SetLastError (ERROR_NO_SUCH_USER); } else { - DPRINT1 ("Failed to open user key! (Error %lu)\n", GetLastError()); + ERR("Failed to open user key! (Error %lu)\n", GetLastError()); } RegCloseKey (hUsersKey); @@ -536,19 +274,19 @@ SamGetUserSid (PWSTR UserName, NULL, &dwLength)) { - DPRINT1 ("Failed to read the SID size! (Error %lu)\n", GetLastError()); + ERR("Failed to read the SID size! (Error %lu)\n", GetLastError()); RegCloseKey (hUserKey); return FALSE; } /* Allocate sid buffer */ - DPRINT ("Required SID buffer size: %lu\n", dwLength); + TRACE("Required SID buffer size: %lu\n", dwLength); lpSid = (PSID)RtlAllocateHeap (RtlGetProcessHeap (), 0, dwLength); if (lpSid == NULL) { - DPRINT1 ("Failed to allocate SID buffer!\n"); + ERR("Failed to allocate SID buffer!\n"); RegCloseKey (hUserKey); return FALSE; } @@ -561,7 +299,7 @@ SamGetUserSid (PWSTR UserName, (LPBYTE)lpSid, &dwLength)) { - DPRINT1 ("Failed to read the SID! (Error %lu)\n", GetLastError()); + ERR("Failed to read the SID! (Error %lu)\n", GetLastError()); RtlFreeHeap (RtlGetProcessHeap (), 0, lpSid); @@ -573,7 +311,7 @@ SamGetUserSid (PWSTR UserName, *Sid = lpSid; - DPRINT ("SamGetUserSid() done\n"); + TRACE("SamGetUserSid() done\n"); return TRUE; } @@ -597,7 +335,7 @@ PSAMPR_SERVER_NAME_bind(PSAMPR_SERVER_NAME pszSystemName) LPWSTR pszStringBinding; RPC_STATUS status; -// TRACE("PSAMPR_SERVER_NAME_bind() called\n"); + TRACE("PSAMPR_SERVER_NAME_bind() called\n"); status = RpcStringBindingComposeW(NULL, L"ncacn_np", @@ -607,7 +345,7 @@ PSAMPR_SERVER_NAME_bind(PSAMPR_SERVER_NAME pszSystemName) &pszStringBinding); if (status) { -// TRACE("RpcStringBindingCompose returned 0x%x\n", status); + TRACE("RpcStringBindingCompose returned 0x%x\n", status); return NULL; } @@ -616,7 +354,7 @@ PSAMPR_SERVER_NAME_bind(PSAMPR_SERVER_NAME pszSystemName) &hBinding); if (status) { -// TRACE("RpcBindingFromStringBinding returned 0x%x\n", status); + TRACE("RpcBindingFromStringBinding returned 0x%x\n", status); } status = RpcStringFreeW(&pszStringBinding); @@ -635,12 +373,12 @@ PSAMPR_SERVER_NAME_unbind(PSAMPR_SERVER_NAME pszSystemName, { RPC_STATUS status; -// TRACE("PSAMPR_SERVER_NAME_unbind() called\n"); + TRACE("PSAMPR_SERVER_NAME_unbind() called\n"); status = RpcBindingFree(&hBinding); if (status) { -// TRACE("RpcBindingFree returned 0x%x\n", status); + TRACE("RpcBindingFree returned 0x%x\n", status); } } diff --git a/reactos/dll/win32/samlib/samlib.spec b/reactos/dll/win32/samlib/samlib.spec index 377bfdc75ea..288dc9c9a03 100644 --- a/reactos/dll/win32/samlib/samlib.spec +++ b/reactos/dll/win32/samlib/samlib.spec @@ -64,7 +64,6 @@ @ stub SamiSetDSRMPassword @ stub SamiSetDSRMPasswordOWF -@ stdcall SamInitializeSAM() @ stdcall SamCreateUser(wstr wstr ptr) @ stdcall SamCheckUserPassword(wstr wstr) @ stdcall SamGetUserSid(wstr ptr) diff --git a/reactos/dll/win32/samsrv/CMakeLists.txt b/reactos/dll/win32/samsrv/CMakeLists.txt index 50527e003b8..bd14e03a0e5 100644 --- a/reactos/dll/win32/samsrv/CMakeLists.txt +++ b/reactos/dll/win32/samsrv/CMakeLists.txt @@ -10,6 +10,7 @@ spec2def(samsrv.dll samsrv.spec ADD_IMPORTLIB) list(APPEND SOURCE samrpc.c samsrv.c + setup.c samsrv.rc ${CMAKE_CURRENT_BINARY_DIR}/samsrv_stubs.c ${CMAKE_CURRENT_BINARY_DIR}/samsrv.def @@ -19,6 +20,6 @@ add_library(samsrv SHARED ${SOURCE}) set_module_type(samsrv win32dll ENTRYPOINT 0 UNICODE) target_link_libraries(samsrv wine ${PSEH_LIB}) -add_importlibs(samsrv rpcrt4 kernel32 ntdll) +add_importlibs(samsrv rpcrt4 advapi32 kernel32 ntdll) add_dependencies(samsrv psdk) add_cd_file(TARGET samsrv DESTINATION reactos/system32 FOR all) diff --git a/reactos/dll/win32/samsrv/samsrv.c b/reactos/dll/win32/samsrv/samsrv.c index 7763b2aaf0d..6012b1c7691 100644 --- a/reactos/dll/win32/samsrv/samsrv.c +++ b/reactos/dll/win32/samsrv/samsrv.c @@ -29,9 +29,15 @@ NTSTATUS NTAPI SamIInitialize(VOID) { + NTSTATUS Status = STATUS_SUCCESS; + TRACE("SamIInitialize() called\n"); - return STATUS_SUCCESS; + if (SampIsSetupRunning()) + Status = SampInitializeRegistry(); + + + return Status; } @@ -41,6 +47,8 @@ SampInitializeRegistry(VOID) { TRACE("SampInitializeRegistry() called\n"); + SampInitializeSAM(); + return STATUS_SUCCESS; } diff --git a/reactos/dll/win32/samsrv/samsrv.h b/reactos/dll/win32/samsrv/samsrv.h index 4c606c9f9cb..b2794f2ed6b 100644 --- a/reactos/dll/win32/samsrv/samsrv.h +++ b/reactos/dll/win32/samsrv/samsrv.h @@ -16,4 +16,9 @@ #include "sam_s.h" -#include \ No newline at end of file +#include + + +/* setup.c */ +BOOL SampIsSetupRunning(VOID); +BOOL SampInitializeSAM(VOID); \ No newline at end of file diff --git a/reactos/dll/win32/samsrv/setup.c b/reactos/dll/win32/samsrv/setup.c new file mode 100644 index 00000000000..a270f970309 --- /dev/null +++ b/reactos/dll/win32/samsrv/setup.c @@ -0,0 +1,316 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: Security Account Manager (SAM) Server + * FILE: reactos/dll/win32/samsrv/setup.c + * PURPOSE: Registry setup routines + * + * PROGRAMMERS: Eric Kohl + */ + +/* INCLUDES ****************************************************************/ + +#include "samsrv.h" + +WINE_DEFAULT_DEBUG_CHANNEL(samsrv); + + +/* FUNCTIONS ***************************************************************/ + +BOOL +SampIsSetupRunning(VOID) +{ + DWORD dwError; + HKEY hKey; + DWORD dwType; + DWORD dwSize; + DWORD dwSetupType; + + TRACE("SampIsSetupRunning()\n"); + + /* Open key */ + dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SYSTEM\\Setup", + 0, + KEY_QUERY_VALUE, + &hKey); + if (dwError != ERROR_SUCCESS) + return FALSE; + + /* Read key */ + dwSize = sizeof(DWORD); + dwError = RegQueryValueExW(hKey, + L"SetupType", + NULL, + &dwType, + (LPBYTE)&dwSetupType, + &dwSize); + + /* Close key, and check if returned values are correct */ + RegCloseKey(hKey); + if (dwError != ERROR_SUCCESS || dwType != REG_DWORD || dwSize != sizeof(DWORD)) + return FALSE; + + TRACE("SampIsSetupRunning() returns %s\n", (dwSetupType != 0) ? "TRUE" : "FALSE"); + return (dwSetupType != 0); +} + + +static BOOL +CreateBuiltinAliases(HKEY hAliasesKey) +{ + return TRUE; +} + + +static BOOL +CreateBuiltinGroups(HKEY hGroupsKey) +{ + return TRUE; +} + + +static BOOL +CreateBuiltinUsers(HKEY hUsersKey) +{ + return TRUE; +} + + +BOOL +SampInitializeSAM(VOID) +{ + DWORD dwDisposition; + HKEY hSamKey; + HKEY hDomainsKey; + HKEY hAccountKey; + HKEY hBuiltinKey; + HKEY hAliasesKey; + HKEY hGroupsKey; + HKEY hUsersKey; + + TRACE("SampInitializeSAM() called\n"); + + if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, + L"SAM\\SAM", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hSamKey, + &dwDisposition)) + { + ERR("Failed to create 'Sam' key! (Error %lu)\n", GetLastError()); + return FALSE; + } + + if (RegCreateKeyExW(hSamKey, + L"Domains", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hDomainsKey, + &dwDisposition)) + { + ERR("Failed to create 'Domains' key! (Error %lu)\n", GetLastError()); + RegCloseKey(hSamKey); + return FALSE; + } + + RegCloseKey (hSamKey); + + /* Create the 'Domains\\Account' key */ + if (RegCreateKeyExW(hDomainsKey, + L"Account", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hAccountKey, + &dwDisposition)) + { + ERR("Failed to create 'Domains\\Account' key! (Error %lu)\n", GetLastError()); + RegCloseKey(hDomainsKey); + return FALSE; + } + + + /* Create the 'Account\Aliases' key */ + if (RegCreateKeyExW(hAccountKey, + L"Aliases", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hAliasesKey, + &dwDisposition)) + { + ERR("Failed to create 'Account\\Aliases' key! (Error %lu)\n", GetLastError()); + RegCloseKey(hAccountKey); + RegCloseKey(hDomainsKey); + return FALSE; + } + + RegCloseKey (hAliasesKey); + + + /* Create the 'Account\Groups' key */ + if (RegCreateKeyExW(hAccountKey, + L"Groups", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hGroupsKey, + &dwDisposition)) + { + ERR("Failed to create 'Account\\Groups' key! (Error %lu)\n", GetLastError()); + RegCloseKey(hAccountKey); + RegCloseKey(hDomainsKey); + return FALSE; + } + + RegCloseKey(hGroupsKey); + + + /* Create the 'Account\Users' key */ + if (RegCreateKeyExW(hAccountKey, + L"Users", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hUsersKey, + &dwDisposition)) + { + ERR("Failed to create 'Account\\Users' key! (Error %lu)\n", GetLastError()); + RegCloseKey(hAccountKey); + RegCloseKey(hDomainsKey); + return FALSE; + } + + RegCloseKey(hUsersKey); + + RegCloseKey(hAccountKey); + + + /* Create the 'Domains\\Builtin' */ + if (RegCreateKeyExW(hDomainsKey, + L"Builtin", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hBuiltinKey, + &dwDisposition)) + { + ERR("Failed to create Builtin key! (Error %lu)\n", GetLastError()); + RegCloseKey(hDomainsKey); + return FALSE; + } + + + /* Create the 'Builtin\Aliases' key */ + if (RegCreateKeyExW(hBuiltinKey, + L"Aliases", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hAliasesKey, + &dwDisposition)) + { + ERR("Failed to create 'Builtin\\Aliases' key! (Error %lu)\n", GetLastError()); + RegCloseKey(hBuiltinKey); + RegCloseKey(hDomainsKey); + return FALSE; + } + + /* Create builtin aliases */ + if (!CreateBuiltinAliases(hAliasesKey)) + { + ERR("Failed to create builtin aliases!\n"); + RegCloseKey(hAliasesKey); + RegCloseKey(hBuiltinKey); + RegCloseKey(hDomainsKey); + return FALSE; + } + + RegCloseKey(hAliasesKey); + + + /* Create the 'Builtin\Groups' key */ + if (RegCreateKeyExW(hBuiltinKey, + L"Groups", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hGroupsKey, + &dwDisposition)) + { + ERR("Failed to create 'Builtin\\Groups' key! (Error %lu)\n", GetLastError()); + RegCloseKey(hBuiltinKey); + RegCloseKey(hDomainsKey); + return FALSE; + } + + /* Create builtin groups */ + if (!CreateBuiltinGroups(hGroupsKey)) + { + ERR("Failed to create builtin groups!\n"); + RegCloseKey(hGroupsKey); + RegCloseKey(hBuiltinKey); + RegCloseKey(hDomainsKey); + return FALSE; + } + + RegCloseKey(hGroupsKey); + + + /* Create the 'Builtin\Users' key */ + if (RegCreateKeyExW(hBuiltinKey, + L"Users", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hUsersKey, + &dwDisposition)) + { + ERR("Failed to create 'Builtin\\Users' key! (Error %lu)\n", GetLastError()); + RegCloseKey(hBuiltinKey); + RegCloseKey(hDomainsKey); + return FALSE; + } + + /* Create builtin users */ + if (!CreateBuiltinUsers(hUsersKey)) + { + ERR("Failed to create builtin users!\n"); + RegCloseKey(hUsersKey); + RegCloseKey(hBuiltinKey); + RegCloseKey(hDomainsKey); + return FALSE; + } + + RegCloseKey(hUsersKey); + + RegCloseKey(hBuiltinKey); + + RegCloseKey(hDomainsKey); + + TRACE("SampInitializeSAM() done\n"); + + return TRUE; +} diff --git a/reactos/dll/win32/syssetup/install.c b/reactos/dll/win32/syssetup/install.c index c3f2643da2a..1e611254a5a 100644 --- a/reactos/dll/win32/syssetup/install.c +++ b/reactos/dll/win32/syssetup/install.c @@ -893,13 +893,6 @@ InstallReactOS(HINSTANCE hInstance) return 0; } - /* Initialize the Security Account Manager (SAM) */ - if (!SamInitializeSAM()) - { - FatalError("SamInitializeSAM() failed!"); - return 0; - } - /* Create the semi-random Domain-SID */ if (!CreateRandomSid(&DomainSid)) { diff --git a/reactos/include/reactos/libs/samlib/samlib.h b/reactos/include/reactos/libs/samlib/samlib.h index 7f56fc58687..f7df5e7f101 100644 --- a/reactos/include/reactos/libs/samlib/samlib.h +++ b/reactos/include/reactos/libs/samlib/samlib.h @@ -26,9 +26,6 @@ #define __SAMLIB_H_INCLUDED__ -BOOL WINAPI -SamInitializeSAM (VOID); - BOOL WINAPI SamCreateUser (PWSTR UserName, PWSTR UserPassword,