/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
- * FILE: lib/userenv/profile.c
+ * FILE: dll/win32/userenv/profile.c
* PURPOSE: User profile code
* PROGRAMMERS: Eric Kohl
* Hervé Poussineau
#include "precomp.h"
+#include <sddl.h>
+
#define NDEBUG
#include <debug.h>
-
/* FUNCTIONS ***************************************************************/
BOOL
LPWSTR lpBuffer;
BOOL bResult;
+ if (!lpProfileDir || !lpcchSize)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
lpBuffer = GlobalAlloc(GMEM_FIXED,
*lpcchSize * sizeof(WCHAR));
if (lpBuffer == NULL)
HKEY hKey;
LONG Error;
+ if (!lpcchSize)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
Error = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList",
0,
LPWSTR lpBuffer;
BOOL bResult;
+ if (!lpProfileDir || !lpcchSize)
+ {
+ SetLastError( ERROR_INVALID_PARAMETER );
+ return FALSE;
+ }
+
lpBuffer = GlobalAlloc(GMEM_FIXED,
*lpcchSize * sizeof(WCHAR));
if (lpBuffer == NULL)
HKEY hKey;
LONG Error;
- if (!GetUserSidFromToken(hToken,
- &SidString))
+ if (!lpcchSize)
+ {
+ SetLastError( ERROR_INVALID_PARAMETER );
+ return FALSE;
+ }
+
+ if (!GetUserSidStringFromToken(hToken,
+ &SidString))
{
DPRINT1("GetUserSidFromToken() failed\n");
return FALSE;
DPRINT("CheckForLoadedProfile() called\n");
- if (!GetUserSidFromToken(hToken,
- &SidString))
+ if (!GetUserSidStringFromToken(hToken,
+ &SidString))
{
DPRINT1("GetUserSidFromToken() failed\n");
return FALSE;
}
/* Get user SID string */
- ret = GetUserSidFromToken(hToken, &SidString);
+ ret = GetUserSidStringFromToken(hToken, &SidString);
if (!ret)
{
DPRINT1("GetUserSidFromToken() failed\n");
SidString.Buffer,
szUserHivePath);
AcquireRemoveRestorePrivilege(FALSE);
+
+ /* HACK: Do not fail if the profile has already been loaded! */
+ if (Error == ERROR_SHARING_VIOLATION)
+ Error = ERROR_SUCCESS;
+
if (Error != ERROR_SUCCESS)
{
DPRINT1("RegLoadKeyW() failed (Error %ld)\n", Error);
RegCloseKey(hProfile);
- if (!GetUserSidFromToken(hToken,
- &SidString))
+ if (!GetUserSidStringFromToken(hToken,
+ &SidString))
{
DPRINT1("GetUserSidFromToken() failed\n");
return FALSE;