Bitdefender Hypervisor Memory Introspection
glueiface.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Bitdefender
3  * SPDX-License-Identifier: Apache-2.0
4  */
15 
16 #ifndef _GLUEIFACE_H_
17 #define _GLUEIFACE_H_
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 #include "intro_types.h"
24 #include "upperiface.h"
25 
26 #pragma pack(push)
27 #pragma pack(8)
28 
30 typedef struct _IG_ARCH_REGS
31 {
60 
62 
64 typedef struct _IG_SEG_REGS
65 {
91 
93 typedef struct _IG_XSAVE_AREA
94 {
101 
105 
106  QWORD Mm0[2];
107  QWORD Mm1[2];
108  QWORD Mm2[2];
109  QWORD Mm3[2];
110  QWORD Mm4[2];
111  QWORD Mm5[2];
112  QWORD Mm6[2];
113  QWORD Mm7[2];
114  QWORD Xmm0[2];
115  QWORD Xmm1[2];
116  QWORD Xmm2[2];
117  QWORD Xmm3[2];
118  QWORD Xmm4[2];
119  QWORD Xmm5[2];
120  QWORD Xmm6[2];
121  QWORD Xmm7[2];
122  QWORD Xmm8[2];
123  QWORD Xmm9[2];
124  QWORD Xmm10[2];
125  QWORD Xmm11[2];
126  QWORD Xmm12[2];
127  QWORD Xmm13[2];
128  QWORD Xmm14[2];
129  QWORD Xmm15[2];
130  BYTE Rsvd2[96];
131  BYTE ExtendedArea[3584];
133 
134 
135 //
136 // MSR definitions
137 //
138 #define IG_IA32_SYSENTER_CS 0x00000174
139 #define IG_IA32_SYSENTER_ESP 0x00000175
140 #define IG_IA32_SYSENTER_EIP 0x00000176
141 #define IG_IA32_MISC_ENABLE 0x000001A0
142 #define IG_IA32_PAT 0x00000277
143 #define IG_IA32_MC0_CTL 0x00000400
144 #define IG_IA32_EFER 0xC0000080
145 #define IG_IA32_STAR 0xC0000081
146 #define IG_IA32_LSTAR 0xC0000082
147 #define IG_IA32_FS_BASE 0xC0000100
148 #define IG_IA32_GS_BASE 0xC0000101
149 #define IG_IA32_KERNEL_GS_BASE 0xC0000102
150 #define IG_IA32_LBR_TOS 0x000001C9
151 #define IG_IA32_DEBUGCTL 0x000001D9
152 
153 
157 typedef enum
158 {
159  IG_MEM_UC = 0x0,
160  IG_MEM_WC = 0x1,
161  IG_MEM_WT = 0x4,
162  IG_MEM_WP = 0x5,
163  IG_MEM_WB = 0x6,
165  IG_MEM_UNKNOWN = 0xFF,
166 } IG_MEMTYPE;
167 
171 typedef enum
172 {
177 
178 
179 
183 typedef enum
184 {
189 } IG_CS_TYPE;
190 
191 
195 typedef enum
196 {
201 } IG_CS_RING;
202 
203 
210 typedef struct _IG_QUERY_MSR
211 {
215 
216 
220 typedef enum
221 {
224 
227 
230 
233 
236 
240 
243 
246 
249 
252 
255 
258 
261 
264 
267 
271 
274 
277 
280 
283 
286 
290 
291 
295 typedef enum _IG_EPT_HOOK_TYPE
296 {
302 
304 
311 typedef enum _IG_DESC_ACCESS
312 {
317 
321 
322 
324 #define IG_CURRENT_VCPU 0xFFFFFFFF
325 
327 #define IG_CURRENT_EPT 0xFFFFFFFF
328 
329 #define IG_INVALID_TIME 0xFFFFFFFFFFFFFFFF
330 
331 
335 typedef enum
336 {
339 
342 
345 
348 
351 
354 
357 
360 } IG_AGENT_TAG;
361 
362 
365 #define IG_DISABLE_IGNORE_SAFENESS 0x02
366 
368 #define IG_PHYSMAP_NO_CACHE 0x00000001
369 
371 #define IG_TIMER_FREQUENCY 1
372 
373 
378 {
384 
385 
389 typedef enum _IG_LOG_LEVEL
390 {
396 } IG_LOG_LEVEL;
397 
398 
399 //
400 // GLUE INTERFACE callbacks
401 //
402 
403 //
404 // Callbacks registered from INTRO to the HV
405 //
406 
407 
427 typedef INTSTATUS
429  _In_ void *GuestHandle,
430  _In_ QWORD PhysicalAddress,
431  _In_ DWORD Length,
432  _In_opt_ QWORD VirtualAddress,
433  _In_ DWORD CpuNumber,
434  _Out_ INTRO_ACTION *Action,
435  _In_ IG_EPT_ACCESS Type
436  );
437 
456 typedef INTSTATUS
458  _In_ void *GuestHandle,
459  _In_ DWORD Msr,
461  _Out_ INTRO_ACTION *Action,
462  _In_opt_ QWORD OriginalValue,
463  _Out_ QWORD *NewValue,
464  _In_ DWORD CpuNumber
465  );
466 
482 typedef INTSTATUS
484  _In_ void *GuestHandle,
485  _In_ QWORD Rip,
486  _In_ DWORD Cpu
487  );
488 
498 typedef INTSTATUS
500  _In_ void *GuestHandle
501  );
502 
517 typedef INTSTATUS
519  _In_ void *GuestHandle,
520  _In_ DWORD Flags,
521  _In_ DWORD CpuNumber,
522  _Out_ INTRO_ACTION *Action
523  );
524 
542 typedef INTSTATUS
544  _In_ void *GuestHandle,
545  _In_ DWORD Cr,
546  _In_ DWORD CpuNumber,
547  _In_ QWORD OldValue,
548  _In_ QWORD NewValue,
549  _Out_ INTRO_ACTION *Action
550  );
551 
567 typedef INTSTATUS
569  _In_ void *GuestHandle,
570  _In_ DWORD CpuNumber,
571  _Out_ INTRO_ACTION *Action
572  );
573 
589 typedef INTSTATUS
591  _In_ void *GuestHandle,
592  _In_ QWORD PhysicalAddress,
593  _In_ DWORD CpuNumber
594  );
595 
609 typedef INTSTATUS
611  _In_ void *GuestHandle,
612  _In_ DWORD Vector,
613  _In_ QWORD ErrorCode,
614  _In_ QWORD Cr2,
615  _In_ DWORD CpuNumber
616  );
617 
632 typedef INTSTATUS
634  _In_ void *GuestHandle,
635  _In_ PENG_NOTIFICATION_HEADER EngineNotification
636  );
637 
638 
639 //
640 // API exposed by the HV to the introspection
641 //
642 
659 typedef INTSTATUS
661  _In_ void *GuestHandle,
662  _In_ DWORD InfoClass,
663  _In_opt_ void *InfoParam,
664  _When_(InfoClass == IG_QUERY_INFO_CLASS_SET_REGISTERS, _In_reads_bytes_(BufferLength))
665  _When_(InfoClass != IG_QUERY_INFO_CLASS_SET_REGISTERS, _Out_writes_bytes_(BufferLength))
666  void *Buffer,
667  _In_ DWORD BufferLength
668  );
669 
681 typedef INTSTATUS
683  _In_ void *GuestHandle,
684  _In_ DWORD EventClass,
685  _In_opt_ void *Parameters,
686  _In_ size_t EventSize
687  );
688 
704 typedef INTSTATUS
706  _In_ void *GuestHandle,
707  _Inout_ void *Parameters
708  );
709 
721 typedef INTSTATUS
723  _In_ void *GuestHandle,
724  _In_ QWORD Gpa,
725  _Out_ QWORD *Hpa
726  );
727 
740 typedef INTSTATUS
742  _In_ void *GuestHandle,
743  _In_ QWORD PhysAddress,
744  _In_ DWORD Length,
745  _In_ DWORD Flags,
746  _Outptr_result_bytebuffer_(Length) void **HostPtr
747  );
748 
757 typedef INTSTATUS
759  _In_ void *GuestHandle,
760  _Inout_ _At_(*HostPtr, _Post_null_) void **HostPtr
761  );
762 
772 typedef INTSTATUS
774  _In_ void *GuestHandle,
775  _In_ QWORD Gpa,
776  _Out_ IG_MEMTYPE *MemType
777  );
778 
792 typedef INTSTATUS
794  _In_ void *GuestHandle,
795  _In_ DWORD EptIndex,
796  _In_ QWORD Address,
797  _Out_ BYTE *Read,
798  _Out_ BYTE *Write,
799  _Out_ BYTE *Execute
800  );
801 
815 typedef INTSTATUS
817  _In_ void *GuestHandle,
818  _In_ DWORD EptIndex,
819  _In_ QWORD Address,
820  _In_ BYTE Read,
821  _In_ BYTE Write,
822  _In_ BYTE Execute
823  );
824 
834 typedef INTSTATUS
836  _In_ void *GuestHandle,
837  _In_ QWORD Address,
838  _Out_ QWORD *SppValue
839  );
840 
850 typedef INTSTATUS
852  _In_ void *GuestHandle,
853  _In_ QWORD Address,
854  _In_ QWORD SppValue
855  );
856 
865 typedef INTSTATUS
867  _In_ void *GuestHandle,
869  );
870 
878 typedef INTSTATUS
880  _In_ void *GuestHandle
881  );
882 
892 typedef INTSTATUS
894  _In_ void *GuestHandle,
895  _In_ DWORD Msr,
896  _Out_ BOOLEAN *OldValue
897  );
898 
908 typedef INTSTATUS
910  _In_ void *GuestHandle,
911  _In_ DWORD Msr,
912  _Out_ BOOLEAN *OldValue
913  );
914 
925 typedef INTSTATUS
927  _In_ void *GuestHandle,
929  );
930 
938 typedef INTSTATUS
940  _In_ void *GuestHandle
941  );
942 
951 typedef INTSTATUS
953  _In_ void *GuestHandle,
955  );
956 
964 typedef INTSTATUS
966  _In_ void *GuestHandle
967  );
968 
977 typedef INTSTATUS
979  _In_ void *GuestHandle,
981  );
982 
990 typedef INTSTATUS
992  _In_ void *GuestHandle
993  );
994 
1003 typedef INTSTATUS
1005  _In_ void *GuestHandle,
1007  );
1008 
1016 typedef INTSTATUS
1018  _In_ void *GuestHandle
1019  );
1020 
1029 typedef INTSTATUS
1031  _In_ void *GuestHandle,
1032  _In_ DWORD Cr
1033  );
1034 
1043 typedef INTSTATUS
1045  _In_ void *GuestHandle,
1046  _In_ DWORD Cr
1047  );
1048 
1057 typedef INTSTATUS
1059  _In_ void *GuestHandle,
1061  );
1062 
1070 typedef INTSTATUS
1072  _In_ void *GuestHandle
1073  );
1074 
1083 typedef INTSTATUS
1085  _In_ void *GuestHandle,
1087  );
1088 
1096 typedef INTSTATUS
1098  _In_ void *GuestHandle
1099  );
1100 
1109 typedef INTSTATUS
1111  _In_ void *GuestHandle,
1113  );
1114 
1122 typedef INTSTATUS
1124  _In_ void *GuestHandle
1125  );
1126 
1135 typedef INTSTATUS
1137  _In_ void *GuestHandle,
1139  );
1140 
1148 typedef INTSTATUS
1150  _In_ void *GuestHandle
1151  );
1152 
1163 typedef INTSTATUS
1165  _In_ void *GuestHandle,
1167  );
1168 
1178 typedef INTSTATUS
1180  _In_ void *GuestHandle
1181  );
1182 
1192 typedef INTSTATUS
1194  _In_ void *GuestHandle
1195  );
1196 
1206 typedef INTSTATUS
1208  _In_ void *GuestHandle
1209  );
1210 
1221 typedef INTSTATUS
1223  _In_ void *GuestHandle,
1224  _Outptr_ void **FirstPageBase,
1225  _Out_ DWORD *PagesCount,
1226  _Outptr_ void **PtBase
1227  );
1228 
1239 typedef INTSTATUS
1241  _In_ void *GuestHandle,
1242  _In_ DWORD CpuNumber,
1243  _In_ BYTE TrapNumber,
1244  _In_ DWORD ErrorCode,
1246  );
1247 
1256 typedef INTSTATUS
1258  _In_ void *GuestHandle,
1259  _In_ PGUEST_INFO GuestInfo
1260  );
1261 
1272 typedef INTSTATUS
1274  _In_ void *GuestHandle,
1275  _In_ INTRO_ERROR_STATE Error,
1277  );
1278 
1286 typedef INTSTATUS
1288  _In_ void *GuestHandle
1289  );
1290 
1298 typedef INTSTATUS
1300  _In_ void *GuestHandle
1301  );
1302 
1303 
1321 typedef INTSTATUS
1323  _In_ void *GuestHandle,
1324  _In_ DWORD CpuNumber,
1325  _In_ QWORD VirtualAddress,
1326  _In_ DWORD BufferSize,
1327  _In_reads_bytes_(BufferSize) PBYTE Buffer
1328  );
1329 
1341 typedef INTSTATUS
1343  _In_ void *GuestHandle,
1344  _In_ DWORD AgentTag,
1345  _In_ BOOLEAN Is64,
1346  _Out_ DWORD *Size,
1347  _Outptr_ PBYTE *Content
1348  );
1349 
1363  _In_ void *GuestHandle,
1364  _In_ void *Buffer,
1365  _In_ DWORD Size
1366  );
1367 
1376 typedef INTSTATUS
1378  _In_ void *GuestHandle,
1379  _In_ BOOLEAN Enable
1380  );
1381 
1382 //
1383 // These functions are exposed by the introspection engine for the HV
1384 //
1385 
1410 typedef INTSTATUS
1412  _In_ void *GuestHandle,
1413  _In_ QWORD Options,
1414  _In_reads_(BufferLength) PBYTE UpdateBuffer,
1415  _In_ DWORD BufferLength
1416  );
1417 
1431 typedef INTSTATUS
1433  _In_ void *GuestHandle,
1434  _In_ QWORD Flags
1435  );
1436 
1437 
1459 typedef INTSTATUS
1461  _In_ void *GuestHandle,
1462  _In_reads_(Length) PBYTE Buffer,
1463  _In_ DWORD Length,
1464  _In_ DWORD Flags
1465  );
1466 
1486 typedef INTSTATUS
1488  _In_ void *GuestHandle,
1489  _In_reads_(Length) PBYTE Buffer,
1490  _In_ DWORD Length
1491  );
1492 
1506 typedef INTSTATUS
1508  _In_ void *GuestHandle,
1509  _Out_ DWORD *MajorVersion,
1510  _Out_ DWORD *MinorVersion,
1511  _Out_ DWORD *BuildNumber
1512  );
1513 
1528 typedef INTSTATUS
1530  _In_ void *GuestHandle,
1531  _Out_ WORD *Major,
1532  _Out_ WORD *Minor,
1533  _Out_ DWORD *BuildNumber
1534  );
1535 
1547 typedef INTSTATUS
1549  _In_ void *GuestHandle,
1550  _Out_ PGUEST_INFO GuestInfo
1551  );
1552 
1573 typedef INTSTATUS
1575  _In_ void *GuestHandle,
1576  _In_ const void *Event,
1577  _In_ INTRO_EVENT_TYPE Type,
1578  _In_ BOOLEAN Exception,
1579  _In_ QWORD Context
1580  );
1581 
1593 typedef INTSTATUS
1595  _In_ void *GuestHandle
1596  );
1597 
1611 typedef INTSTATUS
1613  _In_ void *GuestHandle,
1614  _In_opt_ QWORD Context
1615  );
1616 
1634 typedef INTSTATUS
1636  _In_ void *GuestHandle,
1637  _In_z_ const WCHAR *FullPath,
1638  _In_ DWORD ProtectionMask,
1639  _In_ BOOLEAN Add,
1640  _In_ QWORD Context
1641  );
1642 
1660 typedef INTSTATUS
1662  _In_ void *GuestHandle,
1663  _In_z_ const CHAR *FullPath,
1664  _In_ DWORD ProtectionMask,
1665  _In_ BOOLEAN Add,
1666  _In_ QWORD Context
1667  );
1668 
1675 
1677  _In_ void *GuestHandle,
1678  _In_ BOOLEAN Abort
1679  );
1680 
1692 typedef INTSTATUS
1694  _In_ void *GuestHandle
1695  );
1696 
1705 typedef INTSTATUS
1707  _In_ void *GuestHandle,
1708  _In_ IG_GUEST_POWER_STATE PowerState
1709  );
1710 
1711 #define IG_MAX_COMMAND_LINE_LENGTH 1024
1712 #define IG_MAX_AGENT_NAME_LENGTH 32
1713 
1734 typedef INTSTATUS
1736  _In_ void *GuestHandle,
1737  _In_ DWORD AgentTag,
1738  _In_opt_ PBYTE AgentContent,
1739  _In_opt_ DWORD AgentSize,
1740  _In_z_ const CHAR *Name,
1741  _In_opt_z_ const CHAR *Args
1742  );
1743 
1758 typedef INTSTATUS
1760  _In_ void *GuestHandle,
1761  _In_opt_ PBYTE FileContent,
1762  _In_ DWORD FileSize,
1763  _In_z_ const CHAR *Name
1764  );
1765 
1777 typedef INTSTATUS
1779  _In_ void *GuestHandle,
1780  _In_ DWORD CpuNumber,
1781  _Out_ BYTE *Length
1782  );
1783 
1796 typedef INTSTATUS
1798  _In_ void *GuestHandle,
1799  _In_ DWORD CpuNumber,
1800  _Out_ CHAR *Mnemonic
1801  );
1802 
1813 typedef INTSTATUS
1815  _In_ QWORD Cr3,
1816  _In_ QWORD VirtualAddress,
1817  _In_ QWORD Entry,
1818  _In_ QWORD PageSize
1819  );
1820 
1830 typedef INTSTATUS
1832  _In_ void *GuestHandle,
1833  _In_ QWORD Cr3,
1835  );
1836 
1847 typedef INTSTATUS
1849  _In_ void *GuestHandle,
1850  _In_ QWORD NewDynamicOptions
1851  );
1852 
1863 typedef INTSTATUS
1865  _In_ void *GuestHandle
1866  );
1867 
1879 typedef INTSTATUS
1881  _In_ void *GuestHandle,
1882  _Out_ QWORD *IntroOptions
1883  );
1884 
1893 typedef INTSTATUS
1895  _In_ void *GuestHandle,
1896  _In_ IG_LOG_LEVEL LogLevel
1897  );
1898 
1913 typedef INTSTATUS
1915  _In_ DWORD FullStringSize,
1916  _In_ DWORD VersionStringSize,
1917  _Out_ CHAR *FullString,
1918  _Out_ CHAR *VersionString
1919  );
1920 
1921 
1922 //
1923 // Debug facilities
1924 //
1925 
1936 typedef INTSTATUS
1938  _In_ void *GuestHandle,
1939  _In_ DWORD CpuNumber,
1940  _In_ DWORD Argc,
1941  _In_ CHAR *Argv[]
1942  );
1943 
1944 
1945 //
1946 // #VE related API, exposed by the integrator
1947 //
1948 
1958 typedef INTSTATUS
1960  _In_ void *GuestHandle,
1961  _In_ DWORD CpuNumber,
1962  _In_ QWORD VeInfoGpa
1963  );
1964 
1975 typedef INTSTATUS
1977  _In_ void *GuestHandle,
1978  _Out_ DWORD *EptIndex
1979  );
1980 
1991 typedef INTSTATUS
1993  _In_ void *GuestHandle,
1994  _In_ DWORD EptIndex
1995  );
1996 
2007 typedef INTSTATUS
2009  _In_ void *GuestHandle,
2010  _In_ DWORD NewEptIndex
2011  );
2012 
2025 typedef INTSTATUS
2027  _In_ void *GuestHandle,
2028  _In_ DWORD EptIndex,
2029  _In_ QWORD Address,
2030  _Out_ BOOLEAN *Convertible
2031  );
2032 
2045 typedef INTSTATUS
2047  _In_ void *GuestHandle,
2048  _In_ DWORD EptIndex,
2049  _In_ QWORD Address,
2050  _In_ BOOLEAN Convertible
2051  );
2052 
2053 
2064 typedef INTSTATUS
2066  _In_ void* GuestHandle
2067  );
2068 
2078 typedef struct _GLUE_IFACE
2079 {
2085 
2086  //
2087  // following functions have semantics of introspection library -> hypervisor
2088  //
2089 
2091 
2093 
2097 
2104 
2109 
2112 
2113  // VMCALL handler for introspection specific calls.
2116 
2117  // VMX-Preemption timer callback - allows to do periodic stuff, like integrity checking.
2120 
2121  // GDTR/IDTR access
2124 
2129 
2130  // XCR write handler.
2133 
2134  // Breakpoint handler.
2137 
2138  // Event injection handler.
2141 
2143 
2145 
2146  //
2147  // From here on, these functions are optional (until HV - Intro interface)
2148  //
2149 
2151 
2159 
2163 
2164  //
2165  // #VE related API (Optional)
2166  //
2173 
2174  // Asynchronous callback used by the engines to provide a scan result.
2177 
2179 
2182 
2183  //
2184  // following functions have semantics of hypervisor -> introspection library.
2185  // the below function pointers must be populated by the introspection library at initialization
2186  // the hypervisor expects that, if IntInit was successful, the below pointers are valid
2187  //
2191 
2214 
2216 
2221 
2223 
2224 #define GLUE_IFACE_VERSION_1 0x00010111
2225 #define GLUE_IFACE_VERSION_1_SIZE sizeof(GLUE_IFACE)
2226 
2227 #define GLUE_IFACE_VERSION_LATEST GLUE_IFACE_VERSION_1
2228 #define GLUE_IFACE_VERSION_LATEST_SIZE GLUE_IFACE_VERSION_1_SIZE
2229 
2230 
2231 //
2232 // The following functions are NOT directly part of the interface, but needs to be
2233 // implemented by any GLUE library (NAPOCA, VMWARE, CITRIX, and so on)
2234 //
2235 
2236 typedef void
2238  void
2239  );
2240 
2241 typedef INTSTATUS
2243  _In_ PGLUE_IFACE GlueInterface,
2244  _In_ PUPPER_IFACE UpperInterface
2245  );
2246 
2247 typedef INTSTATUS
2249  void
2250  );
2251 
2252 typedef BOOLEAN
2254  _In_ DWORD IntegratorMajor,
2255  _In_ DWORD IntegratorMinor,
2256  _In_ DWORD IntegratorRevision,
2257  _In_ DWORD IntegratorBuild,
2258  _Out_ DWORD *IntroMajor,
2259  _Out_ DWORD *IntroMinor,
2260  _Out_ DWORD *IntroRevision,
2261  _Out_ DWORD *IntroBuild,
2262  _In_ DWORD Reserved
2263  );
2264 
2265 #pragma pack(pop)
2266 
2267 #ifdef __cplusplus
2268 }
2269 #endif
2270 
2271 #endif // _GLUEIFACE_H_
Shows all logs.
Definition: glueiface.h:391
#define _In_opt_
Definition: intro_sal.h:16
INTSTATUS(* PFUNC_IntUnregisterXcrWriteHandler)(void *GuestHandle)
Unregisters the current extended control register write callback, unsubscribing introcore from XCR ev...
Definition: glueiface.h:1097
Get the guest XCR0 value for a VCPU.
Definition: glueiface.h:276
INTSTATUS(* PFUNC_IntGetGuestInfo)(void *GuestHandle, PGUEST_INFO GuestInfo)
Get a description of the introspected guest.
Definition: glueiface.h:1548
_Bool BOOLEAN
Definition: intro_types.h:58
#define _Out_
Definition: intro_sal.h:22
PFUNC_IntNotifyNewGuest NewGuestNotification
Definition: glueiface.h:2188
PFUNC_IntUnregisterBreakpointHandler UnregisterBreakpointHandler
Definition: glueiface.h:2136
void * _I_H_Reserved2
Definition: glueiface.h:2180
PFUNC_IntUnregisterIntroCallHandler UnregisterIntroCallHandler
Definition: glueiface.h:2115
QWORD Value
The value of the MSR.
Definition: glueiface.h:213
INTSTATUS(* PFUNC_IntGetSPPPageProtection)(void *GuestHandle, QWORD Address, QWORD *SppValue)
Returns the SPP protection rights for a guest physical address. This API is optional.
Definition: glueiface.h:835
Describes an XSAVE area format.
Definition: glueiface.h:93
PFUNC_IntGetExceptionsVersion GetExceptionsVersion
Definition: glueiface.h:2195
QWORD CsBase
Definition: glueiface.h:66
struct _IG_XSAVE_AREA IG_XSAVE_AREA
Describes an XSAVE area format.
Dummy agent used to demo the feature.
Definition: glueiface.h:338
PFUNC_IntGetCurrentInstructionMnemonic GetCurrentInstructionMnemonic
Definition: glueiface.h:2207
INTSTATUS(* PFUNC_IntModifyDynamicOptions)(void *GuestHandle, QWORD NewDynamicOptions)
Modifies the introcore options.
Definition: glueiface.h:1848
void(* PFUNC_IntPreinit)(void)
Definition: glueiface.h:2237
PFUNC_IntNotifyIntrospectionDetectedOs NotifyIntrospectionDetectedOs
Definition: glueiface.h:2154
QWORD DsBase
Definition: glueiface.h:74
uint8_t BYTE
Definition: intro_types.h:47
Read-access hook.
Definition: glueiface.h:298
IDTR access.
Definition: glueiface.h:313
INTSTATUS(* PFUNC_IntGetCurrentIntroOptions)(void *GuestHandle, QWORD *IntroOptions)
Get the currently used introcore options.
Definition: glueiface.h:1880
PFUNC_IntRegisterXcrWriteHandler RegisterXcrWriteHandler
Definition: glueiface.h:2131
PFUNC_IntGetEPTPageProtection GetEPTPageProtection
Definition: glueiface.h:2098
The Linux version of the remediation tool.
Definition: glueiface.h:344
PFUNC_IntUnregisterDescriptorTableHandler UnregisterDtrHandler
Definition: glueiface.h:2123
QWORD EsSelector
Definition: glueiface.h:80
PFUNC_IntRemoveAllProtectedProcesses RemoveAllProtectedProcesses
Definition: glueiface.h:2205
#define _In_
Definition: intro_sal.h:21
Write access.
Definition: glueiface.h:174
INTSTATUS(* PFUNC_IntRegisterMSRHandler)(void *GuestHandle, PFUNC_IntMSRViolationCallback Callback)
Registers a MSR exit handler.
Definition: glueiface.h:926
PFUNC_IntGetAgentContent GetAgentContent
Definition: glueiface.h:2160
uint16_t WORD
Definition: intro_types.h:48
#define _Out_writes_bytes_(expr)
Definition: intro_sal.h:38
LDTR access.
Definition: glueiface.h:316
INTSTATUS(* PFUNC_IntNotifyIntroAlert)(void *GuestHandle, DWORD EventClass, void *Parameters, size_t EventSize)
Used by introcore to report events to the integrator.
Definition: glueiface.h:682
IG_QUERY_INFO_CLASS
Describes the type of query done by GLUE_IFACE.QueryGuestInfo.
Definition: glueiface.h:220
PFUNC_IntRegisterVmxTimerHandler RegisterIntroTimerHandler
Definition: glueiface.h:2118
Get the availability of the IDTR/GDTR exits.
Definition: glueiface.h:288
QWORD DsSelector
Definition: glueiface.h:76
INTSTATUS(* PFUNC_VirtualAddressSpaceCallback)(QWORD Cr3, QWORD VirtualAddress, QWORD Entry, QWORD PageSize)
The type of callback invoked by PFUNC_IntIterateVaSpace while iterating the guest virtual address spa...
Definition: glueiface.h:1814
INTSTATUS(* PFUNC_IntNotifyIntrospectionErrorState)(void *GuestHandle, INTRO_ERROR_STATE Error, PINTRO_ERROR_CONTEXT Context)
Notifies the integrator about an error encountered by the introspection engine.
Definition: glueiface.h:1273
void * _H_I_Reserved1
Definition: glueiface.h:2193
PFUNC_IntPhysMemUnmap PhysMemUnmap
Definition: glueiface.h:2095
_IG_DESC_ACCESS
Descriptor table access flags.
Definition: glueiface.h:311
PFUNC_IntUnregisterVmxTimerHandler UnregisterIntroTimerHandler
Definition: glueiface.h:2119
PFUNC_IntRequestVcpusResume ResumeVcpus
Definition: glueiface.h:2111
PFUNC_IntInjectTrap InjectTrap
Definition: glueiface.h:2142
Uncacheable.
Definition: glueiface.h:159
Interface that exposes basic services to the introspection engines.
Definition: upperiface.h:262
INTSTATUS(* PFUNC_IntRegisterBreakpointHandler)(void *GuestHandle, PFUNC_IntBreakpointCallback Callback)
Registers a break point event callback.
Definition: glueiface.h:1110
enum _IG_GUEST_POWER_STATE IG_GUEST_POWER_STATE
The guest power state.
INTSTATUS(* PFUNC_IntQueryGuestInfo)(void *GuestHandle, DWORD InfoClass, void *InfoParam, void *Buffer, DWORD BufferLength)
API exposed by the integrator that allows introcore to obtain various information about the guest...
Definition: glueiface.h:660
INTSTATUS(* PFUNC_IntRegisterIntroCallHandler)(void *GuestHandle, PFUNC_IntIntroCallCallback Callback)
Registers a VMCALL exit handler.
Definition: glueiface.h:952
DWORD Version
The version of the interface. Must match GLUE_IFACE_VERSION_1.
Definition: glueiface.h:2081
PFUNC_IntFlushGpaCache FlushGpaCache
Definition: glueiface.h:2210
PFUNC_IntCreateEPT CreateEPT
Definition: glueiface.h:2168
PFUNC_IntGetEPTPageConvertible GetEPTPageConvertible
Definition: glueiface.h:2171
Exposes the types and constants used by various Introcore APIs defined in glueiface.h.
Holds segment register state.
Definition: glueiface.h:64
INTSTATUS(* PFUNC_IntUpdateSupport)(void *GuestHandle, PBYTE Buffer, DWORD Length)
Loads a new CAMI version.
Definition: glueiface.h:1487
The remediation tool agent.
Definition: glueiface.h:341
INTSTATUS(* PFUNC_IntGetSupportVersion)(void *GuestHandle, DWORD *MajorVersion, DWORD *MinorVersion, DWORD *BuildNumber)
Get the current version of CAMI.
Definition: glueiface.h:1507
#define _In_reads_(expr)
Definition: intro_sal.h:27
PFUNC_IntDestroyEPT DestroyEPT
Definition: glueiface.h:2169
QWORD GsAr
Definition: glueiface.h:89
INTSTATUS(* PFUNC_IntEPTViolationCallback)(void *GuestHandle, QWORD PhysicalAddress, DWORD Length, QWORD VirtualAddress, DWORD CpuNumber, INTRO_ACTION *Action, IG_EPT_ACCESS Type)
Definition: glueiface.h:428
struct _IG_QUERY_MSR * PIG_QUERY_MSR
PFUNC_IntAddRemoveProtectedProcessUtf16 AddRemoveProtectedProcessUtf16
Definition: glueiface.h:2203
Get the current privilege level for a VCPU. Buffer points to a IG_CS_RING enum.
Definition: glueiface.h:254
struct _IG_SEG_REGS * PIG_SEG_REGS
PFUNC_IntPhysMemMapToHost PhysMemMapToHost
Definition: glueiface.h:2094
#define _Outptr_
Definition: intro_sal.h:19
PFUNC_IntFlushAlertExceptions FlushAlertExceptions
Definition: glueiface.h:2202
Shows informational logs and logs with a higher level.
Definition: glueiface.h:392
INTSTATUS(* PFUNC_IntGetVersionString)(DWORD FullStringSize, DWORD VersionStringSize, CHAR *FullString, CHAR *VersionString)
Get the version string information for the current guest.
Definition: glueiface.h:1914
int INTSTATUS
The status data type.
Definition: introstatus.h:24
GDTR access.
Definition: glueiface.h:314
INTSTATUS(* PFUNC_IntGetCurrentInstructionMnemonic)(void *GuestHandle, DWORD CpuNumber, CHAR *Mnemonic)
Returns the mnemonic of the instruction at which the current guest RIP points.
Definition: glueiface.h:1797
INTSTATUS(* PFUNC_IntSetSPPPageProtection)(void *GuestHandle, QWORD Address, QWORD SppValue)
Set the SPP protection rights for a guest physical address. This API is optional. ...
Definition: glueiface.h:851
_IG_LOG_LEVEL
Controls the verbosity of the logs.
Definition: glueiface.h:389
Shows only critical logs.
Definition: glueiface.h:395
INTSTATUS(* PFUNC_IntGetEPTPageProtection)(void *GuestHandle, DWORD EptIndex, QWORD Address, BYTE *Read, BYTE *Write, BYTE *Execute)
Returns the EPT access rights for a guest physical page.
Definition: glueiface.h:793
PFUNC_IntRegisterMSRHandler RegisterMSRHandler
Definition: glueiface.h:2107
INTSTATUS(* PFUNC_IntPhysMemMapToHost)(void *GuestHandle, QWORD PhysAddress, DWORD Length, DWORD Flags, void **HostPtr)
Maps a guest physical address to the host virtual space.
Definition: glueiface.h:741
QWORD SsBase
Definition: glueiface.h:70
QWORD GsSelector
Definition: glueiface.h:88
QWORD Flags
Definition: glueiface.h:49
INTSTATUS(* PFUNC_IntFlushGpaCache)(void *GuestHandle)
Flushed the introcore GPA cache.
Definition: glueiface.h:1864
QWORD SsAr
Definition: glueiface.h:73
INTSTATUS(* PFUNC_IntMSRViolationCallback)(void *GuestHandle, DWORD Msr, IG_MSR_HOOK_TYPE Flags, INTRO_ACTION *Action, QWORD OriginalValue, QWORD *NewValue, DWORD CpuNumber)
Definition: glueiface.h:457
QWORD CsAr
Definition: glueiface.h:69
QWORD FsLimit
Definition: glueiface.h:83
INTSTATUS(* PFUNC_IntGetPhysicalPageTypeFromMtrrs)(void *GuestHandle, QWORD Gpa, IG_MEMTYPE *MemType)
Returns the memory type of a guest physical page, as taken from the MTRRs.
Definition: glueiface.h:773
IG_CS_RING
The current protection level.
Definition: glueiface.h:195
INTSTATUS(* PFUNC_IntSetIntroEmulatorContext)(void *GuestHandle, DWORD CpuNumber, QWORD VirtualAddress, DWORD BufferSize, PBYTE Buffer)
Sets the memory contents with which an instruction will be emulated by the hypervisor.
Definition: glueiface.h:1322
Interface used for communicating between the introspection engine and the integrator.
Definition: glueiface.h:2078
PFUNC_IntUnregisterEPTHandler UnregisterEPTHandler
Definition: glueiface.h:2103
INTSTATUS(* PFUNC_IntFlushAlertExceptions)(void *GuestHandle)
Removes all the custom exceptions added with GLUE_IFACE.AddExceptionFromAlert.
Definition: glueiface.h:1594
PFUNC_IntAddExceptionFromAlert AddExceptionFromAlert
Definition: glueiface.h:2200
PFUNC_IntInjectFileAgent InjectFileAgent
Definition: glueiface.h:2198
PFUNC_IntDisableCrWriteExit DisableCrWriteExit
Definition: glueiface.h:2126
32-bit selector.
Definition: glueiface.h:187
INTSTATUS(* PFUNC_IntIntroDescriptorTableCallback)(void *GuestHandle, DWORD Flags, DWORD CpuNumber, INTRO_ACTION *Action)
Definition: glueiface.h:518
PFUNC_IntRegisterBreakpointHandler RegisterBreakpointHandler
Definition: glueiface.h:2135
INTSTATUS(* PFUNC_IntUnregisterBreakpointHandler)(void *GuestHandle)
Unregisters the current break point event callback, unsubscribing introcore from BP events...
Definition: glueiface.h:1123
PFUNC_IntNotifyGuestPowerStateChange NotifyGuestPowerStateChange
Definition: glueiface.h:2190
INTSTATUS(* PFUNC_IntGetCurrentInstructionLength)(void *GuestHandle, DWORD CpuNumber, BYTE *Length)
Returns the length of the instruction at which the current guest RIP points.
Definition: glueiface.h:1778
QWORD SsSelector
Definition: glueiface.h:72
PFUNC_IntSetEPTPageConvertible SetEPTPageConvertible
Definition: glueiface.h:2172
INTSTATUS(* PFUNC_IntUninit)(void)
Definition: glueiface.h:2248
INTSTATUS(* PFUNC_IntBreakpointCallback)(void *GuestHandle, QWORD PhysicalAddress, DWORD CpuNumber)
Definition: glueiface.h:590
The MSR query structure.
Definition: glueiface.h:210
IG_CS_TYPE
The type of the code segment.
Definition: glueiface.h:183
Defines an interface that exposes various services to the introspection engine.
BOOLEAN(* PFUNC_IntCheckCompatibility)(DWORD IntegratorMajor, DWORD IntegratorMinor, DWORD IntegratorRevision, DWORD IntegratorBuild, DWORD *IntroMajor, DWORD *IntroMinor, DWORD *IntroRevision, DWORD *IntroBuild, DWORD Reserved)
Definition: glueiface.h:2253
PFUNC_IntGetSupportVersion GetSupportVersion
Definition: glueiface.h:2213
Get the number of VCPUs available to the guest.
Definition: glueiface.h:235
INTSTATUS(* PFUNC_IntRegisterEnginesResultCallback)(void *GuestHandle, PFUNC_IntEventEnginesResultCallback Callback)
Registers a third party scan result callback. This API is optional.
Definition: glueiface.h:1164
INTSTATUS(* PFUNC_IntDestroyEPT)(void *GuestHandle, DWORD EptIndex)
Destroys an EPT.
Definition: glueiface.h:1992
struct _IG_ARCH_REGS * PIG_ARCH_REGS
Write-back.
Definition: glueiface.h:163
Shows warning logs and logs with a higher level.
Definition: glueiface.h:393
PFUNC_IntSetIntroEmulatorContext SetIntroEmulatorContext
Definition: glueiface.h:2144
Write-combining.
Definition: glueiface.h:160
INTSTATUS(* PFUNC_IntRegisterXcrWriteHandler)(void *GuestHandle, PFUNC_IntXcrWriteCallback Callback)
Registers an extended control register write callback.
Definition: glueiface.h:1084
PFUNC_IntNotifyIntroAlert NotifyIntrospectionAlert
Definition: glueiface.h:2157
INTSTATUS(* PFUNC_IntNotifyGuestPowerStateChange)(void *GuestHandle, IG_GUEST_POWER_STATE PowerState)
Notifies introcore about a guest power state change.
Definition: glueiface.h:1706
void * _I_H_Reserved3
Definition: glueiface.h:2181
INTSTATUS(* PFUNC_IntRemoveException)(void *GuestHandle, QWORD Context)
Removes a custom exception added with GLUE_IFACE.AddExceptionFromAlert.
Definition: glueiface.h:1612
The guest is shutting down by force.
Definition: glueiface.h:382
The guest is resuming from hibernate or sleep.
Definition: glueiface.h:379
#define _Inout_
Definition: intro_sal.h:20
INTSTATUS(* PFUNC_IntRemoveAllProtectedProcesses)(void *GuestHandle)
Removes the protection policies for all processes.
Definition: glueiface.h:1693
The process killer agent.
Definition: glueiface.h:350
QWORD DsAr
Definition: glueiface.h:77
PFUNC_IntNotifyIntrospectionErrorState NotifyIntrospectionErrorState
Definition: glueiface.h:2156
PFUNC_IntSetVeInfoPage SetVeInfoPage
Definition: glueiface.h:2167
PFUNC_IntEnableMsrExit EnableMSRExit
Definition: glueiface.h:2105
INTSTATUS(* PFUNC_IntEnableMsrExit)(void *GuestHandle, DWORD Msr, BOOLEAN *OldValue)
Enables VMEXIT events for a MSR.
Definition: glueiface.h:893
INTSTATUS(* PFUNC_IntDisableCrWriteExit)(void *GuestHandle, DWORD Cr)
Disable VMEXIT events for a control register.
Definition: glueiface.h:1044
INTSTATUS(* PFUNC_IntInjectFileAgent)(void *GuestHandle, PBYTE FileContent, DWORD FileSize, const CHAR *Name)
Drops a file on the guest hard disk.
Definition: glueiface.h:1759
PFUNC_IntRegisterDescriptorTableHandler RegisterDtrHandler
Definition: glueiface.h:2122
INTSTATUS(* PFUNC_IntReleaseBuffer)(void *GuestHandle, void *Buffer, DWORD Size)
Frees all the resources associated with the given buffer.
Definition: glueiface.h:1362
INTSTATUS(* PFUNC_IntEventInjectionCallback)(void *GuestHandle, DWORD Vector, QWORD ErrorCode, QWORD Cr2, DWORD CpuNumber)
Definition: glueiface.h:610
PFUNC_IntRegisterIntroCallHandler RegisterIntroCallHandler
Definition: glueiface.h:2114
The context of an error state.
Definition: intro_types.h:2415
Get the guest XSAVE area for a VCPU.
Definition: glueiface.h:263
INTSTATUS(* PFUNC_IntGetEPTPageConvertible)(void *GuestHandle, DWORD EptIndex, QWORD Address, BOOLEAN *Convertible)
Get the convertible status of a guest physical page.
Definition: glueiface.h:2026
PFUNC_IntRegisterEnginesResultCallback RegisterEnginesResultCallback
Definition: glueiface.h:2175
Write-protect.
Definition: glueiface.h:162
PFUNC_IntRemoveException RemoveException
Definition: glueiface.h:2201
PFUNC_IntSetEPTPageProtection SetEPTPageProtection
Definition: glueiface.h:2099
uint8_t * PBYTE
Definition: intro_types.h:47
INTSTATUS(* PFUNC_IntSetVeInfoPage)(void *GuestHandle, DWORD CpuNumber, QWORD VeInfoGpa)
Set the Virtualization exception info page.
Definition: glueiface.h:1959
INTSTATUS(* PFUNC_IntGetExceptionsVersion)(void *GuestHandle, WORD *Major, WORD *Minor, DWORD *BuildNumber)
Get the current exceptions version.
Definition: glueiface.h:1529
PFUNC_IntInjectProcessAgent InjectProcessAgent
Definition: glueiface.h:2197
PFUNC_IntGpaToHpa GpaToHpa
Definition: glueiface.h:2092
INTSTATUS(* PFUNC_IntPhysMemUnmap)(void *GuestHandle, void **HostPtr)
Frees any resources allocated by a GLUE_IFACE.PhysMemMapToHost call.
Definition: glueiface.h:758
PFUNC_IntToggleRepOptimization ToggleRepOptimization
Definition: glueiface.h:2162
Read access.
Definition: glueiface.h:318
unsigned long long QWORD
Definition: intro_types.h:53
INTSTATUS(* PFUNC_IntFlushEPTPermissions)(void *GuestHandle)
Flushes the EPT access permissions. Once this function returns, the caller can be assured that all mo...
Definition: glueiface.h:2065
INTSTATUS(* PFUNC_IntSetEPTPageProtection)(void *GuestHandle, DWORD EptIndex, QWORD Address, BYTE Read, BYTE Write, BYTE Execute)
Sets the EPT access rights for a guest physical page.
Definition: glueiface.h:816
void * _H_I_Reserved3
Definition: glueiface.h:2219
PFUNC_IntGetCurrentIntroOptions GetCurrentIntroOptions
Definition: glueiface.h:2211
Read access.
Definition: glueiface.h:173
INTSTATUS(* PFUNC_IntRegisterVmxTimerHandler)(void *GuestHandle, PFUNC_IntIntroTimerCallback Callback)
Registers a timer callback.
Definition: glueiface.h:978
Shows error logs and logs with a higher level.
Definition: glueiface.h:394
INTSTATUS(* PFUNC_IntInjectTrap)(void *GuestHandle, DWORD CpuNumber, BYTE TrapNumber, DWORD ErrorCode, QWORD Cr2)
Injects an exception inside the guest.
Definition: glueiface.h:1240
INTSTATUS(* PFUNC_IntAddRemoveProtectedProcessUtf8)(void *GuestHandle, const CHAR *FullPath, DWORD ProtectionMask, BOOLEAN Add, QWORD Context)
Toggles protection for a process.
Definition: glueiface.h:1661
PFUNC_IntUpdateExceptions UpdateExceptions
Definition: glueiface.h:2194
QWORD GdtBase
Definition: glueiface.h:58
PFUNC_IntRegisterEventInjectionHandler RegisterEventInjectionHandler
Definition: glueiface.h:2139
DWORD Size
The size of the interface.Must match GLUE_IFACE_VERSION_1_SIZE.
Definition: glueiface.h:2083
INTSTATUS(* PFUNC_IntAddExceptionFromAlert)(void *GuestHandle, const void *Event, INTRO_EVENT_TYPE Type, BOOLEAN Exception, QWORD Context)
Adds an exception for an alert reported by introcore.
Definition: glueiface.h:1574
INTSTATUS(* PFUNC_IntRegisterDescriptorTableHandler)(void *GuestHandle, PFUNC_IntIntroDescriptorTableCallback Callback)
Registers a descriptor table access callback.
Definition: glueiface.h:1004
PFUNC_IntSwitchEPT SwitchEPT
Definition: glueiface.h:2170
INTSTATUS(* PFUNC_IntSetEPTPageConvertible)(void *GuestHandle, DWORD EptIndex, QWORD Address, BOOLEAN Convertible)
Set the convertible status of a guest physical page.
Definition: glueiface.h:2046
PFUNC_IntFlushEPTPermissions FlushEPTPermissions
Definition: glueiface.h:2178
INTSTATUS(* PFUNC_IntRegisterEventInjectionHandler)(void *GuestHandle, PFUNC_IntEventInjectionCallback Callback)
Registers an event injection callback.
Definition: glueiface.h:1136
DWORD MsrId
The ID of the MSR, as defined by Intel.
Definition: glueiface.h:212
DWORD MxcsrMask
Definition: glueiface.h:104
Get the current VCPU number.
Definition: glueiface.h:245
struct _IG_QUERY_MSR IG_QUERY_MSR
The MSR query structure.
INTSTATUS(* PFUNC_IntInjectProcessAgent)(void *GuestHandle, DWORD AgentTag, PBYTE AgentContent, DWORD AgentSize, const CHAR *Name, const CHAR *Args)
Requests a process agent injection inside the guest.
Definition: glueiface.h:1735
QWORD FsBase
Definition: glueiface.h:82
PFUNC_IntSetSPPPageProtection SetSPPPageProtection
Definition: glueiface.h:2101
QWORD IdtLimit
Definition: glueiface.h:57
Dummy agent used to demo the feature.
Definition: intro_types.h:2315
INTSTATUS(* PFUNC_IntReserveVaSpaceWithPt)(void *GuestHandle, void **FirstPageBase, DWORD *PagesCount, void **PtBase)
Reserves a dedicated memory region inside the hypervisor page tables. This API is optional...
Definition: glueiface.h:1222
struct _GLUE_IFACE * PGLUE_IFACE
QWORD GsLimit
Definition: glueiface.h:87
INTSTATUS(* PFUNC_IntEventEnginesResultCallback)(void *GuestHandle, PENG_NOTIFICATION_HEADER EngineNotification)
Definition: glueiface.h:633
QWORD GdtLimit
Definition: glueiface.h:59
PFUNC_IntDebugProcessCommand DebugProcessCommand
Definition: glueiface.h:2192
INTSTATUS(* PFUNC_IntSetIntroAbortStatus)(void *GuestHandle, BOOLEAN Abort)
Abort the introcore loading process.
Definition: glueiface.h:1676
#define _Outptr_result_bytebuffer_(expr)
Definition: intro_sal.h:24
INTSTATUS(* PFUNC_IntRequestVcpusPause)(void *GuestHandle)
Pauses all the VCPUs assigned to a guest.
Definition: glueiface.h:1193
INTSTATUS(* PFUNC_IntUpdateExceptions)(void *GuestHandle, PBYTE Buffer, DWORD Length, DWORD Flags)
Loads a new exceptions version.
Definition: glueiface.h:1460
#define _In_opt_z_
Definition: intro_sal.h:18
PFUNC_IntDisableMsrExit DisableMSRExit
Definition: glueiface.h:2106
The guest is entering sleep.
Definition: glueiface.h:380
Write access.
Definition: glueiface.h:319
PFUNC_IntAddRemoveProtectedProcessUtf8 AddRemoveProtectedProcessUtf8
Definition: glueiface.h:2204
INTSTATUS(* PFUNC_IntNotifyIntrospectionDeactivated)(void *GuestHandle)
Notifies the integrator that the introspection engine is no longer active.
Definition: glueiface.h:1299
PFUNC_IntNotifyEngines NotifyScanEngines
Definition: glueiface.h:2158
PFUNC_IntReserveVaSpaceWithPt ReserveVaSpaceWithPt
Definition: glueiface.h:2150
INTSTATUS(* PFUNC_IntInit)(PGLUE_IFACE GlueInterface, PUPPER_IFACE UpperInterface)
Definition: glueiface.h:2242
QWORD SsLimit
Definition: glueiface.h:71
INTSTATUS(* PFUNC_IntUnregisterMSRHandler)(void *GuestHandle)
Unregisters the current MSR exit callback, unsubscribing introcore from MSR violation events...
Definition: glueiface.h:939
QWORD EsAr
Definition: glueiface.h:81
struct _IG_ARCH_REGS IG_ARCH_REGS
Holds register state.
TR access.
Definition: glueiface.h:315
PFUNC_IntModifyDynamicOptions ModifyDynamicOptions
Definition: glueiface.h:2209
INTSTATUS(* PFUNC_IntUnregisterIntroCallHandler)(void *GuestHandle)
Unregisters the current VMCALL exit callback, unsubscribing introcore from VMCALL events...
Definition: glueiface.h:965
INTSTATUS(* PFUNC_IntAddRemoveProtectedProcessUtf16)(void *GuestHandle, const WCHAR *FullPath, DWORD ProtectionMask, BOOLEAN Add, QWORD Context)
Toggles protection for a process.
Definition: glueiface.h:1635
uint16_t WCHAR
Definition: intro_types.h:63
PFUNC_IntUnregisterCrWriteHandler UnregisterCrWriteHandler
Definition: glueiface.h:2128
QWORD CsSelector
Definition: glueiface.h:68
uint32_t DWORD
Definition: intro_types.h:49
PFUNC_IntUnregisterEventInjectionHandler UnregisterEventInjectionHandler
Definition: glueiface.h:2140
BYTE IG_EPT_ACCESS
Definition: glueiface.h:303
The log gathering agent.
Definition: glueiface.h:347
INTSTATUS(* PFUNC_IntIntroCallCallback)(void *GuestHandle, QWORD Rip, DWORD Cpu)
Definition: glueiface.h:483
INTSTATUS(* PFUNC_IntNotifyIntrospectionActivated)(void *GuestHandle)
Notifies the integrator that the introspection engine is active.
Definition: glueiface.h:1287
PFUNC_IntUpdateSupport UpdateSupport
Definition: glueiface.h:2212
IG_MSR_HOOK_TYPE
The type of the MSR access.
Definition: glueiface.h:171
Get the segment registers for the current VCPU. Buffer points to a IG_SEG_REGS structure.
Definition: glueiface.h:257
PFUNC_IntGetCurrentInstructionLength GetCurrentInstructionLength
Definition: glueiface.h:2206
enum _INTRO_ACTION INTRO_ACTION
Event actions.
#define _At_(expr, arg)
Definition: intro_sal.h:23
#define _In_reads_bytes_(expr)
Definition: intro_sal.h:25
PFUNC_IntIterateVaSpace IterateVirtualAddressSpace
Definition: glueiface.h:2208
INTSTATUS(* PFUNC_IntIterateVaSpace)(void *GuestHandle, QWORD Cr3, PFUNC_VirtualAddressSpaceCallback Callback)
Iterates over the guest virtual address space.
Definition: glueiface.h:1831
QWORD GsBase
Definition: glueiface.h:86
INTSTATUS(* PFUNC_IntCreateEPT)(void *GuestHandle, DWORD *EptIndex)
Creates a new EPT.
Definition: glueiface.h:1976
PFUNC_IntGetSPPPageProtection GetSPPPageProtection
Definition: glueiface.h:2100
No access type. This can be used for swap hooks.
Definition: glueiface.h:297
INTSTATUS(* PFUNC_IntCrWriteCallback)(void *GuestHandle, DWORD Cr, DWORD CpuNumber, QWORD OldValue, QWORD NewValue, INTRO_ACTION *Action)
Definition: glueiface.h:543
The remediation tool agent.
Definition: intro_types.h:2318
QWORD CsLimit
Definition: glueiface.h:67
Get the availability of the VMFUNC feature in hardware and the hypervisor.
Definition: glueiface.h:282
IG_AGENT_TAG
Deployable agent tags.
Definition: glueiface.h:335
_IG_EPT_HOOK_TYPE
Ept violation types.
Definition: glueiface.h:295
PFUNC_IntGetGuestInfo GetGuestInfo
Definition: glueiface.h:2196
INTSTATUS(* PFUNC_IntUnregisterEventInjectionHandler)(void *GuestHandle)
Unregisters the current event injection callback.
Definition: glueiface.h:1149
INTSTATUS(* PFUNC_IntUnregisterCrWriteHandler)(void *GuestHandle)
Unregisters the current control register write callback, unsubscribing introcore from CR events...
Definition: glueiface.h:1071
PFUNC_IntQueryGuestInfo QueryGuestInfo
Definition: glueiface.h:2090
INTSTATUS(* PFUNC_IntGpaToHpa)(void *GuestHandle, QWORD Gpa, QWORD *Hpa)
Translates a guest physical address to a host physical address.
Definition: glueiface.h:722
QWORD FsAr
Definition: glueiface.h:85
void * _H_I_Reserved2
Definition: glueiface.h:2218
#define _In_z_
Definition: intro_sal.h:17
INTSTATUS(* PFUNC_IntSetLogLevel)(void *GuestHandle, IG_LOG_LEVEL LogLevel)
Sets the log level.
Definition: glueiface.h:1894
PFUNC_IntDisableIntro DisableIntro
Definition: glueiface.h:2189
QWORD FsSelector
Definition: glueiface.h:84
INTSTATUS(* PFUNC_IntIntroTimerCallback)(void *GuestHandle)
Definition: glueiface.h:499
INTSTATUS(* PFUNC_IntToggleRepOptimization)(void *GuestHandle, BOOLEAN Enable)
Enables or disables the REP optimization.
Definition: glueiface.h:1377
Set the guest XSAVE area for a VCPU. This query is optional.
Definition: glueiface.h:273
struct _GLUE_IFACE GLUE_IFACE
Interface used for communicating between the introspection engine and the integrator.
Similar to IG_QUERY_INFO_CLASS_REGISTER_STATE, but will get only the general purpose registers...
Definition: glueiface.h:248
A custom tool.
Definition: glueiface.h:359
enum _IG_DESC_ACCESS IG_DESC_ACCESS
Descriptor table access flags.
INTSTATUS(* PFUNC_IntRequestVcpusResume)(void *GuestHandle)
Resumes all the VCPUs assigned to a guest that were previously paused with a GLUE_IFACE.PauseVcpus call.
Definition: glueiface.h:1207
INTRO_ERROR_STATE
Error states.
Definition: intro_types.h:2433
#define _When_(expr, arg)
Definition: intro_sal.h:26
enum _IG_LOG_LEVEL IG_LOG_LEVEL
Controls the verbosity of the logs.
Guest information.
Definition: intro_types.h:2377
PFUNC_IntUnregisterMSRHandler UnregisterMSRHandler
Definition: glueiface.h:2108
Get the size of the guest XSAVE area for a VCPU.
Definition: glueiface.h:260
The page table filtering agent.
Definition: intro_types.h:2336
PFUNC_IntGetVersionString GetVersionString
Definition: glueiface.h:2217
INTSTATUS(* PFUNC_IntDebugProcessCommand)(void *GuestHandle, DWORD CpuNumber, DWORD Argc, CHAR *Argv[])
Executes a debugger command.
Definition: glueiface.h:1937
INTSTATUS(* PFUNC_IntRegisterCrWriteHandler)(void *GuestHandle, PFUNC_IntCrWriteCallback Callback)
Registers a control register write callback.
Definition: glueiface.h:1058
PFUNC_IntUnregisterEnginesResultCalback UnregisterEnginesResultCalback
Definition: glueiface.h:2176
Get the guest register state for a VCPU. Buffer points to a IG_ARCH_REGS structure.
Definition: glueiface.h:223
PFUNC_IntNotifyIntrospectionDeactivated NotifyIntrospectionDeactivated
Definition: glueiface.h:2153
INTSTATUS(* PFUNC_IntUnregisterVmxTimerHandler)(void *GuestHandle)
Unregisters the current timer callback, unsubscribing introcore from timer events.
Definition: glueiface.h:991
struct _IG_SEG_REGS IG_SEG_REGS
Holds segment register state.
INTSTATUS(* PFUNC_IntGetAgentContent)(void *GuestHandle, DWORD AgentTag, BOOLEAN Is64, DWORD *Size, PBYTE *Content)
Gets the content of the agent file. This API is optional.
Definition: glueiface.h:1342
PFUNC_IntUnregisterXcrWriteHandler UnregisterXcrWriteHandler
Definition: glueiface.h:2132
PFUNC_IntEnableCrWriteExit EnableCrWriteExit
Definition: glueiface.h:2125
INTSTATUS(* PFUNC_IntSwitchEPT)(void *GuestHandle, DWORD NewEptIndex)
Switches the currently loaded EPT.
Definition: glueiface.h:2008
Get the value of the IDT base for a VCPU.
Definition: glueiface.h:232
PFUNC_IntRegisterCrWriteHandler RegisterCrWriteHandler
Definition: glueiface.h:2127
The virtualization exception driver.
Definition: intro_types.h:2333
void * _H_I_Reserved4
Definition: glueiface.h:2220
The guest is shutting down.
Definition: glueiface.h:381
INTSTATUS(* PFUNC_IntUnregisterDescriptorTableHandler)(void *GuestHandle)
Unregisters the current descriptor table access callback, unsubscribing introcore from DTR events...
Definition: glueiface.h:1017
Unknown memory type.
Definition: glueiface.h:165
IG_MEMTYPE
Memory type values.
Definition: glueiface.h:157
PFUNC_IntNotifyIntrospectionActivated NotifyIntrospectionActivated
Definition: glueiface.h:2152
The Virtualization exception driver.
Definition: glueiface.h:353
enum _INTRO_EVENT_TYPE INTRO_EVENT_TYPE
Event classes.
64-bit selector.
Definition: glueiface.h:188
Get the availability of the SPP feature in hardware and the hypervisor.
Definition: glueiface.h:285
INTSTATUS(* PFUNC_IntEnableCrWriteExit)(void *GuestHandle, DWORD Cr)
Enables VMEXIT events for a control register.
Definition: glueiface.h:1030
Get the TSC speed.
Definition: glueiface.h:242
Holds register state.
Definition: glueiface.h:30
INTSTATUS(* PFUNC_IntDisableIntro)(void *GuestHandle, QWORD Flags)
Disables the introspection engine.
Definition: glueiface.h:1432
Get the availability of the Virtualization Exception feature in hardware and the hypervisor.
Definition: glueiface.h:279
Get the value of a MSR for a VCPU. Buffer points to a IG_QUERY_MSR structure.
Definition: glueiface.h:226
Execute-access hook.
Definition: glueiface.h:300
struct _IG_XSAVE_AREA * PIG_XSAVE_AREA
The process killer agent.
Definition: intro_types.h:2330
PFUNC_IntSetIntroAbortStatus SetIntroAbortStatus
Definition: glueiface.h:2199
PFUNC_IntGetPhysicalPageTypeFromMtrrs PhysMemGetTypeFromMtrrs
Definition: glueiface.h:2096
INTSTATUS(* PFUNC_IntNotifyEngines)(void *GuestHandle, void *Parameters)
If implemented, introcore can use this API to signal that an additional memory scan. can be done.
Definition: glueiface.h:705
char CHAR
Definition: intro_types.h:56
PFUNC_IntSetLogLevel SetLogLevel
Definition: glueiface.h:2215
Invalid selector.
Definition: glueiface.h:185
Write-through.
Definition: glueiface.h:161
Read-write access.
Definition: glueiface.h:175
Get the current EPTP index for the current VCPU.
Definition: glueiface.h:266
Get the value of the IDT base for a VCPU.
Definition: glueiface.h:229
enum _IG_EPT_HOOK_TYPE IG_EPT_HOOK_TYPE
Ept violation types.
Write-access hook.
Definition: glueiface.h:299
QWORD IdtBase
Definition: glueiface.h:56
void * _I_H_Reserved1
Definition: glueiface.h:2155
PFUNC_IntRegisterEPTHandler RegisterEPTHandler
Definition: glueiface.h:2102
QWORD EsBase
Definition: glueiface.h:78
INTSTATUS(* PFUNC_IntUnregisterEnginesResultCalback)(void *GuestHandle)
Unregisters the current third party scan result callback.
Definition: glueiface.h:1179
INTSTATUS(* PFUNC_IntNotifyNewGuest)(void *GuestHandle, QWORD Options, PBYTE UpdateBuffer, DWORD BufferLength)
Notifies introcore that the guest must be introspected.
Definition: glueiface.h:1411
The page table filtering agent.
Definition: glueiface.h:356
The Linux version of the remediation tool.
Definition: intro_types.h:2324
PFUNC_IntRequestVcpusPause PauseVcpus
Definition: glueiface.h:2110
INTSTATUS(* PFUNC_IntRegisterEPTHandler)(void *GuestHandle, PFUNC_IntEPTViolationCallback Callback)
Registers and EPT exit callback.
Definition: glueiface.h:866
INTSTATUS(* PFUNC_IntXcrWriteCallback)(void *GuestHandle, DWORD CpuNumber, INTRO_ACTION *Action)
Definition: glueiface.h:568
QWORD Reserved
Definition: glueiface.h:2084
16-bit selector.
Definition: glueiface.h:186
Notification header for scan engines alerts.
Definition: intro_types.h:2052
_IG_GUEST_POWER_STATE
The guest power state.
Definition: glueiface.h:377
PFUNC_IntReleaseBuffer ReleaseBuffer
Definition: glueiface.h:2161
Get the code segment type for a VCPU. Buffer points to a IG_CS_TYPE enum.
Definition: glueiface.h:251
QWORD DsLimit
Definition: glueiface.h:75
INTSTATUS(* PFUNC_IntUnregisterEPTHandler)(void *GuestHandle)
Unregisters the current EPT exit callback, unsubscribing introcore from EPT violation events...
Definition: glueiface.h:879
The log gathering agent.
Definition: intro_types.h:2327
INTSTATUS(* PFUNC_IntNotifyIntrospectionDetectedOs)(void *GuestHandle, PGUEST_INFO GuestInfo)
Notifies the integrator that the introspection engine detected an operating system.
Definition: glueiface.h:1257
QWORD EsLimit
Definition: glueiface.h:79
INTSTATUS(* PFUNC_IntDisableMsrExit)(void *GuestHandle, DWORD Msr, BOOLEAN *OldValue)
Disable VMEXIT events for a MSR.
Definition: glueiface.h:909