[MKHIVE]
[reactos.git] / reactos / tools / mkhive / reginf.c
index 901c500..9e03c08 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  ReactOS kernel
- *  Copyright (C) 2003 ReactOS Team
+ *  Copyright (C) 2003, 2006 ReactOS Team
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
-/* $Id$
- * COPYRIGHT:       See COPYING in the top level directory
+/* COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS hive maker
  * FILE:            tools/mkhive/reginf.h
  * PURPOSE:         Inf file import code
  * PROGRAMMER:      Eric Kohl
+ *                  HervĂ© Poussineau
  */
 
 /* INCLUDES *****************************************************************/
 #include <stdlib.h>
 #include <stdio.h>
 
+#define NDEBUG
 #include "mkhive.h"
-#include "registry.h"
-#include <infhost.h>
-
-
 
 #define FLG_ADDREG_BINVALUETYPE           0x00000001
 #define FLG_ADDREG_NOCLOBBER              0x00000002
 /* FUNCTIONS ****************************************************************/
 
 static BOOL
-GetRootKey (PCHAR Name)
+GetRootKey (PWCHAR 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 (!_wcsicmp (Name, L"HKCR"))
+       {
+               wcscpy (Name, L"\\Registry\\Machine\\SOFTWARE\\Classes\\");
+               return TRUE;
+       }
+
+       if (!_wcsicmp (Name, L"HKCU"))
+       {
+               wcscpy (Name, L"\\Registry\\User\\.DEFAULT\\");
+               return TRUE;
+       }
+
+       if (!_wcsicmp (Name, L"HKLM"))
+       {
+               wcscpy (Name, L"\\Registry\\Machine\\");
+               return TRUE;
+       }
+
+       if (!_wcsicmp (Name, L"HKU"))
+       {
+               wcscpy (Name, L"\\Registry\\User\\");
+               return TRUE;
+       }
 
 #if 0
-  if (!strcasecmp (Name, "HKR"))
-    return FALSE;
+       if (!_wcsicmp (Name, L"HKR"))
+               return FALSE;
 #endif
 
   return FALSE;
@@ -95,71 +92,78 @@ GetRootKey (PCHAR Name)
  * Append a multisz string to a multisz registry value.
  */
 static VOID
-AppendMultiSzValue (HKEY KeyHandle,
-                   PCHAR ValueName,
-                   PCHAR Strings,
-                   ULONG StringSize)
+AppendMultiSzValue (
+       IN HKEY KeyHandle,
+       IN PWCHAR ValueName,
+       IN PWCHAR Strings,
+       IN SIZE_T StringSize)
 {
-  ULONG Size;
-  ULONG Type;
-  ULONG Total;
-  PCHAR Buffer;
-  PCHAR p;
-  int len;
-  LONG Error;
-
-  Error = RegQueryValue (KeyHandle,
-                        ValueName,
-                        &Type,
-                        NULL,
-                        &Size);
-  if ((Error != ERROR_SUCCESS) ||
-      (Type != REG_MULTI_SZ))
-    return;
-
-  Buffer = malloc (Size + StringSize);
-  if (Buffer == NULL)
-     return;
-
-  Error = RegQueryValue (KeyHandle,
-                        ValueName,
-                        NULL,
-                        (PCHAR)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);
-      RegSetValue (KeyHandle,
-                  ValueName,
-                  REG_MULTI_SZ,
-                  (PCHAR)Buffer,
-                  Total);
-    }
+       SIZE_T Size;
+       ULONG Type;
+       size_t Total;
+       PWCHAR Buffer;
+       PWCHAR p;
+       size_t len;
+       LONG Error;
+
+       Error = RegQueryValueExW (
+               KeyHandle,
+               ValueName,
+               NULL,
+               &Type,
+               NULL,
+               &Size);
+       if ((Error != ERROR_SUCCESS) ||
+           (Type != REG_MULTI_SZ))
+               return;
+
+       Buffer = malloc (Size + (StringSize * sizeof(WCHAR)));
+       if (Buffer == NULL)
+               return;
+
+       Error = RegQueryValueExW (
+               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 = wcslen (Strings) + 1;
+
+               for (p = Buffer; *p != 0; p += wcslen (p) + 1)
+                       if (!_wcsicmp (p, Strings))
+                               break;
+
+               if (*p == 0)  /* not found, need to append it */
+               {
+                       memcpy (p, Strings, len * sizeof(WCHAR));
+                       p[len] = 0;
+                       Total += len * sizeof(WCHAR);
+               }
+               Strings += len;
+       }
+
+       if (Total != Size)
+       {
+               DPRINT ("setting value %S to %S\n", ValueName, Buffer);
+               RegSetValueExW (
+                       KeyHandle,
+                       ValueName,
+                       0,
+                       REG_MULTI_SZ,
+                       (PUCHAR)Buffer,
+                       (ULONG)Total);
+       }
 
 done:
-  free (Buffer);
+       free (Buffer);
 }
 
 
