Complete user profile creation.

Add LoadUserProfileW() stub.

svn path=/trunk/; revision=8436
This commit is contained in:
Eric Kohl
2004-02-28 11:30:59 +00:00
parent 0b2f62bcf5
commit bba7724b2d
4 changed files with 273 additions and 4 deletions
+24 -1
View File
@@ -1,4 +1,4 @@
/* $Id: profile.c,v 1.4 2004/01/23 10:39:22 ekohl Exp $
/* $Id: profile.c,v 1.5 2004/02/28 11:30:59 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
@@ -90,6 +90,7 @@ CreateUserProfileW (PSID Sid,
HKEY hKey;
NTSTATUS Status;
DPRINT ("CreateUserProfileW() called\n");
if (RegOpenKeyExW (HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList",
@@ -269,6 +270,8 @@ CreateUserProfileW (PSID Sid,
RtlFreeUnicodeString (&SidString);
DPRINT ("CreateUserProfileW() done\n");
return TRUE;
}
@@ -507,4 +510,24 @@ GetUserProfileDirectoryW (HANDLE hToken,
return GetDefaultUserProfileDirectoryW (lpProfileDir, lpcchSize);
}
BOOL WINAPI
LoadUserProfileW (HANDLE hToken,
LPPROFILEINFOW lpProfileInfo)
{
/* Check profile info */
if (lpProfileInfo->dwSize != sizeof(PROFILEINFOW) ||
lpProfileInfo->lpUserName == NULL ||
lpProfileInfo->lpUserName[0] == 0)
{
SetLastError (ERROR_INVALID_PARAMETER);
return FALSE;
}
/* FIXME: load the profile */
return TRUE;
}
/* EOF */
+247 -3
View File
@@ -1,4 +1,4 @@
/* $Id: registry.c,v 1.1 2004/01/16 15:31:53 ekohl Exp $
/* $Id: registry.c,v 1.2 2004/02/28 11:30:59 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
@@ -16,11 +16,255 @@
/* FUNCTIONS ***************************************************************/
BOOL
CreateUserHive (LPCWSTR lpKeyName)
static BOOL
CopyKey (HKEY hDstKey,
HKEY hSrcKey)
{
FILETIME LastWrite;
DWORD dwSubKeys;
DWORD dwValues;
DWORD dwType;
DWORD dwMaxSubKeyNameLength;
DWORD dwSubKeyNameLength;
DWORD dwMaxValueNameLength;
DWORD dwValueNameLength;
DWORD dwMaxValueLength;
DWORD dwValueLength;
DWORD dwDisposition;
DWORD i;
LPWSTR lpNameBuffer;
LPBYTE lpDataBuffer;
HKEY hDstSubKey;
HKEY hSrcSubKey;
DPRINT ("CopyKey() called \n");
if (RegQueryInfoKey (hSrcKey,
NULL,
NULL,
NULL,
&dwSubKeys,
&dwMaxSubKeyNameLength,
NULL,
&dwValues,
&dwMaxValueNameLength,
&dwMaxValueLength,
NULL,
NULL))
{
DPRINT1("Error: %lu\n", GetLastError ());
return FALSE;
}
DPRINT ("dwSubKeys %lu\n", dwSubKeys);
DPRINT ("dwMaxSubKeyNameLength %lu\n", dwMaxSubKeyNameLength);
DPRINT ("dwValues %lu\n", dwValues);
DPRINT ("dwMaxValueNameLength %lu\n", dwMaxValueNameLength);
DPRINT ("dwMaxValueLength %lu\n", dwMaxValueLength);
/* Copy subkeys */
if (dwSubKeys != 0)
{
lpNameBuffer = HeapAlloc (GetProcessHeap (),
0,
dwMaxSubKeyNameLength * sizeof(WCHAR));
if (lpNameBuffer == NULL)
{
DPRINT1("Buffer allocation failed\n");
return FALSE;
}
for (i = 0; i < dwSubKeys; i++)
{
dwSubKeyNameLength = dwMaxSubKeyNameLength;
if (RegEnumKeyExW (hSrcKey,
i,
lpNameBuffer,
&dwSubKeyNameLength,
NULL,
NULL,
NULL,
&LastWrite))
{
DPRINT1("Subkey enumeration failed (Error %lu)\n", GetLastError());
HeapFree (GetProcessHeap (),
0,
lpNameBuffer);
return FALSE;
}
if (RegCreateKeyExW (hDstKey,
lpNameBuffer,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_WRITE,
NULL,
&hDstSubKey,
&dwDisposition))
{
DPRINT1("Subkey creation failed (Error %lu)\n", GetLastError());
HeapFree (GetProcessHeap (),
0,
lpNameBuffer);
return FALSE;
}
if (RegOpenKeyExW (hSrcKey,
lpNameBuffer,
0,
KEY_READ,
&hSrcSubKey))
{
DPRINT1("Error: %lu\n", GetLastError());
RegCloseKey (hDstSubKey);
HeapFree (GetProcessHeap (),
0,
lpNameBuffer);
return FALSE;
}
if (!CopyKey (hDstSubKey,
hSrcSubKey))
{
DPRINT1("Error: %lu\n", GetLastError());
RegCloseKey (hSrcSubKey);
RegCloseKey (hDstSubKey);
HeapFree (GetProcessHeap (),
0,
lpNameBuffer);
return FALSE;
}
RegCloseKey (hSrcSubKey);
RegCloseKey (hDstSubKey);
}
HeapFree (GetProcessHeap (),
0,
lpNameBuffer);
}
/* Copy values */
if (dwValues != 0)
{
lpNameBuffer = HeapAlloc (GetProcessHeap (),
0,
dwMaxValueNameLength * sizeof(WCHAR));
if (lpNameBuffer == NULL)
{
DPRINT1("Buffer allocation failed\n");
return FALSE;
}
lpDataBuffer = HeapAlloc (GetProcessHeap (),
0,
dwMaxValueLength);
if (lpDataBuffer == NULL)
{
DPRINT1("Buffer allocation failed\n");
HeapFree (GetProcessHeap (),
0,
lpNameBuffer);
return FALSE;
}
for (i = 0; i < dwValues; i++)
{
dwValueNameLength = dwMaxValueNameLength;
dwValueLength = dwMaxValueLength;
if (RegEnumValueW (hSrcKey,
i,
lpNameBuffer,
&dwValueNameLength,
NULL,
&dwType,
lpDataBuffer,
&dwValueLength))
{
DPRINT1("Error: %lu\n", GetLastError());
HeapFree (GetProcessHeap (),
0,
lpDataBuffer);
HeapFree (GetProcessHeap (),
0,
lpNameBuffer);
return FALSE;
}
if (RegSetValueEx (hDstKey,
lpNameBuffer,
0,
dwType,
lpDataBuffer,
dwValueLength))
{
DPRINT1("Error: %lu\n", GetLastError());
HeapFree (GetProcessHeap (),
0,
lpDataBuffer);
HeapFree (GetProcessHeap (),
0,
lpNameBuffer);
return FALSE;
}
}
HeapFree (GetProcessHeap (),
0,
lpDataBuffer);
HeapFree (GetProcessHeap (),
0,
lpNameBuffer);
}
DPRINT ("CopyKey() done \n");
return TRUE;
}
BOOL
CreateUserHive (LPCWSTR lpKeyName)
{
HKEY hDefaultKey;
HKEY hUserKey;
BOOL bResult;
DPRINT ("CreateUserHive(%S) called\n", lpKeyName);
if (RegOpenKeyExW (HKEY_USERS,
L".Default",
0,
KEY_READ,
&hDefaultKey))
{
DPRINT1("Error: %lu\n", GetLastError());
return FALSE;
}
if (RegOpenKeyExW (HKEY_USERS,
lpKeyName,
0,
KEY_ALL_ACCESS,
&hUserKey))
{
DPRINT1("Error: %lu\n", GetLastError());
RegCloseKey (hDefaultKey);
return FALSE;
}
bResult = CopyKey (hUserKey,
hDefaultKey);
RegCloseKey (hUserKey);
RegCloseKey (hDefaultKey);
DPRINT ("CreateUserHive() done\n");
return bResult;
}
/* EOF */
+1
View File
@@ -6,4 +6,5 @@ GetDefaultUserProfileDirectoryW@8
GetProfilesDirectoryW@8
GetUserProfileDirectoryW@12
CreateUserProfileW@8
LoadUserProfileW@8
;EOF
+1
View File
@@ -6,4 +6,5 @@ GetDefaultUserProfileDirectoryW=GetDefaultUserProfileDirectoryW@8
GetProfilesDirectoryW=GetProfilesDirectoryW@8
GetUserProfileDirectoryW=GetUserProfileDirectoryW@12
CreateUserProfileW=CreateUserProfileW@8
LoadUserProfileW=LoadUserProfileW@8
;EOF