mirror of
https://github.com/reactos/reactos.git
synced 2024-07-31 08:39:05 +00:00
Fixed hive import bug.
svn path=/trunk/; revision=2229
This commit is contained in:
parent
0cb3991a23
commit
3fa6827bcd
|
@ -1,4 +1,4 @@
|
|||
/* $Id: import.c,v 1.2 2001/08/30 20:38:18 dwelch Exp $
|
||||
/* $Id: import.c,v 1.3 2001/09/04 21:05:26 ekohl Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -236,9 +236,12 @@ computeKeyValueDataSize (PCHAR regChunk, PCHAR dataFormat)
|
|||
regChunk++;
|
||||
while (*regChunk != 0 && *regChunk != '\"')
|
||||
{
|
||||
dataSize++;
|
||||
dataSize++;
|
||||
regChunk++;
|
||||
}
|
||||
dataSize++;
|
||||
dataSize++;
|
||||
}
|
||||
else if (strcmp (dataFormat, "hex") == 0)
|
||||
{
|
||||
|
@ -252,6 +255,7 @@ computeKeyValueDataSize (PCHAR regChunk, PCHAR dataFormat)
|
|||
regChunk++;
|
||||
if (*regChunk == '\\')
|
||||
{
|
||||
regChunk++;
|
||||
regChunk = skipWhitespaceInChunk (regChunk);
|
||||
}
|
||||
}
|
||||
|
@ -278,19 +282,24 @@ allocateDataBuffer (PVOID * data, int * dataBufferSize, int dataSize)
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static PCHAR
|
||||
|
||||
static PCHAR
|
||||
getKeyValueDataFromChunk (PCHAR regChunk, PCHAR dataFormat, PCHAR data)
|
||||
{
|
||||
char dataValue;
|
||||
|
||||
PWCHAR ptr;
|
||||
|
||||
if (strcmp (dataFormat, "string") == 0)
|
||||
{
|
||||
/* convert quoted string to zero-terminated Unicode string */
|
||||
ptr = (PWCHAR)data;
|
||||
regChunk++;
|
||||
while (*regChunk != 0 && *regChunk != '\"')
|
||||
{
|
||||
*data++ = *regChunk++;
|
||||
*ptr++ = (WCHAR)*regChunk++;
|
||||
}
|
||||
*ptr = 0;
|
||||
regChunk++;
|
||||
}
|
||||
else if (strcmp (dataFormat, "hex") == 0)
|
||||
{
|
||||
|
@ -308,6 +317,7 @@ getKeyValueDataFromChunk (PCHAR regChunk, PCHAR dataFormat, PCHAR data)
|
|||
regChunk++;
|
||||
if (*regChunk == '\\')
|
||||
{
|
||||
regChunk++;
|
||||
regChunk = skipWhitespaceInChunk (regChunk);
|
||||
}
|
||||
}
|
||||
|
@ -349,8 +359,9 @@ setKeyValue (HANDLE currentKey,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
VOID
|
||||
CmImportHive(PCHAR regChunk)
|
||||
VOID
|
||||
CmImportHive(PCHAR ChunkBase,
|
||||
ULONG ChunkSize)
|
||||
{
|
||||
HANDLE currentKey = INVALID_HANDLE_VALUE;
|
||||
int newKeySize;
|
||||
|
@ -360,12 +371,15 @@ CmImportHive(PCHAR regChunk)
|
|||
int dataSize = 0;
|
||||
int dataBufferSize = 0;
|
||||
PVOID data = 0;
|
||||
PCHAR regChunk;
|
||||
|
||||
regChunk = checkAndSkipMagic (regChunk);
|
||||
DPRINT("ChunkBase %p ChunkSize %lx\n", ChunkBase, ChunkSize);
|
||||
|
||||
regChunk = checkAndSkipMagic (ChunkBase);
|
||||
if (regChunk == 0)
|
||||
return;
|
||||
|
||||
while (regChunk != 0 && *regChunk != 0)
|
||||
while (regChunk != 0 && *regChunk != 0 && (((ULONG)regChunk-(ULONG)ChunkBase) < ChunkSize))
|
||||
{
|
||||
regChunk = skipWhitespaceInChunk (regChunk);
|
||||
if (regChunk == 0)
|
||||
|
@ -375,6 +389,7 @@ CmImportHive(PCHAR regChunk)
|
|||
{
|
||||
if (currentKey != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
DPRINT("Closing current key: 0x%lx\n", currentKey);
|
||||
NtClose (currentKey);
|
||||
currentKey = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ VOID PsInit(VOID);
|
|||
VOID CmInitializeRegistry(VOID);
|
||||
VOID CmInitializeRegistry2(VOID);
|
||||
VOID CmShutdownRegistry(VOID);
|
||||
VOID CmImportHive(PCHAR);
|
||||
VOID CmImportHive(PCHAR ChunkBase, ULONG ChunkSize);
|
||||
VOID KdInitSystem(ULONG Reserved, PLOADER_PARAMETER_BLOCK LoaderBlock);
|
||||
|
||||
NTSTATUS RtlpInitNlsSections(ULONG Mod1Start,
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: main.c,v 1.104 2001/09/01 15:36:44 chorns Exp $
|
||||
/* $Id: main.c,v 1.105 2001/09/04 21:06:27 ekohl Exp $
|
||||
*
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/ke/main.c
|
||||
|
@ -905,12 +905,13 @@ ExpInitializeExecutive(VOID)
|
|||
for (i = 1; i < KeLoaderBlock.ModsCount; i++)
|
||||
{
|
||||
start = KeLoaderModules[i].ModStart;
|
||||
length = KeLoaderModules[i].ModEnd - start;
|
||||
name = (PCHAR)KeLoaderModules[i].String;
|
||||
if (RtlpCheckFileNameExtension(name, "") ||
|
||||
RtlpCheckFileNameExtension(name, ".hiv"))
|
||||
{
|
||||
CPRINT("Process registry chunk at %08lx\n", start);
|
||||
CmImportHive((PCHAR) start);
|
||||
CmImportHive((PCHAR)start, length);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue