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@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