Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygencmwraprs.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
1.7.6.1
|