1 #ifndef __INCLUDE_INTERNAL_PROBE_H
2 #define __INCLUDE_INTERNAL_PROBE_H
4 #include <reactos/probe.h>
9 DefaultSetInfoBufferCheck(ULONG Class
,
10 const INFORMATION_CLASS_INFO
*ClassList
,
11 ULONG ClassListEntries
,
14 KPROCESSOR_MODE PreviousMode
)
16 NTSTATUS Status
= STATUS_SUCCESS
;
18 if (Class
< ClassListEntries
)
20 if (!(ClassList
[Class
].Flags
& ICIF_SET
))
22 Status
= STATUS_INVALID_INFO_CLASS
;
24 else if (ClassList
[Class
].RequiredSizeSET
> 0 &&
25 BufferLength
!= ClassList
[Class
].RequiredSizeSET
)
27 if (!(ClassList
[Class
].Flags
& ICIF_SET_SIZE_VARIABLE
))
29 Status
= STATUS_INFO_LENGTH_MISMATCH
;
33 if (NT_SUCCESS(Status
))
35 if (PreviousMode
!= KernelMode
)
41 ClassList
[Class
].AlignmentSET
);
43 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
45 Status
= _SEH2_GetExceptionCode();
52 Status
= STATUS_INVALID_INFO_CLASS
;
60 DefaultQueryInfoBufferCheck(ULONG Class
,
61 const INFORMATION_CLASS_INFO
*ClassList
,
62 ULONG ClassListEntries
,
66 PULONG_PTR ReturnLengthLong
,
67 KPROCESSOR_MODE PreviousMode
)
69 NTSTATUS Status
= STATUS_SUCCESS
;
71 if (Class
< ClassListEntries
)
73 if (!(ClassList
[Class
].Flags
& ICIF_QUERY
))
75 Status
= STATUS_INVALID_INFO_CLASS
;
77 else if (ClassList
[Class
].RequiredSizeQUERY
> 0 &&
78 BufferLength
!= ClassList
[Class
].RequiredSizeQUERY
)
80 if (!(ClassList
[Class
].Flags
& ICIF_QUERY_SIZE_VARIABLE
))
82 Status
= STATUS_INFO_LENGTH_MISMATCH
;
86 if (NT_SUCCESS(Status
))
88 if (PreviousMode
!= KernelMode
)
96 ClassList
[Class
].AlignmentQUERY
);
99 if (ReturnLength
!= NULL
)
101 ProbeForWriteUlong(ReturnLength
);
103 if (ReturnLengthLong
!= NULL
)
105 ProbeForWrite(ReturnLengthLong
, sizeof(ULONG_PTR
), sizeof(ULONG_PTR
));
108 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
110 Status
= _SEH2_GetExceptionCode();
117 Status
= STATUS_INVALID_INFO_CLASS
;