@@ -169,340 +173,321 @@ done:
  * 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 PWCHAR ValueName,
+       IN PINFCONTEXT Context,
+       IN ULONG Flags)
 {
-  CHAR EmptyStr = (CHAR)0;
-  ULONG Type;
-  ULONG Size;
-  LONG Error;
-
-  if (Flags & FLG_ADDREG_DELVAL)  /* deletion */
-    {
-      if (ValueName)
-       {
-         RegDeleteValue (KeyHandle,
-                         ValueName);
-       }
-      else
+       WCHAR EmptyStr = (WCHAR)0;
+       ULONG Type;
+       ULONG Size;
+       LONG Error;
+
+       if (Flags & FLG_ADDREG_DELVAL)  /* deletion */
        {
-         RegDeleteKey (KeyHandle,
-                       NULL);
+               if (ValueName)
+               {
+                       RegDeleteValueW (KeyHandle, ValueName);
+               }
+               else
+               {
+                       RegDeleteKeyW (KeyHandle, NULL);
+               }
+
+               return TRUE;
        }
 
-      return TRUE;
-    }
-
-  if (Flags & FLG_ADDREG_KEYONLY)
-    return TRUE;
-
-  if (Flags & (FLG_ADDREG_NOCLOBBER | FLG_ADDREG_OVERWRITEONLY))
-    {
-      Error = RegQueryValue (KeyHandle,
-                            ValueName,
-                            NULL,
-                            NULL,
-                            NULL);
-      if ((Error == ERROR_SUCCESS) &&
-         (Flags & FLG_ADDREG_NOCLOBBER))
-       return TRUE;
+       if (Flags & FLG_ADDREG_KEYONLY)
+               return TRUE;
 
-      if ((Error != ERROR_SUCCESS) &&
-         (Flags & FLG_ADDREG_OVERWRITEONLY))
-       return TRUE;
-    }
+       if (Flags & (FLG_ADDREG_NOCLOBBER | FLG_ADDREG_OVERWRITEONLY))
+       {
+               Error = RegQueryValueExW (
+                       KeyHandle,
+                       ValueName,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL);
+               if ((Error == ERROR_SUCCESS) &&
+                   (Flags & FLG_ADDREG_NOCLOBBER))
+                       return TRUE;
 
-  switch (Flags & FLG_ADDREG_TYPE_MASK)
-    {
-      case FLG_ADDREG_TYPE_SZ:
-       Type = REG_SZ;
-       break;
+               if ((Error != ERROR_SUCCESS) &&
+                   (Flags & FLG_ADDREG_OVERWRITEONLY))
+                       return TRUE;
+       }
 
-      case FLG_ADDREG_TYPE_MULTI_SZ:
-       Type = REG_MULTI_SZ;
-       break;
+       switch (Flags & FLG_ADDREG_TYPE_MASK)
+       {
+               case FLG_ADDREG_TYPE_SZ:
+                       Type = REG_SZ;
+                       break;
 
-      case FLG_ADDREG_TYPE_EXPAND_SZ:
-       Type = REG_EXPAND_SZ;
-       break;
+               case FLG_ADDREG_TYPE_MULTI_SZ:
+                       Type = REG_MULTI_SZ;
+                       break;
 
-      case FLG_ADDREG_TYPE_BINARY:
-       Type = REG_BINARY;
-       break;
+               case FLG_ADDREG_TYPE_EXPAND_SZ:
+                       Type = REG_EXPAND_SZ;
+                       break;
 
-      case FLG_ADDREG_TYPE_DWORD:
-       Type = REG_DWORD;
-       break;
+               case FLG_ADDREG_TYPE_BINARY:
+                       Type = REG_BINARY;
+                       break;
 
-      case FLG_ADDREG_TYPE_NONE:
-       Type = REG_NONE;
-       break;
+               case FLG_ADDREG_TYPE_DWORD:
+                       Type = REG_DWORD;
+                       break;
 
-      default:
-       Type = Flags >> 16;
-       break;
-    }
+               case FLG_ADDREG_TYPE_NONE:
+                       Type = REG_NONE;
+                       break;
 
-  if (!(Flags & FLG_ADDREG_BINVALUETYPE) ||
-      (Type == REG_DWORD && InfHostGetFieldCount (Context) == 5))
-    {
-      PCHAR Str = NULL;
+               default:
+                       Type = Flags >> 16;
+                       break;
+       }
 
-      if (Type == REG_MULTI_SZ)
+       if (!(Flags & FLG_ADDREG_BINVALUETYPE) ||
+           (Type == REG_DWORD && InfHostGetFieldCount (Context) == 5))
        {
-         if (InfHostGetMultiSzField (Context, 5, NULL, 0, &Size) != 0)
-           Size = 0;
+               WCHAR *Str = NULL;
 
-         if (Size)
-           {
-             Str = malloc (Size);
-             if (Str == NULL)
-               return FALSE;
-
-             InfHostGetMultiSzField (Context, 5, Str, Size, NULL);
-           }
+               if (Type == REG_MULTI_SZ)
+               {
+                       if (InfHostGetMultiSzField (Context, 5, NULL, 0, &Size) != 0)
+                               Size = 0;
+
+                       if (Size)
+                       {
+                               Str = malloc (Size * sizeof(WCHAR));
+                               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 (Flags & FLG_ADDREG_APPEND)
-           {
-             if (Str == NULL)
-               return TRUE;
+                       if (Size)
+                       {
+                               Str = malloc (Size * sizeof(WCHAR));
+                               if (Str == NULL)
+                                       return FALSE;
 
-             AppendMultiSzValue (KeyHandle,
-                                 ValueName,
-                                 Str,
-                                 Size);
+                               InfHostGetStringField (Context, 5, Str, (ULONG)Size, NULL);
+                       }
+               }
 
-             free (Str);
-             return TRUE;
-           }
-         /* else fall through to normal string handling */
-       }
-      else
-       {
-         if (InfHostGetStringField (Context, 5, NULL, 0, &Size) != 0)
-           Size = 0;
+               if (Type == REG_DWORD)
+               {
+                       ULONG dw = Str ? wcstoul (Str, NULL, 0) : 0;
 
-         if (Size)
-           {
-             Str = malloc (Size);
-             if (Str == NULL)
-               return FALSE;
+                       DPRINT("setting dword %S to %x\n", ValueName, dw);
 
-             InfHostGetStringField (Context, 5, Str, Size, NULL);
-           }
+                       RegSetValueExW (
+                               KeyHandle,
+                               ValueName,
+                               0,
+                               Type,
+                               (const PUCHAR)&dw,
+                               sizeof(ULONG));
+               }
+               else
+               {
+                       DPRINT("setting value %S to %S\n", ValueName, Str);
+
+                       if (Str)
+                       {
+                               RegSetValueExW (
+                                       KeyHandle,
+                                       ValueName,
+                                       0,
+                                       Type,
+                                       (PVOID)Str,
+                                       (ULONG)Size * sizeof(WCHAR));
+                       }
+                       else
+                       {
+                               RegSetValueExW (
+                                       KeyHandle,
+                                       ValueName,
+                                       0,
+                                       Type,
+                                       (PVOID)&EmptyStr,
+                                       (ULONG)sizeof(WCHAR));
+                       }
+               }
+               free (Str);
        }
-
-      if (Type == REG_DWORD)
+       else  /* get the binary data */
        {
-         ULONG dw = Str ? strtoul (Str, NULL, 0) : 0;
+               PUCHAR Data = NULL;
 
-         DPRINT("setting dword %s to %lx\n", ValueName, dw);
+               if (InfHostGetBinaryField (Context, 5, NULL, 0, &Size) != 0)
+                       Size = 0;
 
-         RegSetValue (KeyHandle,
-                      ValueName,
-                      Type,
-                      (PVOID)&dw,
-                      sizeof(ULONG));
-       }
-      else
-       {
-         DPRINT("setting value %s to %s\n", ValueName, Str);
-
-         if (Str)
-           {
-             RegSetValue (KeyHandle,
-                          ValueName,
-                          Type,
-                          (PVOID)Str,
-                          Size);
-           }
-         else
-           {
-             RegSetValue (KeyHandle,
-                          ValueName,
-                          Type,
-                          (PVOID)&EmptyStr,
-                          sizeof(CHAR));
-           }
-       }
-      free (Str);
-    }
-  else  /* get the binary data */
-    {
-      PCHAR Data = NULL;
+               if (Size)
+               {
+                       Data = malloc (Size);
+                       if (Data == NULL)
+                               return FALSE;
 
-      if (InfHostGetBinaryField (Context, 5, NULL, 0, &Size) != 0)
-       Size = 0;
+                       DPRINT("setting binary data %S len %d\n", ValueName, Size);
+                       InfHostGetBinaryField (Context, 5, Data, Size, NULL);
+               }
 
-      if (Size)
-       {
-         Data = malloc (Size);
-         if (Data == NULL)
-           return FALSE;
+               RegSetValueExW (
+                       KeyHandle,
+                       ValueName,
+                       0,
+                       Type,
+                       (PVOID)Data,
+                       (ULONG)Size);
 
-         DPRINT("setting binary data %s len %lu\n", ValueName, Size);
-         InfHostGetBinaryField (Context, 5, Data, Size, NULL);
+               free (Data);
        }
 
-      RegSetValue (KeyHandle,
-                  ValueName,
-                  Type,
-                  (PVOID)Data,
-                  Size);
-
-      free (Data);
-    }
-
-  return TRUE;
-}
-
-ULONG get_flags(PINFCONTEXT Context)
-{
-       CHAR Buffer[MAX_INF_STRING_LENGTH], *p;
-       ULONG Ret = 0;
-       
-       if (!InfHostGetStringField (Context, 4, Buffer, MAX_INF_STRING_LENGTH, NULL))
-       {
-               p = strtok(Buffer, " |");
-               while(p)
-               {
-                       if(isdigit(*p))Ret|=strtol(p, NULL, 0);
-                       else if(strcmp(p, "BINVALUETYPE")==0) Ret|= FLG_ADDREG_BINVALUETYPE;
-                       else if(strcmp(p, "NOCLOBBER")==0) Ret|= FLG_ADDREG_NOCLOBBER;
-                       else if(strcmp(p, "DELVAL")==0) Ret|= FLG_ADDREG_DELVAL;
-                       else if(strcmp(p, "APPEND")==0) Ret|= FLG_ADDREG_APPEND;
-                       else if(strcmp(p, "KEYONLY")==0) Ret|= FLG_ADDREG_KEYONLY;
-                       else if(strcmp(p, "OVERWRITEONLY")==0) Ret|= FLG_ADDREG_OVERWRITEONLY;
-                       else if(strcmp(p, "TYPE_SZ")==0) Ret|= FLG_ADDREG_TYPE_SZ;
-                       else if(strcmp(p, "TYPE_MULTI_SZ")==0) Ret|= FLG_ADDREG_TYPE_MULTI_SZ;
-                       else if(strcmp(p, "TYPE_EXPAND_SZ")==0) Ret|= FLG_ADDREG_TYPE_EXPAND_SZ;
-                       else if(strcmp(p, "TYPE_BINARY")==0) Ret|= FLG_ADDREG_TYPE_BINARY;
-                       else if(strcmp(p, "TYPE_DWORD")==0) Ret|= FLG_ADDREG_TYPE_DWORD;
-                       else if(strcmp(p, "TYPE_NONE")==0) Ret|= FLG_ADDREG_TYPE_NONE;
-                       else if(strcmp(p, "TYPE_MASK")==0) Ret|= FLG_ADDREG_TYPE_MASK;
-                       p = strtok(NULL, " |");
-               }
-       }
-       
-       return Ret;
+       return TRUE;
 }
 
-
 /***********************************************************************
  *            registry_callback
  *
  * Called once for each AddReg and DelReg entry in a given section.
  */
 static BOOL
-registry_callback (HINF hInf, PCHAR Section, BOOL Delete)
+registry_callback (HINF hInf, PWCHAR Section, BOOL Delete)
 {
-  CHAR Buffer[MAX_INF_STRING_LENGTH];
-  PCHAR ValuePtr;
-  ULONG Flags;
-  ULONG Length;
+       WCHAR Buffer[MAX_INF_STRING_LENGTH];
+       PWCHAR ValuePtr;
+       ULONG Flags;
+       size_t Length;
 
-  PINFCONTEXT Context = NULL;
-  HKEY KeyHandle;
-  BOOL Ok;
+       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 */
+       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;
+       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 - Length, NULL) != 0)
-       *Buffer = 0;
+               /* get key */
+               Length = wcslen (Buffer);
+               if (InfHostGetStringField (Context, 2, Buffer + Length, MAX_INF_STRING_LENGTH - (ULONG)Length, NULL) != 0)
+                       *Buffer = 0;
 
