xref: /reactos/ntoskrnl/include/internal/icif.h (revision 53221834)
1 /*
2  * PROJECT:     ReactOS Kernel
3  * LICENSE:     GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4  * PURPOSE:     Internal header for information classes info interface
5  * COPYRIGHT:   Copyright ???
6  *              Copyright 2020-2021 George Bișoc <george.bisoc@reactos.org>
7  */
8 
9 #pragma once
10 
11 /*
12  * Implement generic information class probing code in a
13  * separate header within the NT kernel header internals.
14  * This makes it accessible to other sources by including
15  * the header.
16  */
17 
18 #define ICIF_NONE                0x0
19 #define ICIF_QUERY               0x1
20 #define ICIF_SET                 0x2
21 #define ICIF_QUERY_SIZE_VARIABLE 0x4
22 #define ICIF_SET_SIZE_VARIABLE   0x8
23 #define ICIF_SIZE_VARIABLE (ICIF_QUERY_SIZE_VARIABLE | ICIF_SET_SIZE_VARIABLE)
24 
25 typedef struct _INFORMATION_CLASS_INFO
26 {
27     USHORT RequiredSizeQUERY;
28     UCHAR AlignmentQUERY;
29     USHORT RequiredSizeSET;
30     UCHAR AlignmentSET;
31     USHORT Flags;
32 } INFORMATION_CLASS_INFO, *PINFORMATION_CLASS_INFO;
33 
34 #define IQS_SAME(Type, Alignment, Flags) \
35   { sizeof(Type), sizeof(Alignment), sizeof(Type), sizeof(Alignment), Flags }
36 
37 #define IQS(TypeQuery, AlignmentQuery, TypeSet, AlignmentSet, Flags) \
38   { sizeof(TypeQuery), sizeof(AlignmentQuery), sizeof(TypeSet), sizeof(AlignmentSet), Flags }
39 
40 #define IQS_NO_TYPE_LENGTH(Alignment, Flags) \
41   { 0, sizeof(Alignment), 0, sizeof(Alignment), Flags }
42 
43 #define IQS_NONE \
44   { 0, sizeof(CHAR), 0, sizeof(CHAR), ICIF_NONE }
45