-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: ntoskrnl/cm/regfile.c
- * PURPOSE: Registry file manipulation routines
- * UPDATE HISTORY:
-*/
+/* $Id$
+ *
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * FILE: ntoskrnl/cm/regfile.c
+ * PURPOSE: Registry file manipulation routines
+ *
+ * PROGRAMMERS: No programmer listed.
+ */
#include <ntoskrnl.h>
#define NDEBUG
/* LOCAL MACROS *************************************************************/
-#define ROUND_DOWN(N, S) ((N) - ((N) % (S)))
-
#define ABS_VALUE(V) (((V) < 0) ? -(V) : (V))
BOOLEAN CmiDoVerify = FALSE;
Header->UpdateCounter2 = 0;
Header->DateModified.u.LowPart = 0;
Header->DateModified.u.HighPart = 0;
- Header->Unused3 = 1;
- Header->Unused4 = 3;
- Header->Unused5 = 0;
- Header->Unused6 = 1;
+ Header->MajorVersion = 1;
+ Header->MinorVersion = 3;
+ Header->Type = 0;
+ Header->Format = 1;
Header->Unused7 = 1;
Header->RootKeyOffset = (BLOCK_OFFSET)-1;
Header->BlockSize = REG_BLOCK_SIZE;
- Header->Unused6 = 1;
Header->Checksum = 0;
}
RootKeyCell->CellSize = -sizeof(KEY_CELL);
RootKeyCell->Id = REG_KEY_CELL_ID;
RootKeyCell->Flags = REG_KEY_ROOT_CELL | REG_KEY_NAME_PACKED;
- NtQuerySystemTime(&RootKeyCell->LastWriteTime);
+ KeQuerySystemTime(&RootKeyCell->LastWriteTime);
RootKeyCell->ParentKeyOffset = 0;
RootKeyCell->NumberOfSubKeys = 0;
RootKeyCell->HashTableOffset = -1;
//BinHeader->DateModified.dwHighDateTime
-
+
if (BinHeader->BinSize != REG_BLOCK_SIZE)
{
DbgPrint("BinSize is %.08x (should be a multiple of %.08x)\n",
ASSERT(Header->BlockId == REG_HIVE_ID);
}
- if (Header->Unused3 != 1)
+ if (Header->MajorVersion != 1)
{
- DbgPrint("Unused3 is %.08x (must be 1)\n",
- Header->Unused3);
- ASSERT(Header->Unused3 == 1);
+ DbgPrint("MajorVersion is %.08x (must be 1)\n",
+ Header->MajorVersion);
+ ASSERT(Header->MajorVersion == 1);
}
- if (Header->Unused4 != 3)
+ if (Header->MinorVersion != 3)
{
- DbgPrint("Unused4 is %.08x (must be 3)\n",
- Header->Unused4);
- ASSERT(Header->Unused4 == 3);
+ DbgPrint("MinorVersion is %.08x (must be 3)\n",
+ Header->MajorVersion);
+ ASSERT(Header->MajorVersion == 3);
}
- if (Header->Unused5 != 0)
+ if (Header->Type != 0)
{
- DbgPrint("Unused5 is %.08x (must be 0)\n",
- Header->Unused5);
- ASSERT(Header->Unused5 == 0);
+ DbgPrint("Type is %.08x (must be 0)\n",
+ Header->Type);
+ ASSERT(Header->Type == 0);
}
- if (Header->Unused6 != 1)
+ if (Header->Format != 1)
{
- DbgPrint("Unused6 is %.08x (must be 1)\n",
- Header->Unused6);
- ASSERT(Header->Unused6 == 1);
+ DbgPrint("Format is %.08x (must be 1)\n",
+ Header->Format);
+ ASSERT(Header->Format == 1);
}
if (Header->Unused7 != 1)
/* The rest of the block is free */
FreeCell->CellSize = REG_BLOCK_SIZE - (REG_HBIN_DATA_OFFSET + sizeof(KEY_CELL));
- Status = NtWriteFile(FileHandle,
+ Status = ZwWriteFile(FileHandle,
NULL,
NULL,
NULL,
ExFreePool(Buffer);
- ASSERTMSG(NT_SUCCESS(Status), ("Status: 0x%X\n", Status));
-
if (!NT_SUCCESS(Status))
{
return(Status);
}
- Status = NtFlushBuffersFile(FileHandle,
+ Status = ZwFlushBuffersFile(FileHandle,
&IoStatusBlock);
return(Status);
else if (!NT_SUCCESS(Status))
{
DPRINT("ZwCreateFile() failed (Status %lx)\n", Status);
- NtClose(HiveHandle);
+ ZwClose(HiveHandle);
return(Status);
}
/* Read hive base block */
FileOffset.QuadPart = 0ULL;
- Status = NtReadFile(HiveHandle,
+ Status = ZwReadFile(HiveHandle,
0,
0,
0,
0);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtReadFile() failed (Status %lx)\n", Status);
+ DPRINT("ZwReadFile() failed (Status %lx)\n", Status);
goto ByeBye;
}
/* Read log file header */
FileOffset.QuadPart = 0ULL;
- Status = NtReadFile(LogHandle,
+ Status = ZwReadFile(LogHandle,
0,
0,
0,
0);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtReadFile() failed (Status %lx)\n", Status);
+ DPRINT("ZwReadFile() failed (Status %lx)\n", Status);
goto ByeBye;
}
*/
/* Get file size */
- Status = NtQueryInformationFile(LogHandle,
+ Status = ZwQueryInformationFile(LogHandle,
&IoStatusBlock,
&fsi,
sizeof(fsi),
FileStandardInformation);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtQueryInformationFile() failed (Status %lx)\n", Status);
+ DPRINT("ZwQueryInformationFile() failed (Status %lx)\n", Status);
goto ByeBye;
}
FileSize = fsi.EndOfFile.u.LowPart;
/* Read log file header */
FileOffset.QuadPart = 0ULL;
- Status = NtReadFile(LogHandle,
+ Status = ZwReadFile(LogHandle,
0,
0,
0,
0);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtReadFile() failed (Status %lx)\n", Status);
+ DPRINT("ZwReadFile() failed (Status %lx)\n", Status);
goto ByeBye;
}
ExFreePool(LogHeader);
if (LogHandle != INVALID_HANDLE_VALUE)
- NtClose(LogHandle);
+ ZwClose(LogHandle);
- NtClose(HiveHandle);
+ ZwClose(HiveHandle);
return(Status);
}
return STATUS_REGISTRY_CORRUPT;
}
- ASSERTMSG((Bin->BinSize % REG_BLOCK_SIZE) == 0,
- ("Bin size (0x%.08x) must be multiple of 4K\n",
- Bin->BinSize));
+ ASSERTMSG("Bin size must be multiple of 4K\n",
+ (Bin->BinSize % REG_BLOCK_SIZE) == 0);
/* Allocate the hive block */
Hive->BlockList[BlockIndex].Bin = ExAllocatePool (PagedPool,
/* Duplicate Filename */
Status = RtlCreateUnicodeString(&RegistryHive->HiveFileName,
- Filename);
+ Filename);
if (!NT_SUCCESS(Status))
{
DPRINT("RtlCreateUnicodeString() failed (Status %lx)\n", Status);
/* Create log file name */
RegistryHive->LogFileName.Length = (wcslen(Filename) + 4) * sizeof(WCHAR);
RegistryHive->LogFileName.MaximumLength = RegistryHive->LogFileName.Length + sizeof(WCHAR);
- RegistryHive->LogFileName.Buffer = ExAllocatePool(NonPagedPool,
- RegistryHive->LogFileName.MaximumLength);
+ RegistryHive->LogFileName.Buffer = ExAllocatePoolWithTag(PagedPool,
+ RegistryHive->LogFileName.MaximumLength,
+ TAG('U', 'S', 'T', 'R'));
if (RegistryHive->LogFileName.Buffer == NULL)
{
RtlFreeUnicodeString(&RegistryHive->HiveFileName);
if (!NT_SUCCESS(Status))
{
DPRINT("CmiCreateNewRegFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ ZwClose(FileHandle);
RtlFreeUnicodeString(&RegistryHive->HiveFileName);
RtlFreeUnicodeString(&RegistryHive->LogFileName);
return(Status);
ObDereferenceObject(SectionObject);
RtlFreeUnicodeString(&RegistryHive->HiveFileName);
RtlFreeUnicodeString(&RegistryHive->LogFileName);
- NtClose(FileHandle);
+ ZwClose(FileHandle);
return(Status);
}
DPRINT("ViewBase %p ViewSize %lx\n", ViewBase, ViewSize);
ObDereferenceObject(SectionObject);
RtlFreeUnicodeString(&RegistryHive->HiveFileName);
RtlFreeUnicodeString(&RegistryHive->LogFileName);
- NtClose(FileHandle);
+ ZwClose(FileHandle);
return STATUS_INSUFFICIENT_RESOURCES;
}
RtlZeroMemory (RegistryHive->BlockList,
ObDereferenceObject(SectionObject);
RtlFreeUnicodeString(&RegistryHive->HiveFileName);
RtlFreeUnicodeString(&RegistryHive->LogFileName);
- NtClose(FileHandle);
+ ZwClose(FileHandle);
return Status;
}
ObDereferenceObject(SectionObject);
/* Close the hive file */
- NtClose(FileHandle);
+ ZwClose(FileHandle);
/* Initialize the free cell list */
Status = CmiCreateHiveFreeCellList (RegistryHive);
RtlZeroMemory (Hive,
sizeof(REGISTRY_HIVE));
- DPRINT("Hive %x\n", Hive);
+ DPRINT("Hive 0x%p\n", Hive);
Hive->HiveHeader = (PHIVE_HEADER)ExAllocatePool (NonPagedPool,
sizeof(HIVE_HEADER));
RtlZeroMemory (Hive,
sizeof(REGISTRY_HIVE));
- DPRINT ("Hive %x\n", Hive);
+ DPRINT ("Hive 0x%p\n", Hive);
Hive->HiveHeader = (PHIVE_HEADER)ExAllocatePool (NonPagedPool,
REG_BLOCK_SIZE);
RtlZeroMemory (Hive->HiveHeader,
REG_BLOCK_SIZE);
- DPRINT ("HiveHeader %x\n", Hive->HiveHeader);
+ DPRINT ("HiveHeader 0x%p\n", Hive->HiveHeader);
Hive->Flags = HIVE_NO_FILE;
RtlZeroMemory (Hive,
sizeof(REGISTRY_HIVE));
- DPRINT ("Hive %x\n", Hive);
+ DPRINT ("Hive 0x%p\n", Hive);
Hive->Flags = (Flags & REG_NO_LAZY_FLUSH) ? HIVE_NO_SYNCH : 0;
Hive->HiveHeader = (PHIVE_HEADER)ExAllocatePool(NonPagedPool,
/* Write hive block and block bitmap */
FileOffset.QuadPart = (ULONGLONG)0;
- Status = NtWriteFile(FileHandle,
+ Status = ZwWriteFile(FileHandle,
NULL,
NULL,
NULL,
NULL);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtWriteFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ DPRINT("ZwWriteFile() failed (Status %lx)\n", Status);
+ ZwClose(FileHandle);
ExFreePool(Buffer);
return(Status);
}
DPRINT("File offset %I64x\n", FileOffset.QuadPart);
/* Write hive block */
- Status = NtWriteFile(FileHandle,
+ Status = ZwWriteFile(FileHandle,
NULL,
NULL,
NULL,
NULL);
if (!NT_SUCCESS(Status))
{
- DPRINT1("NtWriteFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ DPRINT1("ZwWriteFile() failed (Status %lx)\n", Status);
+ ZwClose(FileHandle);
return(Status);
}
/* Truncate log file */
EndOfFileInfo.EndOfFile.QuadPart = FileOffset.QuadPart;
- Status = NtSetInformationFile(FileHandle,
+ Status = ZwSetInformationFile(FileHandle,
&IoStatusBlock,
&EndOfFileInfo,
sizeof(FILE_END_OF_FILE_INFORMATION),
FileEndOfFileInformation);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtSetInformationFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ DPRINT("ZwSetInformationFile() failed (Status %lx)\n", Status);
+ ZwClose(FileHandle);
return(Status);
}
FileAllocationInfo.AllocationSize.QuadPart = FileOffset.QuadPart;
- Status = NtSetInformationFile(FileHandle,
+ Status = ZwSetInformationFile(FileHandle,
&IoStatusBlock,
&FileAllocationInfo,
sizeof(FILE_ALLOCATION_INFORMATION),
FileAllocationInformation);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtSetInformationFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ DPRINT("ZwSetInformationFile() failed (Status %lx)\n", Status);
+ ZwClose(FileHandle);
return(Status);
}
/* Flush the log file */
- Status = NtFlushBuffersFile(FileHandle,
+ Status = ZwFlushBuffersFile(FileHandle,
&IoStatusBlock);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtFlushBuffersFile() failed (Status %lx)\n", Status);
+ DPRINT("ZwFlushBuffersFile() failed (Status %lx)\n", Status);
}
- NtClose(FileHandle);
+ ZwClose(FileHandle);
return(Status);
}
/* Write hive block and block bitmap */
FileOffset.QuadPart = (ULONGLONG)0;
- Status = NtWriteFile(FileHandle,
+ Status = ZwWriteFile(FileHandle,
NULL,
NULL,
NULL,
NULL);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtWriteFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ DPRINT("ZwWriteFile() failed (Status %lx)\n", Status);
+ ZwClose(FileHandle);
ExFreePool(Buffer);
return(Status);
}
ExFreePool(Buffer);
/* Flush the log file */
- Status = NtFlushBuffersFile(FileHandle,
+ Status = ZwFlushBuffersFile(FileHandle,
&IoStatusBlock);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtFlushBuffersFile() failed (Status %lx)\n", Status);
+ DPRINT("ZwFlushBuffersFile() failed (Status %lx)\n", Status);
}
- NtClose(FileHandle);
+ ZwClose(FileHandle);
return(Status);
}
/* Truncate log file */
EndOfFileInfo.EndOfFile.QuadPart = (ULONGLONG)BufferSize;
- Status = NtSetInformationFile(FileHandle,
+ Status = ZwSetInformationFile(FileHandle,
&IoStatusBlock,
&EndOfFileInfo,
sizeof(FILE_END_OF_FILE_INFORMATION),
FileEndOfFileInformation);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtSetInformationFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ DPRINT("ZwSetInformationFile() failed (Status %lx)\n", Status);
+ ZwClose(FileHandle);
return(Status);
}
FileAllocationInfo.AllocationSize.QuadPart = (ULONGLONG)BufferSize;
- Status = NtSetInformationFile(FileHandle,
+ Status = ZwSetInformationFile(FileHandle,
&IoStatusBlock,
&FileAllocationInfo,
sizeof(FILE_ALLOCATION_INFORMATION),
if (!NT_SUCCESS(Status))
{
DPRINT("NtSetInformationFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ ZwClose(FileHandle);
return(Status);
}
/* Flush the log file */
- Status = NtFlushBuffersFile(FileHandle,
+ Status = ZwFlushBuffersFile(FileHandle,
&IoStatusBlock);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtFlushBuffersFile() failed (Status %lx)\n", Status);
+ DPRINT("ZwFlushBuffersFile() failed (Status %lx)\n", Status);
}
- NtClose(FileHandle);
+ ZwClose(FileHandle);
return(Status);
}
/* Write hive block */
FileOffset.QuadPart = (ULONGLONG)0;
- Status = NtWriteFile(FileHandle,
+ Status = ZwWriteFile(FileHandle,
NULL,
NULL,
NULL,
NULL);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtWriteFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ DPRINT("ZwWriteFile() failed (Status %lx)\n", Status);
+ ZwClose(FileHandle);
return(Status);
}
DPRINT(" File offset %I64x\n", FileOffset.QuadPart);
/* Write hive block */
- Status = NtWriteFile(FileHandle,
+ Status = ZwWriteFile(FileHandle,
NULL,
NULL,
NULL,
NULL);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtWriteFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ DPRINT("ZwWriteFile() failed (Status %lx)\n", Status);
+ ZwClose(FileHandle);
return(Status);
}
BlockIndex++;
}
- Status = NtFlushBuffersFile(FileHandle,
+ Status = ZwFlushBuffersFile(FileHandle,
&IoStatusBlock);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtFlushBuffersFile() failed (Status %lx)\n", Status);
+ DPRINT("ZwFlushBuffersFile() failed (Status %lx)\n", Status);
}
- NtClose(FileHandle);
+ ZwClose(FileHandle);
return(Status);
}
/* Write hive block */
FileOffset.QuadPart = (ULONGLONG)0;
- Status = NtWriteFile(FileHandle,
+ Status = ZwWriteFile(FileHandle,
NULL,
NULL,
NULL,
NULL);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtWriteFile() failed (Status %lx)\n", Status);
- NtClose(FileHandle);
+ DPRINT("ZwWriteFile() failed (Status %lx)\n", Status);
+ ZwClose(FileHandle);
return(Status);
}
- Status = NtFlushBuffersFile(FileHandle,
+ Status = ZwFlushBuffersFile(FileHandle,
&IoStatusBlock);
if (!NT_SUCCESS(Status))
{
- DPRINT("NtFlushBuffersFile() failed (Status %lx)\n", Status);
+ DPRINT("ZwFlushBuffersFile() failed (Status %lx)\n", Status);
}
- NtClose(FileHandle);
+ ZwClose(FileHandle);
return(Status);
}
&RegistryHive->LogFileName);
/* Update hive header modification time */
- NtQuerySystemTime(&RegistryHive->HiveHeader->DateModified);
+ KeQuerySystemTime(&RegistryHive->HiveHeader->DateModified);
/* Start log update */
Status = CmiStartLogUpdate(RegistryHive);
{
NewKeyCell->Id = REG_KEY_CELL_ID;
NewKeyCell->Flags = 0;
- NtQuerySystemTime(&NewKeyCell->LastWriteTime);
+ KeQuerySystemTime(&NewKeyCell->LastWriteTime);
NewKeyCell->ParentKeyOffset = -1;
NewKeyCell->NumberOfSubKeys = 0;
NewKeyCell->HashTableOffset = -1;
ParentKeyCell->NumberOfSubKeys++;
}
- NtQuerySystemTime (&ParentKeyCell->LastWriteTime);
+ KeQuerySystemTime (&ParentKeyCell->LastWriteTime);
CmiMarkBlockDirty (RegistryHive, ParentKey->KeyCellOffset);
return(Status);
}
}
- NtQuerySystemTime(&ParentKey->KeyCell->LastWriteTime);
+ KeQuerySystemTime(&ParentKey->KeyCell->LastWriteTime);
CmiMarkBlockDirty(ParentKey->RegistryHive,
ParentKey->KeyCellOffset);
}
CmiMarkBlockDirty(RegistryHive, KeyCellOffset);
CmiMarkBlockDirty(RegistryHive, ValueListCellOffset);
}
- else if (KeyCell->NumberOfValues >=
+ else if (KeyCell->NumberOfValues >=
(((ULONG)ABS_VALUE(ValueListCell->CellSize) - sizeof(VALUE_LIST_CELL)) / sizeof(BLOCK_OFFSET)))
{
#if 0
Status = STATUS_SUCCESS;
*HashBlock = NULL;
- NewHashSize = sizeof(HASH_TABLE_CELL) +
+ NewHashSize = sizeof(HASH_TABLE_CELL) +
(SubKeyCount * sizeof(HASH_RECORD));
Status = CmiAllocateCell (RegistryHive,
NewHashSize,
/* Update time of heap */
if (!IsNoFileHive(RegistryHive))
- NtQuerySystemTime(&Bin->DateModified);
+ KeQuerySystemTime(&Bin->DateModified);
}
/* Destroy the value cell */
/* Update time of heap */
if (!IsNoFileHive(RegistryHive) && CmiGetCell (RegistryHive, ValueCellOffset, &Bin))
{
- NtQuerySystemTime(&Bin->DateModified);
+ KeQuerySystemTime(&Bin->DateModified);
}
return Status;
PHBIN tmpBin;
ULONG BinSize;
ULONG i;
+ ULONG BitmapSize;
DPRINT ("CmiAddBin (BlockCount %lu)\n", BlockCount);
tmpBin->BinOffset = RegistryHive->FileSize - REG_BLOCK_SIZE;
RegistryHive->FileSize += BinSize;
tmpBin->BinSize = BinSize;
- tmpBin->Unused1 = 0;
- NtQuerySystemTime(&tmpBin->DateModified);
- tmpBin->Unused2 = 0;
+ KeQuerySystemTime(&tmpBin->DateModified);
+ tmpBin->MemAlloc = 0;
DPRINT (" BinOffset %lx BinSize %lx\n", tmpBin->BinOffset,tmpBin->BinSize);
tmpBlock = (PCELL_HEADER)((ULONG_PTR) tmpBin + REG_HBIN_DATA_OFFSET);
tmpBlock->CellSize = (BinSize - REG_HBIN_DATA_OFFSET);
+ /* Calculate bitmap size in bytes (always a multiple of 32 bits) */
+ BitmapSize = ROUND_UP(RegistryHive->BlockListSize, sizeof(ULONG) * 8) / 8;
+
/* Grow bitmap if necessary */
- if (IsNoFileHive(RegistryHive) &&
- (RegistryHive->BlockListSize % (sizeof(ULONG) * 8) == 0))
+ if (!IsNoFileHive(RegistryHive) &&
+ BitmapSize > RegistryHive->DirtyBitMap.SizeOfBitMap / 8)
{
PULONG BitmapBuffer;
- ULONG BitmapSize;
DPRINT("Grow hive bitmap\n");
- /* Calculate bitmap size in bytes (always a multiple of 32 bits) */
- BitmapSize = ROUND_UP(RegistryHive->BlockListSize, sizeof(ULONG) * 8) / 8;
DPRINT("RegistryHive->BlockListSize: %lu\n", RegistryHive->BlockListSize);
DPRINT("BitmapSize: %lu Bytes %lu Bits\n", BitmapSize, BitmapSize * 8);
BitmapBuffer = (PULONG)ExAllocatePool(PagedPool,
RtlZeroMemory(BitmapBuffer, BitmapSize);
RtlCopyMemory(BitmapBuffer,
RegistryHive->DirtyBitMap.Buffer,
- RegistryHive->DirtyBitMap.SizeOfBitMap);
+ RegistryHive->DirtyBitMap.SizeOfBitMap / 8);
ExFreePool(RegistryHive->BitmapBuffer);
RegistryHive->BitmapBuffer = BitmapBuffer;
RtlInitializeBitMap(&RegistryHive->DirtyBitMap,
return STATUS_UNSUCCESSFUL;
}
- NtQuerySystemTime(&Bin->DateModified);
+ KeQuerySystemTime(&Bin->DateModified);
CmiMarkBlockDirty(RegistryHive, RegistryHive->FreeListOffset[i]);
if ((i + 1) < RegistryHive->FreeListSize)
/* Update time of heap */
if (!IsNoFileHive(RegistryHive) && CmiGetCell (RegistryHive, CellOffset,&pBin))
- NtQuerySystemTime(&pBin->DateModified);
+ KeQuerySystemTime(&pBin->DateModified);
CmiMarkBlockDirty(RegistryHive, CellOffset);
}
}
NewKeyCell->HashTableOffset = NewHashTableOffset;
}
+ else
+ {
+ NewHashTableCell = NULL;
+ }
/* Allocate and copy value list and values */
if (SrcKeyCell->NumberOfValues != 0)
/* Write hive block */
FileOffset.QuadPart = (ULONGLONG)0;
- Status = NtWriteFile (FileHandle,
+ Status = ZwWriteFile (FileHandle,
NULL,
NULL,
NULL,
NULL);
if (!NT_SUCCESS(Status))
{
- DPRINT1 ("NtWriteFile() failed (Status %lx)\n", Status);
+ DPRINT1 ("ZwWriteFile() failed (Status %lx)\n", Status);
return Status;
}
DPRINT ("File offset %I64x\n", FileOffset.QuadPart);
/* Write hive block */
- Status = NtWriteFile (FileHandle,
+ Status = ZwWriteFile (FileHandle,
NULL,
NULL,
NULL,
NULL);
if (!NT_SUCCESS(Status))
{
- DPRINT1 ("NtWriteFile() failed (Status %lx)\n", Status);
+ DPRINT1 ("ZwWriteFile() failed (Status %lx)\n", Status);
return Status;
}
}
- Status = NtFlushBuffersFile (FileHandle,
+ Status = ZwFlushBuffersFile (FileHandle,
&IoStatusBlock);
if (!NT_SUCCESS(Status))
{
- DPRINT1 ("NtFlushBuffersFile() failed (Status %lx)\n", Status);
+ DPRINT1 ("ZwFlushBuffersFile() failed (Status %lx)\n", Status);
}
DPRINT ("CmiSaveTempHive() done\n");