Author: hpoussin
Date: Thu Aug 30 12:38:30 2007
New Revision: 28667
URL:
http://svn.reactos.org/svn/reactos?rev=28667&view=rev
Log:
[FORMATTING] Fix spaces/tabs mess
No code change.
Modified:
trunk/reactos/tools/mkhive/mkhive.c
trunk/reactos/tools/mkhive/reginf.c
Modified: trunk/reactos/tools/mkhive/mkhive.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/mkhive/mkhive.c?rev=…
==============================================================================
--- trunk/reactos/tools/mkhive/mkhive.c (original)
+++ trunk/reactos/tools/mkhive/mkhive.c Thu Aug 30 12:38:30 2007
@@ -49,127 +49,126 @@
void usage (void)
{
- printf ("Usage: mkhive <srcdir> <dstdir> [addinf]\n\n");
- printf (" srcdir - inf files are read from this directory\n");
- printf (" dstdir - binary hive files are created in this directory\n");
- printf (" addinf - additional inf files with full path\n");
+ printf ("Usage: mkhive <srcdir> <dstdir> [addinf]\n\n");
+ printf (" srcdir - inf files are read from this directory\n");
+ printf (" dstdir - binary hive files are created in this directory\n");
+ printf (" addinf - additional inf files with full path\n");
}
void convert_path(char *dst, char *src)
{
- int i;
+ int i;
- i = 0;
- while (src[i] != 0)
- {
+ i = 0;
+ while (src[i] != 0)
+ {
#ifdef WINDOWS_HOST
- if (src[i] == '/')
- {
- dst[i] = '\\';
+ if (src[i] == '/')
+ {
+ dst[i] = '\\';
+ }
+#else
+ if (src[i] == '\\')
+ {
+ dst[i] = '/';
+ }
+#endif
+ else
+ {
+ dst[i] = src[i];
+ }
+
+ i++;
}
-#else
- if (src[i] == '\\')
- {
- dst[i] = '/';
- }
-#endif
- else
- {
- dst[i] = src[i];
- }
-
- i++;
- }
- dst[i] = 0;
+ dst[i] = 0;
}
-
int main (int argc, char *argv[])
{
- char FileName[PATH_MAX];
- int Param;
+ char FileName[PATH_MAX];
+ int Param;
- printf ("Binary hive maker\n");
+ printf ("Binary hive maker\n");
- if (argc < 3)
- {
- usage ();
- return 1;
- }
+ if (argc < 3)
+ {
+ usage ();
+ return 1;
+ }
- RegInitializeRegistry ();
+ RegInitializeRegistry ();
- convert_path (FileName, argv[1]);
- strcat (FileName, DIR_SEPARATOR_STRING);
- strcat (FileName, "hivesys.inf");
- ImportRegistryFile (FileName);
+ convert_path (FileName, argv[1]);
+ strcat (FileName, DIR_SEPARATOR_STRING);
+ strcat (FileName, "hivesys.inf");
+ ImportRegistryFile (FileName);
- convert_path (FileName, argv[1]);
- strcat (FileName, DIR_SEPARATOR_STRING);
- strcat (FileName, "hivecls.inf");
- ImportRegistryFile (FileName);
+ convert_path (FileName, argv[1]);
+ strcat (FileName, DIR_SEPARATOR_STRING);
+ strcat (FileName, "hivecls.inf");
+ ImportRegistryFile (FileName);
- convert_path (FileName, argv[1]);
- strcat (FileName, DIR_SEPARATOR_STRING);
- strcat (FileName, "hivesft.inf");
- ImportRegistryFile (FileName);
+ convert_path (FileName, argv[1]);
+ strcat (FileName, DIR_SEPARATOR_STRING);
+ strcat (FileName, "hivesft.inf");
+ ImportRegistryFile (FileName);
- convert_path (FileName, argv[1]);
- strcat (FileName, DIR_SEPARATOR_STRING);
- strcat (FileName, "hivedef.inf");
- ImportRegistryFile (FileName);
+ convert_path (FileName, argv[1]);
+ strcat (FileName, DIR_SEPARATOR_STRING);
+ strcat (FileName, "hivedef.inf");
+ ImportRegistryFile (FileName);
- for (Param = 3; Param < argc; Param++)
- {
- convert_path (FileName, argv[Param]);
- ImportRegistryFile (FileName);
- }
+ for (Param = 3; Param < argc; Param++)
+ {
+ convert_path (FileName, argv[Param]);
+ ImportRegistryFile (FileName);
+ }
- convert_path (FileName, argv[2]);
- strcat (FileName, DIR_SEPARATOR_STRING);
- strcat (FileName, "default");
- if (!ExportBinaryHive (FileName, &DefaultHive))
- {
- return 1;
- }
+ convert_path (FileName, argv[2]);
+ strcat (FileName, DIR_SEPARATOR_STRING);
+ strcat (FileName, "default");
+ if (!ExportBinaryHive (FileName, &DefaultHive))
+ {
+ return 1;
+ }
- convert_path (FileName, argv[2]);
- strcat (FileName, DIR_SEPARATOR_STRING);
- strcat (FileName, "sam");
- if (!ExportBinaryHive (FileName, &SamHive))
- {
- return 1;
- }
+ convert_path (FileName, argv[2]);
+ strcat (FileName, DIR_SEPARATOR_STRING);
+ strcat (FileName, "sam");
+ if (!ExportBinaryHive (FileName, &SamHive))
+ {
+ return 1;
+ }
- convert_path (FileName, argv[2]);
- strcat (FileName, DIR_SEPARATOR_STRING);
- strcat (FileName, "security");
- if (!ExportBinaryHive (FileName, &SecurityHive))
- {
- return 1;
- }
+ convert_path (FileName, argv[2]);
+ strcat (FileName, DIR_SEPARATOR_STRING);
+ strcat (FileName, "security");
+ if (!ExportBinaryHive (FileName, &SecurityHive))
+ {
+ return 1;
+ }
- convert_path (FileName, argv[2]);
- strcat (FileName, DIR_SEPARATOR_STRING);
- strcat (FileName, "software");
- if (!ExportBinaryHive (FileName, &SoftwareHive))
- {
- return 1;
- }
+ convert_path (FileName, argv[2]);
+ strcat (FileName, DIR_SEPARATOR_STRING);
+ strcat (FileName, "software");
+ if (!ExportBinaryHive (FileName, &SoftwareHive))
+ {
+ return 1;
+ }
- convert_path (FileName, argv[2]);
- strcat (FileName, DIR_SEPARATOR_STRING);
- strcat (FileName, "system");
- if (!ExportBinaryHive (FileName, &SystemHive))
- {
- return 1;
- }
+ convert_path (FileName, argv[2]);
+ strcat (FileName, DIR_SEPARATOR_STRING);
+ strcat (FileName, "system");
+ if (!ExportBinaryHive (FileName, &SystemHive))
+ {
+ return 1;
+ }
-// RegShutdownRegistry ();
+ //RegShutdownRegistry ();
- printf (" Done.\n");
+ printf (" Done.\n");
- return 0;
+ return 0;
}
/* EOF */
Modified: trunk/reactos/tools/mkhive/reginf.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/mkhive/reginf.c?rev=…
==============================================================================
--- trunk/reactos/tools/mkhive/reginf.c (original)
+++ trunk/reactos/tools/mkhive/reginf.c Thu Aug 30 12:38:30 2007
@@ -53,33 +53,33 @@
static BOOL
GetRootKey (PCHAR Name)
{
- if (!strcasecmp (Name, "HKCR"))
- {
- strcpy (Name, "\\Registry\\Machine\\SOFTWARE\\Classes\\");
- return TRUE;
- }
-
- if (!strcasecmp (Name, "HKCU"))
- {
- strcpy (Name, "\\Registry\\User\\.DEFAULT\\");
- return TRUE;
- }
-
- if (!strcasecmp (Name, "HKLM"))
- {
- strcpy (Name, "\\Registry\\Machine\\");
- return TRUE;
- }
-
- if (!strcasecmp (Name, "HKU"))
- {
- strcpy (Name, "\\Registry\\User\\");
- return TRUE;
- }
+ if (!strcasecmp (Name, "HKCR"))
+ {
+ strcpy (Name, "\\Registry\\Machine\\SOFTWARE\\Classes\\");
+ return TRUE;
+ }
+
+ if (!strcasecmp (Name, "HKCU"))
+ {
+ strcpy (Name, "\\Registry\\User\\.DEFAULT\\");
+ return TRUE;
+ }
+
+ if (!strcasecmp (Name, "HKLM"))
+ {
+ strcpy (Name, "\\Registry\\Machine\\");
+ return TRUE;
+ }
+
+ if (!strcasecmp (Name, "HKU"))
+ {
+ strcpy (Name, "\\Registry\\User\\");
+ return TRUE;
+ }
#if 0
- if (!strcasecmp (Name, "HKR"))
- return FALSE;
+ if (!strcasecmp (Name, "HKR"))
+ return FALSE;
#endif
return FALSE;
@@ -92,74 +92,78 @@
* Append a multisz string to a multisz registry value.
*/
static VOID
-AppendMultiSzValue (HKEY KeyHandle,
- PCHAR ValueName,
- PCHAR Strings,
- SIZE_T StringSize)
+AppendMultiSzValue (
+ IN HKEY KeyHandle,
+ IN PCHAR ValueName,
+ IN PCHAR Strings,
+ IN SIZE_T StringSize)
{
- SIZE_T Size;
- ULONG Type;
- size_t Total;
- PCHAR Buffer;
- PCHAR p;
- size_t len;
- LONG Error;
-
- Error = RegQueryValueExA (KeyHandle,
- ValueName,
- NULL,
- &Type,
- NULL,
- &Size);
- if ((Error != ERROR_SUCCESS) ||
- (Type != REG_MULTI_SZ))
- return;
-
- Buffer = malloc (Size + StringSize);
- if (Buffer == NULL)
- return;
-
- Error = RegQueryValueExA (KeyHandle,
- ValueName,
- NULL,
- NULL,
- (PUCHAR)Buffer,
- &Size);
- if (Error != ERROR_SUCCESS)
- goto done;
-
- /* compare each string against all the existing ones */
- Total = Size;
- while (*Strings != 0)
- {
- len = strlen (Strings) + 1;
-
- for (p = Buffer; *p != 0; p += strlen (p) + 1)
- if (!strcasecmp (p, Strings))
- break;
-
- if (*p == 0) /* not found, need to append it */
- {
- memcpy (p, Strings, len);
- p[len] = 0;
- Total += len;
- }
- Strings += len;
- }
-
- if (Total != Size)
- {
- DPRINT ("setting value %s to %s\n", ValueName, Buffer);
- RegSetValueExA (KeyHandle,
- ValueName,
- 0,
- REG_MULTI_SZ,
- (PCHAR)Buffer,
- (ULONG)Total);
- }
+ SIZE_T Size;
+ ULONG Type;
+ size_t Total;
+ PCHAR Buffer;
+ PCHAR p;
+ size_t len;
+ LONG Error;
+
+ Error = RegQueryValueExA (
+ KeyHandle,
+ ValueName,
+ NULL,
+ &Type,
+ NULL,
+ &Size);
+ if ((Error != ERROR_SUCCESS) ||
+ (Type != REG_MULTI_SZ))
+ return;
+
+ Buffer = malloc (Size + StringSize);
+ if (Buffer == NULL)
+ return;
+
+ Error = RegQueryValueExA (
+ KeyHandle,
+ ValueName,
+ NULL,
+ NULL,
+ (PUCHAR)Buffer,
+ &Size);
+ if (Error != ERROR_SUCCESS)
+ goto done;
+
+ /* compare each string against all the existing ones */
+ Total = Size;
+ while (*Strings != 0)
+ {
+ len = strlen (Strings) + 1;
+
+ for (p = Buffer; *p != 0; p += strlen (p) + 1)
+ if (!strcasecmp (p, Strings))
+ break;
+
+ if (*p == 0) /* not found, need to append it */
+ {
+ memcpy (p, Strings, len);
+ p[len] = 0;
+ Total += len;
+ }
+ Strings += len;
+ }
+
+ if (Total != Size)
+ {
+ DPRINT ("setting value %s to %s\n", ValueName, Buffer);
+ RegSetValueExA (
+ KeyHandle,
+ ValueName,
+ 0,
+ REG_MULTI_SZ,
+ (PCHAR)Buffer,
+ (ULONG)Total);
+ }
done:
- free (Buffer);
+ free (Buffer);
}
@@ -169,200 +173,204 @@
* Perform an add/delete registry operation depending on the flags.
*/
static BOOL
-do_reg_operation(HKEY KeyHandle,
- PCHAR ValueName,
- PINFCONTEXT Context,
- ULONG Flags)
+do_reg_operation(
+ IN HKEY KeyHandle,
+ IN PCHAR ValueName,
+ IN PINFCONTEXT Context,
+ IN ULONG Flags)
{
- CHAR EmptyStr = (CHAR)0;
- ULONG Type;
- SIZE_T Size;
- LONG Error;
-
- if (Flags & FLG_ADDREG_DELVAL) /* deletion */
- {
- if (ValueName)
- {
- RegDeleteValueA (KeyHandle,
- ValueName);
- }
- else
- {
- RegDeleteKeyA (KeyHandle,
+ CHAR EmptyStr = (CHAR)0;
+ ULONG Type;
+ SIZE_T Size;
+ LONG Error;
+
+ if (Flags & FLG_ADDREG_DELVAL) /* deletion */
+ {
+ if (ValueName)
+ {
+ RegDeleteValueA (KeyHandle, ValueName);
+ }
+ else
+ {
+ RegDeleteKeyA (KeyHandle, NULL);
+ }
+
+ return TRUE;
+ }
+
+ if (Flags & FLG_ADDREG_KEYONLY)
+ return TRUE;
+
+ if (Flags & (FLG_ADDREG_NOCLOBBER | FLG_ADDREG_OVERWRITEONLY))
+ {
+ Error = RegQueryValueExA (
+ KeyHandle,
+ ValueName,
+ NULL,
+ NULL,
+ NULL,
NULL);
- }
-
- return TRUE;
- }
-
- if (Flags & FLG_ADDREG_KEYONLY)
- return TRUE;
-
- if (Flags & (FLG_ADDREG_NOCLOBBER | FLG_ADDREG_OVERWRITEONLY))
- {
- Error = RegQueryValueExA (KeyHandle,
- ValueName,
- NULL,
- NULL,
- NULL,
- NULL);
- if ((Error == ERROR_SUCCESS) &&
- (Flags & FLG_ADDREG_NOCLOBBER))
+ if ((Error == ERROR_SUCCESS) &&
+ (Flags & FLG_ADDREG_NOCLOBBER))
+ return TRUE;
+
+ if ((Error != ERROR_SUCCESS) &&
+ (Flags & FLG_ADDREG_OVERWRITEONLY))
+ return TRUE;
+ }
+
+ switch (Flags & FLG_ADDREG_TYPE_MASK)
+ {
+ case FLG_ADDREG_TYPE_SZ:
+ Type = REG_SZ;
+ break;
+
+ case FLG_ADDREG_TYPE_MULTI_SZ:
+ Type = REG_MULTI_SZ;
+ break;
+
+ case FLG_ADDREG_TYPE_EXPAND_SZ:
+ Type = REG_EXPAND_SZ;
+ break;
+
+ case FLG_ADDREG_TYPE_BINARY:
+ Type = REG_BINARY;
+ break;
+
+ case FLG_ADDREG_TYPE_DWORD:
+ Type = REG_DWORD;
+ break;
+
+ case FLG_ADDREG_TYPE_NONE:
+ Type = REG_NONE;
+ break;
+
+ default:
+ Type = Flags >> 16;
+ break;
+ }
+
+ if (!(Flags & FLG_ADDREG_BINVALUETYPE) ||
+ (Type == REG_DWORD && InfHostGetFieldCount (Context) == 5))
+ {
+ PCHAR Str = NULL;
+
+ if (Type == REG_MULTI_SZ)
+ {
+ if (InfHostGetMultiSzField (Context, 5, NULL, 0, &Size) != 0)
+ Size = 0;
+
+ if (Size)
+ {
+ Str = malloc (Size);
+ if (Str == NULL)
+ return FALSE;
+
+ InfHostGetMultiSzField (Context, 5, Str, (ULONG)Size, NULL);
+ }
+
+ if (Flags & FLG_ADDREG_APPEND)
+ {
+ if (Str == NULL)
+ return TRUE;
+
+ AppendMultiSzValue (
+ KeyHandle,
+ ValueName,
+ Str,
+ Size);
+
+ free (Str);
+ return TRUE;
+ }
+ /* else fall through to normal string handling */
+ }
+ else
+ {
+ if (InfHostGetStringField (Context, 5, NULL, 0, &Size) != 0)
+ Size = 0;
+
+ if (Size)
+ {
+ Str = malloc (Size);
+ if (Str == NULL)
+ return FALSE;
+
+ InfHostGetStringField (Context, 5, Str, (ULONG)Size, NULL);
+ }
+ }
+
+ if (Type == REG_DWORD)
+ {
+ ULONG dw = Str ? strtoul (Str, NULL, 0) : 0;
+
+ DPRINT("setting dword %s to %lx\n", ValueName, dw);
+
+ RegSetValueExA (
+ KeyHandle,
+ ValueName,
+ 0,
+ Type,
+ (const PUCHAR)&dw,
+ sizeof(ULONG));
+ }
+ else
+ {
+ DPRINT("setting value %s to %s\n", ValueName, Str);
+
+ if (Str)
+ {
+ RegSetValueExA (
+ KeyHandle,
+ ValueName,
+ 0,
+ Type,
+ (PVOID)Str,
+ (ULONG)Size);
+ }
+ else
+ {
+ RegSetValueExA (
+ KeyHandle,
+ ValueName,
+ 0,
+ Type,
+ (PVOID)&EmptyStr,
+ (ULONG)sizeof(CHAR));
+ }
+ }
+ free (Str);
+ }
+ else /* get the binary data */
+ {
+ PCHAR Data = NULL;
+
+ if (InfHostGetBinaryField (Context, 5, NULL, 0, &Size) != 0)
+ Size = 0;
+
+ if (Size)
+ {
+ Data = malloc (Size);
+ if (Data == NULL)
+ return FALSE;
+
+ DPRINT("setting binary data %s len %lu\n", ValueName, Size);
+ InfHostGetBinaryField (Context, 5, Data, (ULONG)Size, NULL);
+ }
+
+ RegSetValueExA (
+ KeyHandle,
+ ValueName,
+ 0,
+ Type,
+ (PVOID)Data,
+ (ULONG)Size);
+
+ free (Data);
+ }
+
return TRUE;
-
- if ((Error != ERROR_SUCCESS) &&
- (Flags & FLG_ADDREG_OVERWRITEONLY))
- return TRUE;
- }
-
- switch (Flags & FLG_ADDREG_TYPE_MASK)
- {
- case FLG_ADDREG_TYPE_SZ:
- Type = REG_SZ;
- break;
-
- case FLG_ADDREG_TYPE_MULTI_SZ:
- Type = REG_MULTI_SZ;
- break;
-
- case FLG_ADDREG_TYPE_EXPAND_SZ:
- Type = REG_EXPAND_SZ;
- break;
-
- case FLG_ADDREG_TYPE_BINARY:
- Type = REG_BINARY;
- break;
-
- case FLG_ADDREG_TYPE_DWORD:
- Type = REG_DWORD;
- break;
-
- case FLG_ADDREG_TYPE_NONE:
- Type = REG_NONE;
- break;
-
- default:
- Type = Flags >> 16;
- break;
- }
-
- if (!(Flags & FLG_ADDREG_BINVALUETYPE) ||
- (Type == REG_DWORD && InfHostGetFieldCount (Context) == 5))
- {
- PCHAR Str = NULL;
-
- if (Type == REG_MULTI_SZ)
- {
- if (InfHostGetMultiSzField (Context, 5, NULL, 0, &Size) != 0)
- Size = 0;
-
- if (Size)
- {
- Str = malloc (Size);
- if (Str == NULL)
- return FALSE;
-
- InfHostGetMultiSzField (Context, 5, Str, (ULONG)Size, NULL);
- }
-
- if (Flags & FLG_ADDREG_APPEND)
- {
- if (Str == NULL)
- return TRUE;
-
- AppendMultiSzValue (KeyHandle,
- ValueName,
- Str,
- Size);
-
- free (Str);
- return TRUE;
- }
- /* else fall through to normal string handling */
- }
- else
- {
- if (InfHostGetStringField (Context, 5, NULL, 0, &Size) != 0)
- Size = 0;
-
- if (Size)
- {
- Str = malloc (Size);
- if (Str == NULL)
- return FALSE;
-
- InfHostGetStringField (Context, 5, Str, (ULONG)Size, NULL);
- }
- }
-
- if (Type == REG_DWORD)
- {
- ULONG dw = Str ? strtoul (Str, NULL, 0) : 0;
-
- DPRINT("setting dword %s to %lx\n", ValueName, dw);
-
- RegSetValueExA (KeyHandle,
- ValueName,
- 0,
- Type,
- (const PUCHAR)&dw,
- sizeof(ULONG));
- }
- else
- {
- DPRINT("setting value %s to %s\n", ValueName, Str);
-
- if (Str)
- {
- RegSetValueExA (KeyHandle,
- ValueName,
- 0,
- Type,
- (PVOID)Str,
- (ULONG)Size);
- }
- else
- {
- RegSetValueExA (KeyHandle,
- ValueName,
- 0,
- Type,
- (PVOID)&EmptyStr,
- (ULONG)sizeof(CHAR));
- }
- }
- free (Str);
- }
- else /* get the binary data */
- {
- PCHAR Data = NULL;
-
- if (InfHostGetBinaryField (Context, 5, NULL, 0, &Size) != 0)
- Size = 0;
-
- if (Size)
- {
- Data = malloc (Size);
- if (Data == NULL)
- return FALSE;
-
- DPRINT("setting binary data %s len %lu\n", ValueName, Size);
- InfHostGetBinaryField (Context, 5, Data, (ULONG)Size, NULL);
- }
-
- RegSetValueExA (KeyHandle,
- ValueName,
- 0,
- Type,
- (PVOID)Data,
- (ULONG)Size);
-
- free (Data);
- }
-
- return TRUE;
}
-
/***********************************************************************
* registry_callback
@@ -372,114 +380,114 @@
static BOOL
registry_callback (HINF hInf, PCHAR Section, BOOL Delete)
{
- CHAR Buffer[MAX_INF_STRING_LENGTH];
- PCHAR ValuePtr;
- ULONG Flags;
- size_t Length;
-
- PINFCONTEXT Context = NULL;
- HKEY KeyHandle;
- BOOL Ok;
-
-
- Ok = InfHostFindFirstLine (hInf, Section, NULL, &Context) == 0;
- if (!Ok)
- return TRUE; /* Don't fail if the section isn't present */
-
- for (;Ok; Ok = (InfHostFindNextLine (Context, Context) == 0))
- {
- /* get root */
- if (InfHostGetStringField (Context, 1, Buffer, MAX_INF_STRING_LENGTH, NULL) != 0)
- continue;
- if (!GetRootKey (Buffer))
- continue;
-
- /* get key */
- Length = strlen (Buffer);
- if (InfHostGetStringField (Context, 2, Buffer + Length, MAX_INF_STRING_LENGTH -
(ULONG)Length, NULL) != 0)
- *Buffer = 0;
-
- DPRINT("KeyName: <%s>\n", Buffer);
-
- if (Delete)
- {
- Flags = FLG_ADDREG_DELVAL;
- }
- else
- {
- /* get flags */
- if (InfHostGetIntField (Context, 4, (PLONG)&Flags) != 0)
- Flags = 0;
- }
-
- DPRINT("Flags: %lx\n", Flags);
-
- if (Delete || (Flags & FLG_ADDREG_OVERWRITEONLY))
- {
- if (RegOpenKeyA (NULL, Buffer, &KeyHandle) != ERROR_SUCCESS)
- {
- DPRINT("RegOpenKey(%s) failed\n", Buffer);
- continue; /* ignore if it doesn't exist */
- }
- }
- else
- {
- if (RegCreateKeyA (NULL, Buffer, &KeyHandle) != ERROR_SUCCESS)
- {
- DPRINT("RegCreateKey(%s) failed\n", Buffer);
- continue;
- }
- }
-
- /* get value name */
- if (InfHostGetStringField (Context, 3, Buffer, MAX_INF_STRING_LENGTH, NULL) == 0)
- {
- ValuePtr = Buffer;
- }
- else
- {
- ValuePtr = NULL;
- }
-
- /* and now do it */
- if (!do_reg_operation (KeyHandle, ValuePtr, Context, Flags))
- {
- return FALSE;
- }
- }
-
- InfHostFreeContext(Context);
-
- return TRUE;
+ CHAR Buffer[MAX_INF_STRING_LENGTH];
+ PCHAR ValuePtr;
+ ULONG Flags;
+ size_t Length;
+
+ PINFCONTEXT Context = NULL;
+ HKEY KeyHandle;
+ BOOL Ok;
+
+
+ Ok = InfHostFindFirstLine (hInf, Section, NULL, &Context) == 0;
+ if (!Ok)
+ return TRUE; /* Don't fail if the section isn't present */
+
+ for (;Ok; Ok = (InfHostFindNextLine (Context, Context) == 0))
+ {
+ /* get root */
+ if (InfHostGetStringField (Context, 1, Buffer, MAX_INF_STRING_LENGTH, NULL) != 0)
+ continue;
+ if (!GetRootKey (Buffer))
+ continue;
+
+ /* get key */
+ Length = strlen (Buffer);
+ if (InfHostGetStringField (Context, 2, Buffer + Length, MAX_INF_STRING_LENGTH -
(ULONG)Length, NULL) != 0)
+ *Buffer = 0;
+
+ DPRINT("KeyName: <%s>\n", Buffer);
+
+ if (Delete)
+ {
+ Flags = FLG_ADDREG_DELVAL;
+ }
+ else
+ {
+ /* get flags */
+ if (InfHostGetIntField (Context, 4, (PLONG)&Flags) != 0)
+ Flags = 0;
+ }
+
+ DPRINT("Flags: %lx\n", Flags);
+
+ if (Delete || (Flags & FLG_ADDREG_OVERWRITEONLY))
+ {
+ if (RegOpenKeyA (NULL, Buffer, &KeyHandle) != ERROR_SUCCESS)
+ {
+ DPRINT("RegOpenKey(%s) failed\n", Buffer);
+ continue; /* ignore if it doesn't exist */
+ }
+ }
+ else
+ {
+ if (RegCreateKeyA (NULL, Buffer, &KeyHandle) != ERROR_SUCCESS)
+ {
+ DPRINT("RegCreateKey(%s) failed\n", Buffer);
+ continue;
+ }
+ }
+
+ /* get value name */
+ if (InfHostGetStringField (Context, 3, Buffer, MAX_INF_STRING_LENGTH, NULL) == 0)
+ {
+ ValuePtr = Buffer;
+ }
+ else
+ {
+ ValuePtr = NULL;
+ }
+
+ /* and now do it */
+ if (!do_reg_operation (KeyHandle, ValuePtr, Context, Flags))
+ {
+ return FALSE;
+ }
+ }
+
+ InfHostFreeContext(Context);
+
+ return TRUE;
}
BOOL
ImportRegistryFile(PCHAR FileName)
{
- HINF hInf;
- ULONG ErrorLine;
-
- /* Load inf file from install media. */
- if (InfHostOpenFile(&hInf, FileName, &ErrorLine) != 0)
- {
- DPRINT1 ("InfHostOpenFile() failed\n");
- return FALSE;
- }
-
- if (!registry_callback (hInf, "DelReg", TRUE))
- {
- DPRINT1 ("registry_callback() failed\n");
- }
-
- if (!registry_callback (hInf, "AddReg", FALSE))
- {
- DPRINT1 ("registry_callback() failed\n");
- }
-
- InfHostCloseFile (hInf);
-
- return TRUE;
+ HINF hInf;
+ ULONG ErrorLine;
+
+ /* Load inf file from install media. */
+ if (InfHostOpenFile(&hInf, FileName, &ErrorLine) != 0)
+ {
+ DPRINT1 ("InfHostOpenFile() failed\n");
+ return FALSE;
+ }
+
+ if (!registry_callback (hInf, "DelReg", TRUE))
+ {
+ DPRINT1 ("registry_callback() failed\n");
+ }
+
+ if (!registry_callback (hInf, "AddReg", FALSE))
+ {
+ DPRINT1 ("registry_callback() failed\n");
+ }
+
+ InfHostCloseFile (hInf);
+
+ return TRUE;
}
/* EOF */