5#define EBPF_OFFSET_OF(s, m) (((size_t) & ((s*)0)->m))
6#define EBPF_FIELD_SIZE(s, m) (sizeof(((s*)0)->m))
7#define EBPF_SIZE_INCLUDING_FIELD(s, m) (EBPF_OFFSET_OF(s, m) + EBPF_FIELD_SIZE(s, m))
15#if !defined(NO_CRT) && !defined(_NO_CRT_STDIO_INLINE)
20typedef unsigned char uint8_t;
21typedef unsigned short uint16_t;
22typedef unsigned short wchar_t;
23typedef unsigned int uint32_t;
24typedef unsigned long long uint64_t;
25typedef unsigned long long size_t;
32#define EBPF_ROOT_REGISTRY_PATH L"\\Registry\\Machine\\Software\\eBPF"
33#define EBPF_ROOT_RELATIVE_PATH L"Software\\eBPF"
34#define EBPF_STORE_REGISTRY_PATH L"Software\\eBPF\\Providers"
36#define EBPF_PROVIDERS_REGISTRY_KEY L"Providers"
37#define EBPF_SECTIONS_REGISTRY_KEY L"SectionData"
38#define EBPF_PROGRAM_DATA_REGISTRY_KEY L"ProgramData"
39#define EBPF_PROGRAM_TYPE_DESCRIPTOR_REGISTRY_KEY L"TypeDescriptor"
40#define EBPF_PROGRAM_DATA_HELPERS_REGISTRY_KEY L"Helpers"
41#define EBPF_GLOBAL_HELPERS_REGISTRY_KEY L"GlobalHelpers"
42#define EBPF_BTF_RESOLVED_FUNCTIONS_REGISTRY_KEY L"BtfResolvedFunctions"
43#define EBPF_BTF_FUNCTIONS_REGISTRY_KEY L"Functions"
45#define EBPF_EXTENSION_HEADER_VERSION L"Version"
46#define EBPF_EXTENSION_HEADER_SIZE L"Size"
48#define EBPF_SECTION_DATA_PROGRAM_TYPE L"ProgramType"
49#define EBPF_SECTION_DATA_ATTACH_TYPE L"AttachType"
51#define EBPF_PROGRAM_DATA_NAME L"Name"
52#define EBPF_PROGRAM_DATA_CONTEXT_DESCRIPTOR L"ContextDescriptor"
53#define EBPF_PROGRAM_DATA_PLATFORM_SPECIFIC_DATA L"PlatformSpecificData"
54#define EBPF_PROGRAM_DATA_PRIVILEGED L"IsPrivileged"
55#define EBPF_PROGRAM_DATA_HELPER_COUNT L"HelperCount"
57#define EBPF_HELPER_DATA_PROTOTYPE L"Prototype"
58#define EBPF_HELPER_DATA_REALLOCATE_PACKET L"ReallocatePacket"
59#define EBPF_BTF_FUNCTION_DATA_RETURN_TYPE L"ReturnType"
60#define EBPF_BTF_FUNCTION_DATA_ARGUMENTS L"Arguments"
61#define EBPF_BTF_FUNCTION_DATA_FLAGS L"Flags"
63#define EBPF_DATA_BPF_PROG_TYPE L"BpfProgType"
64#define EBPF_DATA_BPF_ATTACH_TYPE L"BpfAttachType"
76#define EBPF_MAX_GENERAL_HELPER_FUNCTION 0xFFFF
78#define EBPF_ATTACH_CLIENT_DATA_CURRENT_VERSION 1
80#define EBPF_ATTACH_CLIENT_DATA_VERSION_SIZE EBPF_SIZE_INCLUDING_FIELD(ebpf_extension_data_t, prog_attach_flags)
81#define EBPF_ATTACH_CLIENT_DATA_VERSION_TOTAL_SIZE sizeof(ebpf_extension_data_t)
82#define EBPF_ATTACH_CLIENT_DATA_HEADER_VERSION \
83 {EBPF_ATTACH_CLIENT_DATA_CURRENT_VERSION, \
84 EBPF_ATTACH_CLIENT_DATA_VERSION_SIZE, \
85 EBPF_ATTACH_CLIENT_DATA_VERSION_TOTAL_SIZE}
88#define EBPF_ATTACH_PROVIDER_DATA_CURRENT_VERSION 1
89#define EBPF_ATTACH_PROVIDER_DATA_CURRENT_VERSION_SIZE EBPF_SIZE_INCLUDING_FIELD(ebpf_attach_provider_data_t, link_type)
90#define EBPF_ATTACH_PROVIDER_DATA_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_attach_provider_data_t)
91#define EBPF_ATTACH_PROVIDER_DATA_HEADER \
92 {EBPF_ATTACH_PROVIDER_DATA_CURRENT_VERSION, \
93 EBPF_ATTACH_PROVIDER_DATA_CURRENT_VERSION_SIZE, \
94 EBPF_ATTACH_PROVIDER_DATA_CURRENT_VERSION_TOTAL_SIZE}
96#define EBPF_PROGRAM_TYPE_DESCRIPTOR_CURRENT_VERSION 1
97#define EBPF_PROGRAM_TYPE_DESCRIPTOR_CURRENT_VERSION_SIZE \
98 EBPF_SIZE_INCLUDING_FIELD(ebpf_program_type_descriptor_t, is_privileged)
99#define EBPF_PROGRAM_TYPE_DESCRIPTOR_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_program_type_descriptor_t)
100#define EBPF_PROGRAM_TYPE_DESCRIPTOR_HEADER \
101 {EBPF_PROGRAM_TYPE_DESCRIPTOR_CURRENT_VERSION, \
102 EBPF_PROGRAM_TYPE_DESCRIPTOR_CURRENT_VERSION_SIZE, \
103 EBPF_PROGRAM_TYPE_DESCRIPTOR_CURRENT_VERSION_TOTAL_SIZE}
105#define EBPF_HELPER_FUNCTION_PROTOTYPE_CURRENT_VERSION 1
106#define EBPF_HELPER_FUNCTION_PROTOTYPE_CURRENT_VERSION_SIZE \
107 EBPF_SIZE_INCLUDING_FIELD(ebpf_helper_function_prototype_t, implicit_context)
108#define EBPF_HELPER_FUNCTION_PROTOTYPE_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_helper_function_prototype_t)
109#define EBPF_HELPER_FUNCTION_PROTOTYPE_HEADER \
110 {EBPF_HELPER_FUNCTION_PROTOTYPE_CURRENT_VERSION, \
111 EBPF_HELPER_FUNCTION_PROTOTYPE_CURRENT_VERSION_SIZE, \
112 EBPF_HELPER_FUNCTION_PROTOTYPE_CURRENT_VERSION_TOTAL_SIZE}
114#define EBPF_BTF_RESOLVED_FUNCTION_PROTOTYPE_CURRENT_VERSION 1
115#define EBPF_BTF_RESOLVED_FUNCTION_PROTOTYPE_CURRENT_VERSION_SIZE \
116 EBPF_SIZE_INCLUDING_FIELD(ebpf_btf_resolved_function_prototype_t, flags)
117#define EBPF_BTF_RESOLVED_FUNCTION_PROTOTYPE_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_btf_resolved_function_prototype_t)
118#define EBPF_BTF_RESOLVED_FUNCTION_PROTOTYPE_HEADER \
119 {EBPF_BTF_RESOLVED_FUNCTION_PROTOTYPE_CURRENT_VERSION, \
120 EBPF_BTF_RESOLVED_FUNCTION_PROTOTYPE_CURRENT_VERSION_SIZE, \
121 EBPF_BTF_RESOLVED_FUNCTION_PROTOTYPE_CURRENT_VERSION_TOTAL_SIZE}
123#define EBPF_PROGRAM_INFORMATION_CURRENT_VERSION 1
124#define EBPF_PROGRAM_INFORMATION_CURRENT_VERSION_SIZE \
125 EBPF_SIZE_INCLUDING_FIELD(ebpf_program_info_t, global_helper_prototype)
126#define EBPF_PROGRAM_INFORMATION_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_program_info_t)
127#define EBPF_PROGRAM_INFORMATION_HEADER \
128 {EBPF_PROGRAM_INFORMATION_CURRENT_VERSION, \
129 EBPF_PROGRAM_INFORMATION_CURRENT_VERSION_SIZE, \
130 EBPF_PROGRAM_INFORMATION_CURRENT_VERSION_TOTAL_SIZE}
132#define EBPF_HELPER_FUNCTION_ADDRESSES_CURRENT_VERSION 1
133#define EBPF_HELPER_FUNCTION_ADDRESSES_CURRENT_VERSION_SIZE \
134 EBPF_SIZE_INCLUDING_FIELD(ebpf_helper_function_addresses_t, helper_function_address)
135#define EBPF_HELPER_FUNCTION_ADDRESSES_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_helper_function_addresses_t)
136#define EBPF_HELPER_FUNCTION_ADDRESSES_HEADER \
137 {EBPF_HELPER_FUNCTION_ADDRESSES_CURRENT_VERSION, \
138 EBPF_HELPER_FUNCTION_ADDRESSES_CURRENT_VERSION_SIZE, \
139 EBPF_HELPER_FUNCTION_ADDRESSES_CURRENT_VERSION_TOTAL_SIZE}
141#define EBPF_PROGRAM_DATA_CURRENT_VERSION 1
142#define EBPF_PROGRAM_DATA_CURRENT_VERSION_SIZE EBPF_SIZE_INCLUDING_FIELD(ebpf_program_data_t, capabilities)
143#define EBPF_PROGRAM_DATA_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_program_data_t)
144#define EBPF_PROGRAM_DATA_HEADER \
145 {EBPF_PROGRAM_DATA_CURRENT_VERSION, \
146 EBPF_PROGRAM_DATA_CURRENT_VERSION_SIZE, \
147 EBPF_PROGRAM_DATA_CURRENT_VERSION_TOTAL_SIZE}
149#define EBPF_PROGRAM_SECTION_INFORMATION_CURRENT_VERSION 1
150#define EBPF_PROGRAM_SECTION_INFORMATION_CURRENT_VERSION_SIZE \
151 EBPF_SIZE_INCLUDING_FIELD(ebpf_program_section_info_t, bpf_attach_type)
152#define EBPF_PROGRAM_SECTION_INFORMATION_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_program_section_info_t)
153#define EBPF_PROGRAM_SECTION_INFORMATION_HEADER \
154 {EBPF_PROGRAM_SECTION_INFORMATION_CURRENT_VERSION, \
155 EBPF_PROGRAM_SECTION_INFORMATION_CURRENT_VERSION_SIZE, \
156 EBPF_PROGRAM_SECTION_INFORMATION_CURRENT_VERSION_TOTAL_SIZE}
158#define EBPF_MAP_PROVIDER_DATA_CURRENT_VERSION 1
159#define EBPF_MAP_PROVIDER_DATA_CURRENT_VERSION_SIZE \
160 EBPF_SIZE_INCLUDING_FIELD(ebpf_map_provider_data_t, base_provider_table)
161#define EBPF_MAP_PROVIDER_DATA_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_map_provider_data_t)
162#define EBPF_MAP_PROVIDER_DATA_HEADER \
163 {EBPF_MAP_PROVIDER_DATA_CURRENT_VERSION, \
164 EBPF_MAP_PROVIDER_DATA_CURRENT_VERSION_SIZE, \
165 EBPF_MAP_PROVIDER_DATA_CURRENT_VERSION_TOTAL_SIZE}
167#define EBPF_BTF_RESOLVED_FUNCTION_PROVIDER_DATA_CURRENT_VERSION 1
168#define EBPF_BTF_RESOLVED_FUNCTION_PROVIDER_DATA_CURRENT_VERSION_SIZE \
169 EBPF_SIZE_INCLUDING_FIELD(ebpf_btf_resolved_function_provider_data_t, btf_resolved_function_addresses)
170#define EBPF_BTF_RESOLVED_FUNCTION_PROVIDER_DATA_CURRENT_VERSION_TOTAL_SIZE \
171 sizeof(ebpf_btf_resolved_function_provider_data_t)
172#define EBPF_BTF_RESOLVED_FUNCTION_PROVIDER_DATA_HEADER \
173 {EBPF_BTF_RESOLVED_FUNCTION_PROVIDER_DATA_CURRENT_VERSION, \
174 EBPF_BTF_RESOLVED_FUNCTION_PROVIDER_DATA_CURRENT_VERSION_SIZE, \
175 EBPF_BTF_RESOLVED_FUNCTION_PROVIDER_DATA_CURRENT_VERSION_TOTAL_SIZE}
177#define EBPF_MAP_CLIENT_DATA_CURRENT_VERSION 1
178#define EBPF_MAP_CLIENT_DATA_CURRENT_VERSION_SIZE EBPF_SIZE_INCLUDING_FIELD(ebpf_map_client_data_t, base_client_table)
179#define EBPF_MAP_CLIENT_DATA_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_map_client_data_t)
180#define EBPF_MAP_CLIENT_DATA_HEADER \
181 {EBPF_MAP_CLIENT_DATA_CURRENT_VERSION, \
182 EBPF_MAP_CLIENT_DATA_CURRENT_VERSION_SIZE, \
183 EBPF_MAP_CLIENT_DATA_CURRENT_VERSION_TOTAL_SIZE}
185#define EBPF_BASE_MAP_PROVIDER_DISPATCH_TABLE_CURRENT_VERSION 1
186#define EBPF_BASE_MAP_PROVIDER_DISPATCH_TABLE_V1_SIZE_0 \
187 EBPF_SIZE_INCLUDING_FIELD(ebpf_base_map_provider_dispatch_table_t, preprocess_map_delete_element)
188#define EBPF_BASE_MAP_PROVIDER_DISPATCH_TABLE_CURRENT_VERSION_SIZE \
189 EBPF_SIZE_INCLUDING_FIELD(ebpf_base_map_provider_dispatch_table_t, postprocess_map_delete_element)
190#define EBPF_BASE_MAP_PROVIDER_DISPATCH_TABLE_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_base_map_provider_dispatch_table_t)
191#define EBPF_BASE_MAP_PROVIDER_DISPATCH_TABLE_HEADER \
192 {EBPF_BASE_MAP_PROVIDER_DISPATCH_TABLE_CURRENT_VERSION, \
193 EBPF_BASE_MAP_PROVIDER_DISPATCH_TABLE_CURRENT_VERSION_SIZE, \
194 EBPF_BASE_MAP_PROVIDER_DISPATCH_TABLE_CURRENT_VERSION_TOTAL_SIZE}
196#define EBPF_BASE_MAP_PROVIDER_PROPERTIES_CURRENT_VERSION 1
197#define EBPF_BASE_MAP_PROVIDER_PROPERTIES_CURRENT_VERSION_SIZE \
198 EBPF_SIZE_INCLUDING_FIELD(ebpf_base_map_provider_properties_t, updates_original_value)
199#define EBPF_BASE_MAP_PROVIDER_PROPERTIES_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_base_map_provider_properties_t)
200#define EBPF_BASE_MAP_PROVIDER_PROPERTIES_HEADER \
201 {EBPF_BASE_MAP_PROVIDER_PROPERTIES_CURRENT_VERSION, \
202 EBPF_BASE_MAP_PROVIDER_PROPERTIES_CURRENT_VERSION_SIZE, \
203 EBPF_BASE_MAP_PROVIDER_PROPERTIES_CURRENT_VERSION_TOTAL_SIZE}
205#define EBPF_BASE_MAP_CLIENT_DISPATCH_TABLE_CURRENT_VERSION 1
206#define EBPF_BASE_MAP_CLIENT_DISPATCH_TABLE_CURRENT_VERSION_SIZE \
207 EBPF_SIZE_INCLUDING_FIELD(ebpf_base_map_client_dispatch_table_t, epoch_free_cache_aligned)
208#define EBPF_BASE_MAP_CLIENT_DISPATCH_TABLE_CURRENT_VERSION_TOTAL_SIZE sizeof(ebpf_base_map_client_dispatch_table_t)
209#define EBPF_BASE_MAP_CLIENT_DISPATCH_TABLE_HEADER \
210 {EBPF_BASE_MAP_CLIENT_DISPATCH_TABLE_CURRENT_VERSION, \
211 EBPF_BASE_MAP_CLIENT_DISPATCH_TABLE_CURRENT_VERSION_SIZE, \
212 EBPF_BASE_MAP_CLIENT_DISPATCH_TABLE_CURRENT_VERSION_TOTAL_SIZE}
GUID ebpf_attach_type_t
Definition ebpf_windows.h:67
_ebpf_helper_function
Definition ebpf_windows.h:70
@ EBPF_LOOKUP_ELEMENT
Look up a map element.
Definition ebpf_windows.h:71
@ EBPF_DELETE_ELEMENT
Delete a map element.
Definition ebpf_windows.h:73
@ EBPF_UPDATE_ELEMENT
Update map element.
Definition ebpf_windows.h:72
struct _ebpf_extension_header ebpf_extension_header_t
Header of an eBPF extension data structure. Every eBPF extension data structure must start with this ...
GUID ebpf_program_type_t
Definition ebpf_windows.h:66
uint8_t GUID[16]
Definition ebpf_windows.h:12
enum _ebpf_helper_function ebpf_helper_function_t