Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenprobe.h
Go to the documentation of this file.
00001 #pragma once 00002 00003 #include <reactos/probe.h> 00004 00005 static 00006 __inline 00007 NTSTATUS 00008 DefaultSetInfoBufferCheck(ULONG Class, 00009 const INFORMATION_CLASS_INFO *ClassList, 00010 ULONG ClassListEntries, 00011 PVOID Buffer, 00012 ULONG BufferLength, 00013 KPROCESSOR_MODE PreviousMode) 00014 { 00015 NTSTATUS Status = STATUS_SUCCESS; 00016 00017 if (Class < ClassListEntries) 00018 { 00019 if (!(ClassList[Class].Flags & ICIF_SET)) 00020 { 00021 Status = STATUS_INVALID_INFO_CLASS; 00022 } 00023 else if (ClassList[Class].RequiredSizeSET > 0 && 00024 BufferLength != ClassList[Class].RequiredSizeSET) 00025 { 00026 if (!(ClassList[Class].Flags & ICIF_SET_SIZE_VARIABLE)) 00027 { 00028 Status = STATUS_INFO_LENGTH_MISMATCH; 00029 } 00030 } 00031 00032 if (NT_SUCCESS(Status)) 00033 { 00034 if (PreviousMode != KernelMode) 00035 { 00036 _SEH2_TRY 00037 { 00038 ProbeForRead(Buffer, 00039 BufferLength, 00040 ClassList[Class].AlignmentSET); 00041 } 00042 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) 00043 { 00044 Status = _SEH2_GetExceptionCode(); 00045 } 00046 _SEH2_END; 00047 } 00048 } 00049 } 00050 else 00051 Status = STATUS_INVALID_INFO_CLASS; 00052 00053 return Status; 00054 } 00055 00056 static 00057 __inline 00058 NTSTATUS 00059 DefaultQueryInfoBufferCheck(ULONG Class, 00060 const INFORMATION_CLASS_INFO *ClassList, 00061 ULONG ClassListEntries, 00062 PVOID Buffer, 00063 ULONG BufferLength, 00064 PULONG ReturnLength, 00065 PULONG_PTR ReturnLengthPtr, 00066 KPROCESSOR_MODE PreviousMode) 00067 { 00068 NTSTATUS Status = STATUS_SUCCESS; 00069 00070 if (Class < ClassListEntries) 00071 { 00072 if (!(ClassList[Class].Flags & ICIF_QUERY)) 00073 { 00074 Status = STATUS_INVALID_INFO_CLASS; 00075 } 00076 else if (ClassList[Class].RequiredSizeQUERY > 0 && 00077 BufferLength != ClassList[Class].RequiredSizeQUERY) 00078 { 00079 if (!(ClassList[Class].Flags & ICIF_QUERY_SIZE_VARIABLE)) 00080 { 00081 Status = STATUS_INFO_LENGTH_MISMATCH; 00082 } 00083 } 00084 00085 if (NT_SUCCESS(Status)) 00086 { 00087 if (PreviousMode != KernelMode) 00088 { 00089 _SEH2_TRY 00090 { 00091 if (Buffer != NULL) 00092 { 00093 ProbeForWrite(Buffer, 00094 BufferLength, 00095 ClassList[Class].AlignmentQUERY); 00096 } 00097 00098 if (ReturnLength != NULL) 00099 { 00100 ProbeForWriteUlong(ReturnLength); 00101 } 00102 if (ReturnLengthPtr != NULL) 00103 { 00104 ProbeForWrite(ReturnLengthPtr, sizeof(ULONG_PTR), sizeof(ULONG_PTR)); 00105 } 00106 } 00107 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) 00108 { 00109 Status = _SEH2_GetExceptionCode(); 00110 } 00111 _SEH2_END; 00112 } 00113 } 00114 } 00115 else 00116 Status = STATUS_INVALID_INFO_CLASS; 00117 00118 return Status; 00119 } Generated on Sat May 26 2012 04:32:06 for ReactOS by
1.7.6.1
|