mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-30 12:23:28 +00:00
Complete user profile creation.
Add LoadUserProfileW() stub. svn path=/trunk/; revision=8436
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -6,4 +6,5 @@ GetDefaultUserProfileDirectoryW@8
|
||||
GetProfilesDirectoryW@8
|
||||
GetUserProfileDirectoryW@12
|
||||
CreateUserProfileW@8
|
||||
LoadUserProfileW@8
|
||||
;EOF
|
||||
|
||||
@@ -6,4 +6,5 @@ GetDefaultUserProfileDirectoryW=GetDefaultUserProfileDirectoryW@8
|
||||
GetProfilesDirectoryW=GetProfilesDirectoryW@8
|
||||
GetUserProfileDirectoryW=GetUserProfileDirectoryW@12
|
||||
CreateUserProfileW=CreateUserProfileW@8
|
||||
LoadUserProfileW=LoadUserProfileW@8
|
||||
;EOF
|
||||
|
||||
Reference in New Issue
Block a user