-      DPRINT("KeyName: <%s>\n", Buffer);
+               DPRINT("KeyName: <%S>\n", Buffer);
 
-      if (Delete)
-        {
-          Flags = FLG_ADDREG_DELVAL;
-        }
-      else Flags = get_flags(Context);
+               if (Delete)
+               {
+                       Flags = FLG_ADDREG_DELVAL;
+               }
+               else
+               {
+                       /* get flags */
+                       if (InfHostGetIntField (Context, 4, &Flags) != 0)
+                               Flags = 0;
+               }
 
-      DPRINT("Flags: %lx\n", Flags);
+               DPRINT("Flags: 0x%x\n", Flags);
 
-      if (Delete || (Flags & FLG_ADDREG_OVERWRITEONLY))
-       {
-         if (RegOpenKey (NULL, Buffer, &KeyHandle) != ERROR_SUCCESS)
-           {
-             DPRINT("RegOpenKey(%s) failed\n", Buffer);
-             continue;  /* ignore if it doesn't exist */
-           }
-       }
-      else
-       {
-         if (RegCreateKey (NULL, Buffer, &KeyHandle) != ERROR_SUCCESS)
-           {
-             DPRINT("RegCreateKey(%s) failed\n", Buffer);
-             continue;
-           }
-       }
+               if (Delete || (Flags & FLG_ADDREG_OVERWRITEONLY))
+               {
+                       if (RegOpenKeyW (NULL, Buffer, &KeyHandle) != ERROR_SUCCESS)
+                       {
+                               DPRINT("RegOpenKey(%S) failed\n", Buffer);
+                               continue;  /* ignore if it doesn't exist */
+                       }
+               }
+               else
+               {
+                       if (RegCreateKeyW (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;
-       }
+               /* 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;
+               /* and now do it */
+               if (!do_reg_operation (KeyHandle, ValuePtr, Context, Flags))
+               {
+                       return FALSE;
+               }
        }
-    }
 
