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