/* INCLUDES *****************************************************************/
-#include <ddk/ntddk.h>
-#include <ntdll/rtl.h>
+#include <usetup.h>
-#include "usetup.h"
-#include "registry.h"
-#include "infcache.h"
+#define NDEBUG
+#include <debug.h>
-
-
-#define FLG_ADDREG_DELREG_BIT 0x00008000
#define FLG_ADDREG_BINVALUETYPE 0x00000001
#define FLG_ADDREG_NOCLOBBER 0x00000002
#define FLG_ADDREG_DELVAL 0x00000004
#define FLG_ADDREG_APPEND 0x00000008
#define FLG_ADDREG_KEYONLY 0x00000010
#define FLG_ADDREG_OVERWRITEONLY 0x00000020
-#define FLG_ADDREG_64BITKEY 0x00001000
-#define FLG_ADDREG_KEYONLY_COMMON 0x00002000
-#define FLG_ADDREG_32BITKEY 0x00004000
#define FLG_ADDREG_TYPE_SZ 0x00000000
#define FLG_ADDREG_TYPE_MULTI_SZ 0x00010000
#define FLG_ADDREG_TYPE_EXPAND_SZ 0x00020000
#define FLG_ADDREG_TYPE_NONE (0x00020000 | FLG_ADDREG_BINVALUETYPE)
#define FLG_ADDREG_TYPE_MASK (0xFFFF0000 | FLG_ADDREG_BINVALUETYPE)
-#define FLG_DELREG_VALUE (0x00000000)
-#define FLG_DELREG_TYPE_MASK FLG_ADDREG_TYPE_MASK
-#define FLG_DELREG_TYPE_SZ FLG_ADDREG_TYPE_SZ
-#define FLG_DELREG_TYPE_MULTI_SZ FLG_ADDREG_TYPE_MULTI_SZ
-#define FLG_DELREG_TYPE_EXPAND_SZ FLG_ADDREG_TYPE_EXPAND_SZ
-#define FLG_DELREG_TYPE_BINARY FLG_ADDREG_TYPE_BINARY
-#define FLG_DELREG_TYPE_DWORD FLG_ADDREG_TYPE_DWORD
-#define FLG_DELREG_TYPE_NONE FLG_ADDREG_TYPE_NONE
-#define FLG_DELREG_64BITKEY FLG_ADDREG_64BITKEY
-#define FLG_DELREG_KEYONLY_COMMON FLG_ADDREG_KEYONLY_COMMON
-#define FLG_DELREG_32BITKEY FLG_ADDREG_32BITKEY
-#define FLG_DELREG_OPERATION_MASK (0x000000FE)
-#define FLG_DELREG_MULTI_SZ_DELSTRING (FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT | 0x00000002)
+#include <pshpack1.h>
+typedef struct _REG_DISK_MOUNT_INFO
+{
+ ULONG Signature;
+ LARGE_INTEGER StartingOffset;
+} REG_DISK_MOUNT_INFO, *PREG_DISK_MOUNT_INFO;
-/* FUNCTIONS ****************************************************************/
+#include <poppack.h>
+/* FUNCTIONS ****************************************************************/
static BOOLEAN
GetRootKey (PWCHAR Name)
WCHAR EmptyStr = (WCHAR)0;
ULONG Type;
ULONG Size;
- NTSTATUS Status;
- if (Flags & (FLG_ADDREG_DELREG_BIT | FLG_ADDREG_DELVAL)) /* deletion */
+ if (Flags & FLG_ADDREG_DELVAL) /* deletion */
{
#if 0
- if (ValueName && !(flags & FLG_DELREG_KEYONLY_COMMON))
+ if (ValueName)
{
- if ((Flags & FLG_DELREG_MULTI_SZ_DELSTRING) == FLG_DELREG_MULTI_SZ_DELSTRING)
- {
- WCHAR *str;
-
- if (!SetupGetStringFieldW( context, 5, NULL, 0, &size ) || !size) return TRUE;
- if (!(str = HeapAlloc( GetProcessHeap(), 0, size * sizeof(WCHAR) ))) return FALSE;
- SetupGetStringFieldW( context, 5, str, size, NULL );
- delete_multi_sz_value( hkey, value, str );
- HeapFree( GetProcessHeap(), 0, str );
- }
- else
- {
- RegDeleteValueW( hkey, value );
- }
+ RegDeleteValueW( hkey, value );
}
else
{
return TRUE;
}
- if (Flags & (FLG_ADDREG_KEYONLY | FLG_ADDREG_KEYONLY_COMMON))
+ if (Flags & FLG_ADDREG_KEYONLY)
return TRUE;
#if 0
{
ULONG dw = Str ? wcstol (Str, NULL, 0) : 0;
- DPRINT1("setting dword %wZ to %lx\n", ValueName, dw);
+ DPRINT("setting dword %wZ to %lx\n", ValueName, dw);
- Status = NtSetValueKey (KeyHandle,
- ValueName,
- 0,
- Type,
- (PVOID)&dw,
- sizeof(ULONG));
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
- }
+ NtSetValueKey (KeyHandle,
+ ValueName,
+ 0,
+ Type,
+ (PVOID)&dw,
+ sizeof(ULONG));
}
else
{
- DPRINT1("setting value %wZ to %S\n", ValueName, Str);
+ DPRINT("setting value %wZ to %S\n", ValueName, Str);
if (Str)
{
- Status = NtSetValueKey (KeyHandle,
+ NtSetValueKey (KeyHandle,
ValueName,
0,
Type,
(PVOID)Str,
Size * sizeof(WCHAR));
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
- }
}
else
{
- Status = NtSetValueKey (KeyHandle,
+ NtSetValueKey (KeyHandle,
ValueName,
0,
Type,
(PVOID)&EmptyStr,
sizeof(WCHAR));
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
- }
}
}
RtlFreeHeap (ProcessHeap, 0, Str);
if (Data == NULL)
return FALSE;
- DPRINT1("setting binary data %wZ len %lu\n", ValueName, Size);
+ DPRINT("setting binary data %wZ len %lu\n", ValueName, Size);
InfGetBinaryField (Context, 5, Data, Size, NULL);
}
- Status = NtSetValueKey (KeyHandle,
- ValueName,
- 0,
- Type,
- (PVOID)Data,
- Size);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
- }
+ NtSetValueKey (KeyHandle,
+ ValueName,
+ 0,
+ Type,
+ (PVOID)Data,
+ Size);
RtlFreeHeap (ProcessHeap, 0, Data);
}
{
if (Length == FullNameLength)
{
- Status == STATUS_SUCCESS;
+ Status = STATUS_SUCCESS;
*KeyHandle = LocalKeyHandle;
break;
}
if (!InfGetStringField (&Context, 2, Buffer + Length, MAX_INF_STRING_LENGTH - Length, NULL))
*Buffer = 0;
- DPRINT1("KeyName: <%S>\n", Buffer);
+ DPRINT("KeyName: <%S>\n", Buffer);
/* get flags */
if (!InfGetIntField (&Context, 4, (PLONG)&Flags))
Flags = 0;
- DPRINT1("Flags: %lx\n", Flags);
-
- if (!Delete)
- {
- if (Flags & FLG_ADDREG_DELREG_BIT)
- continue; /* ignore this entry */
- }
- else
- {
- if (!Flags)
- Flags = FLG_ADDREG_DELREG_BIT;
- else if (!(Flags & FLG_ADDREG_DELREG_BIT))
- continue; /* ignore this entry */
- }
+ DPRINT("Flags: %lx\n", Flags);
RtlInitUnicodeString (&Name,
Buffer);
&ObjectAttributes);
if (!NT_SUCCESS(Status))
{
- DPRINT1("NtOpenKey(%wZ) failed (Status %lx)\n", &Name, Status);
+ DPRINT("NtOpenKey(%wZ) failed (Status %lx)\n", &Name, Status);
continue; /* ignore if it doesn't exist */
}
}
&ObjectAttributes);
if (!NT_SUCCESS(Status))
{
- DPRINT1("CreateNestedKey(%wZ) failed (Status %lx)\n", &Name, Status);
+ DPRINT("CreateNestedKey(%wZ) failed (Status %lx)\n", &Name, Status);
continue;
}
}
BOOLEAN
-ImportRegistryData(PWSTR Filename)
+ImportRegistryFile(PWSTR Filename,
+ PWSTR Section,
+ BOOLEAN Delete)
{
WCHAR FileNameBuffer[MAX_PATH];
UNICODE_STRING FileName;
/* Load inf file from install media. */
wcscpy(FileNameBuffer, SourceRootPath.Buffer);
- wcscat(FileNameBuffer, L"\\install\\");
+ wcscat(FileNameBuffer, L"\\reactos\\");
wcscat(FileNameBuffer, Filename);
RtlInitUnicodeString(&FileName,
}
-NTSTATUS
-SetupUpdateRegistry(VOID)
+BOOLEAN
+SetInstallPathValue(PUNICODE_STRING InstallPath)
{
-#if 0
OBJECT_ATTRIBUTES ObjectAttributes;
- UNICODE_STRING KeyName;
- UNICODE_STRING ValueName;
+ UNICODE_STRING KeyName = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\HARDWARE");
+ UNICODE_STRING ValueName = RTL_CONSTANT_STRING(L"InstallPath");
HANDLE KeyHandle;
NTSTATUS Status;
- RtlInitUnicodeStringFromLiteral(&KeyName,
- L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control");
- InitializeObjectAttributes(&ObjectAttributes,
- &KeyName,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL);
- Status = NtCreateKey(&KeyHandle,
+ /* Create the 'secret' InstallPath key */
+ InitializeObjectAttributes (&ObjectAttributes,
+ &KeyName,
+ OBJ_CASE_INSENSITIVE,
+ NULL,
+ NULL);
+ Status = NtOpenKey (&KeyHandle,
KEY_ALL_ACCESS,
- &ObjectAttributes,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- NULL);
+ &ObjectAttributes);
if (!NT_SUCCESS(Status))
{
- DPRINT1("NtCreateKey() failed (Status %lx)\n", Status);
+ DPRINT1("NtOpenKey() failed (Status %lx)\n", Status);
+ return FALSE;
}
+ Status = NtSetValueKey (KeyHandle,
+ &ValueName,
+ 0,
+ REG_SZ,
+ (PVOID)InstallPath->Buffer,
+ InstallPath->Length);
NtClose(KeyHandle);
-
-
- /* Create '\Registry\Machine\System\Setup' key */
- RtlInitUnicodeStringFromLiteral(&KeyName,
- L"\\Registry\\Machine\\SYSTEM\\Setup");
- InitializeObjectAttributes(&ObjectAttributes,
- &KeyName,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL);
- Status = NtCreateKey(&KeyHandle,
- KEY_ALL_ACCESS,
- &ObjectAttributes,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- NULL);
if (!NT_SUCCESS(Status))
{
- DPRINT1("NtCreateKey() failed (Status %lx)\n", Status);
- }
-
- /* FIXME: Create value 'SetupType' */
-
- /* FIXME: Create value 'SystemSetupInProgress' */
-
-
- NtClose(KeyHandle);
-#endif
-
-
- SetStatusText(" Importing hivesys.inf...");
-
- if (!ImportRegistryData (L"hivesys.inf"))
- {
- DPRINT1("ImportRegistryData (\"hivesys.inf\") failed\n");
+ DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
+ return FALSE;
}
- SetStatusText(" Done...");
-
- return STATUS_SUCCESS;
+ return TRUE;
}
-
BOOLEAN
-SetInstallPathValue(PUNICODE_STRING InstallPath)
+SetMountedDeviceValue(CHAR Letter, ULONG Signature, LARGE_INTEGER StartingOffset)
{
OBJECT_ATTRIBUTES ObjectAttributes;
- UNICODE_STRING KeyName;
+ WCHAR ValueNameBuffer[16];
+ UNICODE_STRING KeyName = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\SYSTEM\\MountedDevices");
UNICODE_STRING ValueName;
- HANDLE KeyHandle;
+ REG_DISK_MOUNT_INFO MountInfo;
NTSTATUS Status;
+ HANDLE KeyHandle;
- /* Create the 'secret' InstallPath key */
- RtlInitUnicodeStringFromLiteral (&KeyName,
- L"\\Registry\\Machine\\HARDWARE");
+ swprintf(ValueNameBuffer, L"\\DosDevices\\%C:", Letter);
+ RtlInitUnicodeString(&ValueName, ValueNameBuffer);
+
InitializeObjectAttributes (&ObjectAttributes,
&KeyName,
OBJ_CASE_INSENSITIVE,
&ObjectAttributes);
if (!NT_SUCCESS(Status))
{
- DPRINT1("NtOpenKey() failed (Status %lx)\n", Status);
+ Status = NtCreateKey(&KeyHandle,
+ KEY_ALL_ACCESS,
+ &ObjectAttributes,
+ 0,
+ NULL,
+ REG_OPTION_NON_VOLATILE,
+ NULL);
+ }
+
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("NtCreateKey() failed (Status %lx)\n", Status);
return FALSE;
}
- RtlInitUnicodeStringFromLiteral (&ValueName,
- L"InstallPath");
+ MountInfo.Signature = Signature;
+ MountInfo.StartingOffset = StartingOffset;
Status = NtSetValueKey (KeyHandle,
&ValueName,
0,
- REG_SZ,
- (PVOID)InstallPath->Buffer,
- InstallPath->Length);
+ REG_BINARY,
+ (PVOID)&MountInfo,
+ sizeof(MountInfo));
NtClose(KeyHandle);
if (!NT_SUCCESS(Status))
{