-  InfHostFreeContext(Context);
+       InfHostFreeContext(Context);
 
-  return TRUE;
+       return TRUE;
 }
 
 
 BOOL
-ImportRegistryFile(PCHAR FileName,
-                  PCHAR Section,
-                  BOOL Delete)
+ImportRegistryFile(PCHAR FileName)
 {
-  HINF hInf;
-  ULONG ErrorLine;
+       HINF hInf;
+       ULONG ErrorLine;
 
-  /* Load inf file from install media. */
-  if (InfHostOpenFile(&hInf, FileName, &ErrorLine) != 0)
-    {
-      DPRINT1 ("InfHostOpenFile() failed\n");
-      return FALSE;
-    }
+       /* Load inf file from install media. */
+       if (InfHostOpenFile(&hInf, FileName, 0, &ErrorLine) != 0)
+       {
+               DPRINT1 ("InfHostOpenFile(%s) failed\n", FileName);
+               return FALSE;
+       }
 
-  if (!registry_callback (hInf, "DelReg", TRUE))
-    {
-      DPRINT1 ("registry_callback() failed\n");
-    }
+       if (!registry_callback (hInf, L"DelReg", TRUE))
+       {
+               DPRINT1 ("registry_callback() for DelReg failed\n");
+       }
 
-  if (!registry_callback (hInf, "AddReg", FALSE))
-    {
-      DPRINT1 ("registry_callback() failed\n");
-    }
+       if (!registry_callback (hInf, L"AddReg", FALSE))
+       {
+               DPRINT1 ("registry_callback() for AddReg failed\n");
+       }
 
-  InfHostCloseFile (hInf);
+       InfHostCloseFile (hInf);
 
-  return TRUE;
+       return TRUE;
 }
 
 /* EOF */