Author: fireball
Date: Sun Oct 28 21:23:40 2007
New Revision: 29934
URL:
http://svn.reactos.org/svn/reactos?rev=29934&view=rev
Log:
Forgot one file..
Added:
branches/alex-cm-branch/reactos/ntoskrnl/cm/cmwraprs.c (with props)
Added: branches/alex-cm-branch/reactos/ntoskrnl/cm/cmwraprs.c
URL:
http://svn.reactos.org/svn/reactos/branches/alex-cm-branch/reactos/ntoskrnl…
==============================================================================
--- branches/alex-cm-branch/reactos/ntoskrnl/cm/cmwraprs.c (added)
+++ branches/alex-cm-branch/reactos/ntoskrnl/cm/cmwraprs.c Sun Oct 28 21:23:40 2007
@@ -1,0 +1,159 @@
+/*
+ * PROJECT: ReactOS Kernel
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: ntoskrnl/config/cmwraprs.c
+ * PURPOSE: Configuration Manager - Wrappers for Hive Operations
+ * PROGRAMMERS: Alex Ionescu (alex.ionescu(a)reactos.org)
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include "ntoskrnl.h"
+#include "cm.h"
+#define NDEBUG
+#include "debug.h"
+
+/* FUNCTIONS *****************************************************************/
+
+NTSTATUS
+NTAPI
+CmpCreateEvent(IN EVENT_TYPE EventType,
+ OUT PHANDLE EventHandle,
+ OUT PKEVENT *Event)
+{
+ NTSTATUS Status;
+ OBJECT_ATTRIBUTES ObjectAttributes;
+
+ /* Create the event */
+ InitializeObjectAttributes(&ObjectAttributes,
+ NULL,
+ OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
+ NULL,
+ NULL);
+ Status = ZwCreateEvent(EventHandle,
+ EVENT_ALL_ACCESS,
+ &ObjectAttributes,
+ EventType,
+ FALSE);
+ if (!NT_SUCCESS(Status)) return Status;
+
+ /* Get a pointer to the object itself */
+ Status = ObReferenceObjectByHandle(*EventHandle,
+ EVENT_ALL_ACCESS,
+ NULL,
+ KernelMode,
+ (PVOID*)Event,
+ NULL);
+ if (!NT_SUCCESS(Status)) ZwClose(*EventHandle);
+
+ /* Return status */
+ return Status;
+}
+
+PVOID
+NTAPI
+CmpAllocate(IN ULONG Size,
+ IN BOOLEAN Paged,
+ IN ULONG Tag)
+{
+ return ExAllocatePoolWithTag(Paged ? PagedPool : NonPagedPool,
+ Size,
+ Tag);
+}
+
+VOID
+NTAPI
+CmpFree(IN PVOID Ptr,
+ IN ULONG Quota)
+{
+ ExFreePool(Ptr);
+}
+
+BOOLEAN
+NTAPI
+CmpFileRead(IN PHHIVE RegistryHive,
+ IN ULONG FileType,
+ IN PULONG FileOffset,
+ OUT PVOID Buffer,
+ IN SIZE_T BufferLength)
+{
+ PEREGISTRY_HIVE CmHive = (PEREGISTRY_HIVE)RegistryHive;
+ HANDLE HiveHandle = FileType == HFILE_TYPE_PRIMARY ? CmHive->HiveHandle :
CmHive->LogHandle;
+ LARGE_INTEGER _FileOffset;
+ IO_STATUS_BLOCK IoStatusBlock;
+ NTSTATUS Status;
+
+ _FileOffset.QuadPart = *FileOffset;
+ Status = ZwReadFile(HiveHandle, 0, 0, 0, &IoStatusBlock,
+ Buffer, BufferLength, &_FileOffset, 0);
+ return NT_SUCCESS(Status) ? TRUE : FALSE;
+}
+
+BOOLEAN
+NTAPI
+CmpFileWrite(IN PHHIVE RegistryHive,
+ IN ULONG FileType,
+ IN PULONG FileOffset,
+ IN PVOID Buffer,
+ IN SIZE_T BufferLength)
+{
+ PEREGISTRY_HIVE CmHive = (PEREGISTRY_HIVE)RegistryHive;
+ HANDLE HiveHandle = FileType == HFILE_TYPE_PRIMARY ? CmHive->HiveHandle :
CmHive->LogHandle;
+ LARGE_INTEGER _FileOffset;
+ IO_STATUS_BLOCK IoStatusBlock;
+ NTSTATUS Status;
+
+ _FileOffset.QuadPart = *FileOffset;
+ Status = ZwWriteFile(HiveHandle, 0, 0, 0, &IoStatusBlock,
+ Buffer, BufferLength, &_FileOffset, 0);
+ return NT_SUCCESS(Status) ? TRUE : FALSE;
+}
+
+BOOLEAN
+NTAPI
+CmpFileSetSize(IN PHHIVE RegistryHive,
+ IN ULONG FileType,
+ IN ULONG FileSize,
+ IN ULONG OldFileSize)
+{
+ PEREGISTRY_HIVE CmHive = (PEREGISTRY_HIVE)RegistryHive;
+ HANDLE HiveHandle = FileType == HFILE_TYPE_PRIMARY ? CmHive->HiveHandle :
CmHive->LogHandle;
+ FILE_END_OF_FILE_INFORMATION EndOfFileInfo;
+ FILE_ALLOCATION_INFORMATION FileAllocationInfo;
+ IO_STATUS_BLOCK IoStatusBlock;
+ NTSTATUS Status;
+
+ EndOfFileInfo.EndOfFile.QuadPart = FileSize;
+ Status = ZwSetInformationFile(HiveHandle,
+ &IoStatusBlock,
+ &EndOfFileInfo,
+ sizeof(FILE_END_OF_FILE_INFORMATION),
+ FileEndOfFileInformation);
+ if (!NT_SUCCESS(Status)) return FALSE;
+
+ FileAllocationInfo.AllocationSize.QuadPart = FileSize;
+ Status = ZwSetInformationFile(HiveHandle,
+ &IoStatusBlock,
+ &FileAllocationInfo,
+ sizeof(FILE_ALLOCATION_INFORMATION),
+ FileAllocationInformation);
+ if (!NT_SUCCESS(Status)) return FALSE;
+
+ return TRUE;
+}
+
+BOOLEAN
+NTAPI
+CmpFileFlush(IN PHHIVE RegistryHive,
+ IN ULONG FileType,
+ IN OUT PLARGE_INTEGER FileOffset,
+ IN ULONG Length)
+{
+ PEREGISTRY_HIVE CmHive = (PEREGISTRY_HIVE)RegistryHive;
+ HANDLE HiveHandle = FileType == HFILE_TYPE_PRIMARY ? CmHive->HiveHandle :
CmHive->LogHandle;
+ IO_STATUS_BLOCK IoStatusBlock;
+ NTSTATUS Status;
+
+ Status = ZwFlushBuffersFile(HiveHandle, &IoStatusBlock);
+ return NT_SUCCESS(Status) ? TRUE : FALSE;
+}
Propchange: branches/alex-cm-branch/reactos/ntoskrnl/cm/cmwraprs.c
------------------------------------------------------------------------------
svn:eol-style = native