ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

cmwraprs.c
Go to the documentation of this file.
00001 /*
00002  * PROJECT:         ReactOS Kernel
00003  * LICENSE:         GPL - See COPYING in the top level directory
00004  * FILE:            ntoskrnl/config/cmwraprs.c
00005  * PURPOSE:         Configuration Manager - Wrappers for Hive Operations
00006  * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
00007  */
00008 
00009 /* INCLUDES ******************************************************************/
00010 
00011 #include "ntoskrnl.h"
00012 #define NDEBUG
00013 #include "debug.h"
00014 
00015 /* FUNCTIONS *****************************************************************/
00016 
00017 NTSTATUS
00018 NTAPI
00019 CmpCreateEvent(IN EVENT_TYPE EventType,
00020                OUT PHANDLE EventHandle,
00021                OUT PKEVENT *Event)
00022 {
00023     NTSTATUS Status;
00024     OBJECT_ATTRIBUTES ObjectAttributes;
00025 
00026     /* Create the event */
00027     InitializeObjectAttributes(&ObjectAttributes,
00028                                NULL,
00029                                OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
00030                                NULL,
00031                                NULL);
00032     Status = ZwCreateEvent(EventHandle,
00033                            EVENT_ALL_ACCESS,
00034                            &ObjectAttributes,
00035                            EventType,
00036                            FALSE);
00037     if (!NT_SUCCESS(Status)) return Status;
00038 
00039     /* Get a pointer to the object itself */
00040     Status = ObReferenceObjectByHandle(*EventHandle,
00041                                        EVENT_ALL_ACCESS,
00042                                        NULL,
00043                                        KernelMode,
00044                                        (PVOID*)Event,
00045                                        NULL);
00046     if (!NT_SUCCESS(Status)) ZwClose(*EventHandle);
00047 
00048     /* Return status */
00049     return Status;
00050 }
00051 
00052 PVOID
00053 NTAPI
00054 CmpAllocate(IN SIZE_T Size,
00055             IN BOOLEAN Paged,
00056             IN ULONG Tag)
00057 {
00058     return ExAllocatePoolWithTag(Paged ? PagedPool : NonPagedPool,
00059                                  Size,
00060                                  Tag);
00061 }
00062 
00063 VOID
00064 NTAPI
00065 CmpFree(IN PVOID Ptr,
00066         IN ULONG Quota)
00067 {
00068     ExFreePool(Ptr);
00069 }
00070 
00071 BOOLEAN
00072 NTAPI
00073 CmpFileRead(IN PHHIVE RegistryHive,
00074             IN ULONG FileType,
00075             IN PULONG FileOffset,
00076             OUT PVOID Buffer,
00077             IN SIZE_T BufferLength)
00078 {
00079     PCMHIVE CmHive = (PCMHIVE)RegistryHive;
00080     HANDLE HiveHandle = CmHive->FileHandles[FileType];
00081     LARGE_INTEGER _FileOffset;
00082     IO_STATUS_BLOCK IoStatusBlock;
00083     NTSTATUS Status;
00084 
00085     _FileOffset.QuadPart = *FileOffset;
00086     Status = ZwReadFile(HiveHandle, 0, 0, 0, &IoStatusBlock,
00087                        Buffer, (ULONG)BufferLength, &_FileOffset, 0);
00088     return NT_SUCCESS(Status) ? TRUE : FALSE;
00089 }
00090 
00091 BOOLEAN
00092 NTAPI
00093 CmpFileWrite(IN PHHIVE RegistryHive,
00094              IN ULONG FileType,
00095              IN PULONG FileOffset,
00096              IN PVOID Buffer,
00097              IN SIZE_T BufferLength)
00098 {
00099     PCMHIVE CmHive = (PCMHIVE)RegistryHive;
00100     HANDLE HiveHandle = CmHive->FileHandles[FileType];
00101     LARGE_INTEGER _FileOffset;
00102     IO_STATUS_BLOCK IoStatusBlock;
00103     NTSTATUS Status;
00104 
00105     _FileOffset.QuadPart = *FileOffset;
00106     Status = ZwWriteFile(HiveHandle, 0, 0, 0, &IoStatusBlock,
00107                        Buffer, (ULONG)BufferLength, &_FileOffset, 0);
00108     return NT_SUCCESS(Status) ? TRUE : FALSE;
00109 }
00110 
00111 BOOLEAN
00112 NTAPI
00113 CmpFileSetSize(IN PHHIVE RegistryHive,
00114                IN ULONG FileType,
00115                IN ULONG FileSize,
00116                IN ULONG OldFileSize)
00117 {
00118     PCMHIVE CmHive = (PCMHIVE)RegistryHive;
00119     HANDLE HiveHandle = CmHive->FileHandles[FileType];
00120     FILE_END_OF_FILE_INFORMATION EndOfFileInfo;
00121     FILE_ALLOCATION_INFORMATION FileAllocationInfo;
00122     IO_STATUS_BLOCK IoStatusBlock;
00123     NTSTATUS Status;
00124 
00125     EndOfFileInfo.EndOfFile.QuadPart = FileSize;
00126     Status = ZwSetInformationFile(HiveHandle,
00127                                   &IoStatusBlock,
00128                                   &EndOfFileInfo,
00129                                   sizeof(FILE_END_OF_FILE_INFORMATION),
00130                                   FileEndOfFileInformation);
00131     if (!NT_SUCCESS(Status)) return FALSE;
00132 
00133     FileAllocationInfo.AllocationSize.QuadPart = FileSize;
00134     Status = ZwSetInformationFile(HiveHandle,
00135                                   &IoStatusBlock,
00136                                   &FileAllocationInfo,
00137                                   sizeof(FILE_ALLOCATION_INFORMATION),
00138                                   FileAllocationInformation);
00139     if (!NT_SUCCESS(Status)) return FALSE;
00140 
00141     return TRUE;
00142 }
00143 
00144 BOOLEAN
00145 NTAPI
00146 CmpFileFlush(IN PHHIVE RegistryHive,
00147              IN ULONG FileType,
00148              IN OUT PLARGE_INTEGER FileOffset,
00149              IN ULONG Length)
00150 {
00151     PCMHIVE CmHive = (PCMHIVE)RegistryHive;
00152     HANDLE HiveHandle = CmHive->FileHandles[FileType];
00153     IO_STATUS_BLOCK IoStatusBlock;
00154     NTSTATUS Status;
00155 
00156     Status = ZwFlushBuffersFile(HiveHandle, &IoStatusBlock);
00157     return NT_SUCCESS(Status) ? TRUE : FALSE;
00158 }

Generated on Mon May 28 2012 04:36:58 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.