HyperPlatform Programmer's Reference
ia32_type.h
Go to the documentation of this file.
1 // Copyright (c) 2015-2018, Satoshi Tanda. All rights reserved.
2 // Use of this source code is governed by a MIT-style license that can be
3 // found in the LICENSE file.
4 
7 
8 #ifndef HYPERPLATFORM_IA32_TYPE_H_
9 #define HYPERPLATFORM_IA32_TYPE_H_
10 
11 #include <fltKernel.h>
12 
14 //
15 // macro utilities
16 //
17 
19 //
20 // constants and macros
21 //
22 
24 static const SIZE_T kVmxMaxVmcsSize = 4096;
25 
29 static const ULONG32 kHyperVCpuidInterface = 0x40000001;
30 
32 //
33 // types
34 //
35 
37 //
38 // prototypes
39 //
40 
42 union FlagRegister {
43  ULONG_PTR all;
44  struct {
45  ULONG_PTR cf : 1;
46  ULONG_PTR reserved1 : 1;
47  ULONG_PTR pf : 1;
48  ULONG_PTR reserved2 : 1;
49  ULONG_PTR af : 1;
50  ULONG_PTR reserved3 : 1;
51  ULONG_PTR zf : 1;
52  ULONG_PTR sf : 1;
53  ULONG_PTR tf : 1;
54  ULONG_PTR intf : 1;
55  ULONG_PTR df : 1;
56  ULONG_PTR of : 1;
57  ULONG_PTR iopl : 2;
58  ULONG_PTR nt : 1;
59  ULONG_PTR reserved4 : 1;
60  ULONG_PTR rf : 1;
61  ULONG_PTR vm : 1;
62  ULONG_PTR ac : 1;
63  ULONG_PTR vif : 1;
64  ULONG_PTR vip : 1;
65  ULONG_PTR id : 1;
66  ULONG_PTR reserved5 : 10;
67  } fields;
68 };
69 static_assert(sizeof(FlagRegister) == sizeof(void*), "Size check");
70 
73  ULONG_PTR r15;
74  ULONG_PTR r14;
75  ULONG_PTR r13;
76  ULONG_PTR r12;
77  ULONG_PTR r11;
78  ULONG_PTR r10;
79  ULONG_PTR r9;
80  ULONG_PTR r8;
81  ULONG_PTR di;
82  ULONG_PTR si;
83  ULONG_PTR bp;
84  ULONG_PTR sp;
85  ULONG_PTR bx;
86  ULONG_PTR dx;
87  ULONG_PTR cx;
88  ULONG_PTR ax;
89 };
90 
93  ULONG_PTR di;
94  ULONG_PTR si;
95  ULONG_PTR bp;
96  ULONG_PTR sp;
97  ULONG_PTR bx;
98  ULONG_PTR dx;
99  ULONG_PTR cx;
100  ULONG_PTR ax;
101 };
102 
104 #if defined(_AMD64_)
106 #else
108 #endif
109 
111 struct AllRegisters {
114 };
115 #if defined(_AMD64_)
116 static_assert(sizeof(AllRegisters) == 0x88, "Size check");
117 #else
118 static_assert(sizeof(AllRegisters) == 0x24, "Size check");
119 #endif
120 
122 union Cr0 {
123  ULONG_PTR all;
124  struct {
125  unsigned pe : 1;
126  unsigned mp : 1;
127  unsigned em : 1;
128  unsigned ts : 1;
129  unsigned et : 1;
130  unsigned ne : 1;
131  unsigned reserved1 : 10;
132  unsigned wp : 1;
133  unsigned reserved2 : 1;
134  unsigned am : 1;
135  unsigned reserved3 : 10;
136  unsigned nw : 1;
137  unsigned cd : 1;
138  unsigned pg : 1;
139  } fields;
140 };
141 static_assert(sizeof(Cr0) == sizeof(void*), "Size check");
142 
144 union Cr4 {
145  ULONG_PTR all;
146  struct {
147  unsigned vme : 1;
148  unsigned pvi : 1;
149  unsigned tsd : 1;
150  unsigned de : 1;
151  unsigned pse : 1;
152  unsigned pae : 1;
153  unsigned mce : 1;
154  unsigned pge : 1;
155  unsigned pce : 1;
156  unsigned osfxsr : 1;
157  unsigned osxmmexcpt : 1;
158  unsigned reserved1 : 2;
159  unsigned vmxe : 1;
160  unsigned smxe : 1;
161  unsigned reserved2 : 2;
162  unsigned pcide : 1;
163  unsigned osxsave : 1;
164  unsigned reserved3 : 1;
165  unsigned smep : 1;
166  unsigned smap : 1;
167  } fields;
168 };
169 static_assert(sizeof(Cr4) == sizeof(void*), "Size check");
170 
172 union Dr6 {
173  ULONG_PTR all;
174  struct {
175  unsigned b0 : 1;
176  unsigned b1 : 1;
177  unsigned b2 : 1;
178  unsigned b3 : 1;
179  unsigned reserved1 : 8;
180  unsigned reserved2 : 1;
181  unsigned bd : 1;
182  unsigned bs : 1;
183  unsigned bt : 1;
184  unsigned rtm : 1;
185  unsigned reserved3 : 15;
186  } fields;
187 };
188 static_assert(sizeof(Dr6) == sizeof(void*), "Size check");
189 
191 union Dr7 {
192  ULONG_PTR all;
193  struct {
194  unsigned l0 : 1;
195  unsigned g0 : 1;
196  unsigned l1 : 1;
197  unsigned g1 : 1;
198  unsigned l2 : 1;
199  unsigned g2 : 1;
200  unsigned l3 : 1;
201  unsigned g3 : 1;
202  unsigned le : 1;
203  unsigned ge : 1;
204  unsigned reserved1 : 1;
205  unsigned rtm : 1;
206  unsigned reserved2 : 1;
207  unsigned gd : 1;
208  unsigned reserved3 : 2;
209  unsigned rw0 : 2;
210  unsigned len0 : 2;
211  unsigned rw1 : 2;
212  unsigned len1 : 2;
213  unsigned rw2 : 2;
214  unsigned len2 : 2;
215  unsigned rw3 : 2;
216  unsigned len3 : 2;
217  } fields;
218 };
219 static_assert(sizeof(Dr7) == sizeof(void*), "Size check");
220 
222 #include <pshpack1.h>
223 struct Idtr {
224  unsigned short limit;
225  ULONG_PTR base;
226 };
227 
229 using Gdtr = Idtr;
230 #if defined(_AMD64_)
231 static_assert(sizeof(Idtr) == 10, "Size check");
232 static_assert(sizeof(Gdtr) == 10, "Size check");
233 #else
234 static_assert(sizeof(Idtr) == 6, "Size check");
235 static_assert(sizeof(Gdtr) == 6, "Size check");
236 #endif
237 #include <poppack.h>
238 
240 #include <pshpack1.h>
241 union KidtEntry {
242  ULONG64 all;
243  struct {
244  unsigned short offset_low;
245  unsigned short selector;
246  unsigned char ist_index : 3;
247  unsigned char reserved : 5;
248  unsigned char type : 5;
249  unsigned char dpl : 2;
250  unsigned char present : 1;
251  unsigned short offset_middle;
252  } fields;
253 };
254 static_assert(sizeof(KidtEntry) == 8, "Size check");
255 #include <poppack.h>
256 
258 #include <pshpack1.h>
259 struct KidtEntry64 {
261  ULONG32 offset_high;
262  ULONG32 reserved;
263 };
264 static_assert(sizeof(KidtEntry64) == 16, "Size check");
265 #include <poppack.h>
266 
268 #include <pshpack1.h>
270  unsigned short all;
271  struct {
272  unsigned short rpl : 2;
273  unsigned short ti : 1;
274  unsigned short index : 13;
275  } fields;
276 };
277 static_assert(sizeof(SegmentSelector) == 2, "Size check");
278 #include <poppack.h>
279 
282  ULONG64 all;
283  struct {
284  ULONG64 limit_low : 16;
285  ULONG64 base_low : 16;
286  ULONG64 base_mid : 8;
287  ULONG64 type : 4;
288  ULONG64 system : 1;
289  ULONG64 dpl : 2;
290  ULONG64 present : 1;
291  ULONG64 limit_high : 4;
292  ULONG64 avl : 1;
293  ULONG64 l : 1;
294  ULONG64 db : 1;
295  ULONG64 gran : 1;
296  ULONG64 base_high : 8;
297  } fields;
298 };
299 static_assert(sizeof(SegmentDescriptor) == 8, "Size check");
300 
304  ULONG32 base_upper32;
305  ULONG32 reserved;
306 };
307 static_assert(sizeof(SegmentDesctiptorX64) == 16, "Size check");
308 
311  ULONG32 all;
312  struct {
313  ULONG32 sse3 : 1;
314  ULONG32 pclmulqdq : 1;
315  ULONG32 dtes64 : 1;
316  ULONG32 monitor : 1;
317  ULONG32 ds_cpl : 1;
318  ULONG32 vmx : 1;
319  ULONG32 smx : 1;
320  ULONG32 est : 1;
321  ULONG32 tm2 : 1;
322  ULONG32 ssse3 : 1;
323  ULONG32 cid : 1;
324  ULONG32 sdbg : 1;
325  ULONG32 fma : 1;
326  ULONG32 cx16 : 1;
327  ULONG32 xtpr : 1;
328  ULONG32 pdcm : 1;
329  ULONG32 reserved : 1;
330  ULONG32 pcid : 1;
331  ULONG32 dca : 1;
332  ULONG32 sse4_1 : 1;
333  ULONG32 sse4_2 : 1;
334  ULONG32 x2_apic : 1;
335  ULONG32 movbe : 1;
336  ULONG32 popcnt : 1;
337  ULONG32 reserved3 : 1;
338  ULONG32 aes : 1;
339  ULONG32 xsave : 1;
340  ULONG32 osxsave : 1;
341  ULONG32 avx : 1;
342  ULONG32 f16c : 1;
343  ULONG32 rdrand : 1;
344  ULONG32 not_used : 1;
345  } fields;
346 };
347 static_assert(sizeof(CpuFeaturesEcx) == 4, "Size check");
348 
351  ULONG32 all;
352  struct {
353  ULONG32 fpu : 1;
354  ULONG32 vme : 1;
355  ULONG32 de : 1;
356  ULONG32 pse : 1;
357  ULONG32 tsc : 1;
358  ULONG32 msr : 1;
359  ULONG32 mce : 1;
360  ULONG32 cx8 : 1;
361  ULONG32 apic : 1;
362  ULONG32 reserved1 : 1;
363  ULONG32 sep : 1;
364  ULONG32 mtrr : 1;
365  ULONG32 pge : 1;
366  ULONG32 mca : 1;
367  ULONG32 cmov : 1;
368  ULONG32 pat : 1;
369  ULONG32 pse36 : 1;
370  ULONG32 psn : 1;
371  ULONG32 clfsh : 1;
372  ULONG32 reserved2 : 1;
373  ULONG32 ds : 1;
374  ULONG32 acpi : 1;
375  ULONG32 mmx : 1;
376  ULONG32 fxsr : 1;
377  ULONG32 sse : 1;
378  ULONG32 sse2 : 1;
379  ULONG32 ss : 1;
380  ULONG32 htt : 1;
381  ULONG32 tm : 1;
382  ULONG32 reserved3 : 1;
383  ULONG32 pbe : 1;
384  } fields;
385 };
386 static_assert(sizeof(CpuFeaturesEdx) == 4, "Size check");
387 
390  ULONG valid : 1;
391  ULONG write : 1;
392  ULONG owner : 1;
393  ULONG write_through : 1;
394  ULONG cache_disable : 1;
395  ULONG accessed : 1;
396  ULONG dirty : 1;
397  ULONG large_page : 1;
398  ULONG global : 1;
399  ULONG copy_on_write : 1;
400  ULONG prototype : 1;
401  ULONG reserved0 : 1;
402  ULONG page_frame_number : 20;
403 };
404 static_assert(sizeof(HardwarePteX86) == 4, "Size check");
405 
408  ULONG64 valid : 1;
409  ULONG64 write : 1;
410  ULONG64 owner : 1;
411  ULONG64 write_through : 1;
412  ULONG64 cache_disable : 1;
413  ULONG64 accessed : 1;
414  ULONG64 dirty : 1;
415  ULONG64 large_page : 1;
416  ULONG64 global : 1;
417  ULONG64 copy_on_write : 1;
418  ULONG64 prototype : 1;
419  ULONG64 reserved0 : 1;
420  ULONG64 page_frame_number : 26;
421  ULONG64 reserved1 : 25;
422  ULONG64 no_execute : 1;
423 };
424 static_assert(sizeof(HardwarePteX86Pae) == 8, "Size check");
425 
428  ULONG64 valid : 1;
429  ULONG64 write : 1;
430  ULONG64 owner : 1;
431  ULONG64 write_through : 1;
432  ULONG64 cache_disable : 1;
433  ULONG64 accessed : 1;
434  ULONG64 dirty : 1;
435  ULONG64 large_page : 1;
436  ULONG64 global : 1;
437  ULONG64 copy_on_write : 1;
438  ULONG64 prototype : 1;
439  ULONG64 reserved0 : 1;
440  ULONG64 page_frame_number : 36;
441  ULONG64 reserved1 : 4;
442  ULONG64 software_ws_index : 11;
443  ULONG64 no_execute : 1;
444 };
445 static_assert(sizeof(HardwarePteX64) == 8, "Size check");
446 
449  ULONG no_execute : 1;
450  ULONG present : 1;
451  ULONG unknown1 : 5;
452  ULONG writable : 1;
453  ULONG unknown2 : 4;
454  ULONG page_frame_number : 20;
455 };
456 static_assert(sizeof(HardwarePteARM) == 4, "Size check");
457 
459 #if defined(_X86_)
460 using HardwarePte = HardwarePteX86;
461 #elif defined(_AMD64_)
462 using HardwarePte = HardwarePteX64;
463 #elif defined(_ARM_)
464 using HardwarePte = HardwarePteARM;
465 #endif
466 
468 union PaeCr3 {
469  ULONG64 all;
470  struct {
471  ULONG64 ignored1 : 5;
473  ULONG64 ignored2 : 32;
474  } fields;
475 };
476 static_assert(sizeof(PaeCr3) == 8, "Size check");
477 
480  ULONG64 all;
481  struct {
482  ULONG64 present : 1;
483  ULONG64 reserved1 : 2;
484  ULONG64 write_through : 1;
485  ULONG64 cache_disable : 1;
486  ULONG64 reserved2 : 4;
487  ULONG64 ignored : 3;
488  ULONG64 page_directory_pa : 41;
489  ULONG64 reserved3 : 11;
490  } fields;
491 };
492 static_assert(sizeof(PdptrRegister) == 8, "Size check");
493 
496  ULONG32 all;
497  struct {
498  ULONG32 physical_address_bits : 8;
499  ULONG32 linear_address_bits : 8;
500  } fields;
501 };
502 
505  ULONG64 all;
506  struct {
507  ULONG64 variable_range_count : 8; //<! [0:7]
508  ULONG64 fixed_range_supported : 1; //<! [8]
509  ULONG64 reserved : 1; //<! [9]
510  ULONG64 write_combining : 1; //<! [10]
511  ULONG64 smrr : 1; //<! [11]
512  } fields;
513 };
514 static_assert(sizeof(Ia32MtrrCapabilitiesMsr) == 8, "Size check");
515 
518  ULONG64 all;
519  struct {
520  ULONG64 default_mtemory_type : 8; //<! [0:7]
521  ULONG64 reserved : 2; //<! [8:9]
522  ULONG64 fixed_mtrrs_enabled : 1; //<! [10]
523  ULONG64 mtrrs_enabled : 1; //<! [11]
524  } fields;
525 };
526 static_assert(sizeof(Ia32MtrrDefaultTypeMsr) == 8, "Size check");
527 
530  ULONG64 all;
531  struct {
532  UCHAR types[8];
533  } fields;
534 };
535 static_assert(sizeof(Ia32MtrrFixedRangeMsr) == 8, "Size check");
536 
540  ULONG64 all;
541  struct {
542  ULONG64 type : 8;
543  ULONG64 reserved : 4;
544  ULONG64 phys_base : 36;
545  } fields;
546 };
547 static_assert(sizeof(Ia32MtrrPhysBaseMsr) == 8, "Size check");
548 
552  ULONG64 all;
553  struct {
554  ULONG64 reserved : 11;
555  ULONG64 valid : 1;
556  ULONG64 phys_mask : 36;
557  } fields;
558 };
559 static_assert(sizeof(Ia32MtrrPhysMaskMsr) == 8, "Size check");
560 
563  ULONG64 all;
564  struct {
565  ULONG64 reserved1 : 8;
566  ULONG64 bootstrap_processor : 1;
567  ULONG64 reserved2 : 1;
568  ULONG64 enable_x2apic_mode : 1;
569  ULONG64 enable_xapic_global : 1;
570  ULONG64 apic_base : 24;
571  } fields;
572 };
573 static_assert(sizeof(Ia32ApicBaseMsr) == 8, "Size check");
574 
576 enum class Msr : unsigned int {
577  kIa32ApicBase = 0x01B,
578 
579  kIa32FeatureControl = 0x03A,
580 
581  kIa32SysenterCs = 0x174,
582  kIa32SysenterEsp = 0x175,
583  kIa32SysenterEip = 0x176,
584 
585  kIa32Debugctl = 0x1D9,
586 
587  kIa32MtrrCap = 0xFE,
588  kIa32MtrrDefType = 0x2FF,
589  kIa32MtrrPhysBaseN = 0x200,
590  kIa32MtrrPhysMaskN = 0x201,
591  kIa32MtrrFix64k00000 = 0x250,
592  kIa32MtrrFix16k80000 = 0x258,
593  kIa32MtrrFix16kA0000 = 0x259,
594  kIa32MtrrFix4kC0000 = 0x268,
595  kIa32MtrrFix4kC8000 = 0x269,
596  kIa32MtrrFix4kD0000 = 0x26A,
597  kIa32MtrrFix4kD8000 = 0x26B,
598  kIa32MtrrFix4kE0000 = 0x26C,
599  kIa32MtrrFix4kE8000 = 0x26D,
600  kIa32MtrrFix4kF0000 = 0x26E,
601  kIa32MtrrFix4kF8000 = 0x26F,
602 
603  kIa32VmxBasic = 0x480,
604  kIa32VmxPinbasedCtls = 0x481,
605  kIa32VmxProcBasedCtls = 0x482,
606  kIa32VmxExitCtls = 0x483,
607  kIa32VmxEntryCtls = 0x484,
608  kIa32VmxMisc = 0x485,
609  kIa32VmxCr0Fixed0 = 0x486,
610  kIa32VmxCr0Fixed1 = 0x487,
611  kIa32VmxCr4Fixed0 = 0x488,
612  kIa32VmxCr4Fixed1 = 0x489,
613  kIa32VmxVmcsEnum = 0x48A,
614  kIa32VmxProcBasedCtls2 = 0x48B,
615  kIa32VmxEptVpidCap = 0x48C,
616  kIa32VmxTruePinbasedCtls = 0x48D,
618  kIa32VmxTrueExitCtls = 0x48F,
619  kIa32VmxTrueEntryCtls = 0x490,
620  kIa32VmxVmfunc = 0x491,
621 
622  kIa32Efer = 0xC0000080,
623  kIa32Star = 0xC0000081,
624  kIa32Lstar = 0xC0000082,
625 
626  kIa32Fmask = 0xC0000084,
627 
628  kIa32FsBase = 0xC0000100,
629  kIa32GsBase = 0xC0000101,
630  kIa32KernelGsBase = 0xC0000102,
631  kIa32TscAux = 0xC0000103,
632 };
633 
636  ULONG32 all;
637  struct {
638  ULONG32 present : 1;
639  ULONG32 write : 1;
640  ULONG32 user : 1;
641  ULONG32 reserved : 1;
642  ULONG32 fetch : 1;
643  } fields;
644 };
645 static_assert(sizeof(PageFaultErrorCode) == 4, "Size check");
646 
648 enum class VmcsField : unsigned __int32 {
649  // 16-Bit Control Field
650  kVirtualProcessorId = 0x00000000,
651  kPostedInterruptNotification = 0x00000002,
652  kEptpIndex = 0x00000004,
653  // 16-Bit Guest-State Fields
654  kGuestEsSelector = 0x00000800,
655  kGuestCsSelector = 0x00000802,
656  kGuestSsSelector = 0x00000804,
657  kGuestDsSelector = 0x00000806,
658  kGuestFsSelector = 0x00000808,
659  kGuestGsSelector = 0x0000080a,
660  kGuestLdtrSelector = 0x0000080c,
661  kGuestTrSelector = 0x0000080e,
662  kGuestInterruptStatus = 0x00000810,
663  kPmlIndex = 0x00000812,
664  // 16-Bit Host-State Fields
665  kHostEsSelector = 0x00000c00,
666  kHostCsSelector = 0x00000c02,
667  kHostSsSelector = 0x00000c04,
668  kHostDsSelector = 0x00000c06,
669  kHostFsSelector = 0x00000c08,
670  kHostGsSelector = 0x00000c0a,
671  kHostTrSelector = 0x00000c0c,
672  // 64-Bit Control Fields
673  kIoBitmapA = 0x00002000,
674  kIoBitmapAHigh = 0x00002001,
675  kIoBitmapB = 0x00002002,
676  kIoBitmapBHigh = 0x00002003,
677  kMsrBitmap = 0x00002004,
678  kMsrBitmapHigh = 0x00002005,
679  kVmExitMsrStoreAddr = 0x00002006,
680  kVmExitMsrStoreAddrHigh = 0x00002007,
681  kVmExitMsrLoadAddr = 0x00002008,
682  kVmExitMsrLoadAddrHigh = 0x00002009,
683  kVmEntryMsrLoadAddr = 0x0000200a,
684  kVmEntryMsrLoadAddrHigh = 0x0000200b,
685  kExecutiveVmcsPointer = 0x0000200c,
686  kExecutiveVmcsPointerHigh = 0x0000200d,
687  kTscOffset = 0x00002010,
688  kTscOffsetHigh = 0x00002011,
689  kVirtualApicPageAddr = 0x00002012,
690  kVirtualApicPageAddrHigh = 0x00002013,
691  kApicAccessAddr = 0x00002014,
692  kApicAccessAddrHigh = 0x00002015,
693  kEptPointer = 0x0000201a,
694  kEptPointerHigh = 0x0000201b,
695  kEoiExitBitmap0 = 0x0000201c,
696  kEoiExitBitmap0High = 0x0000201d,
697  kEoiExitBitmap1 = 0x0000201e,
698  kEoiExitBitmap1High = 0x0000201f,
699  kEoiExitBitmap2 = 0x00002020,
700  kEoiExitBitmap2High = 0x00002021,
701  kEoiExitBitmap3 = 0x00002022,
702  kEoiExitBitmap3High = 0x00002023,
703  kEptpListAddress = 0x00002024,
704  kEptpListAddressHigh = 0x00002025,
705  kVmreadBitmapAddress = 0x00002026,
706  kVmreadBitmapAddressHigh = 0x00002027,
707  kVmwriteBitmapAddress = 0x00002028,
708  kVmwriteBitmapAddressHigh = 0x00002029,
711  kXssExitingBitmap = 0x0000202c,
712  kXssExitingBitmapHigh = 0x0000202d,
713  kEnclsExitingBitmap = 0x0000202e,
714  kEnclsExitingBitmapHigh = 0x0000202f,
715  kTscMultiplier = 0x00002032,
716  kTscMultiplierHigh = 0x00002033,
717  // 64-Bit Read-Only Data Field
718  kGuestPhysicalAddress = 0x00002400,
719  kGuestPhysicalAddressHigh = 0x00002401,
720  // 64-Bit Guest-State Fields
721  kVmcsLinkPointer = 0x00002800,
722  kVmcsLinkPointerHigh = 0x00002801,
723  kGuestIa32Debugctl = 0x00002802,
724  kGuestIa32DebugctlHigh = 0x00002803,
725  kGuestIa32Pat = 0x00002804,
726  kGuestIa32PatHigh = 0x00002805,
727  kGuestIa32Efer = 0x00002806,
728  kGuestIa32EferHigh = 0x00002807,
729  kGuestIa32PerfGlobalCtrl = 0x00002808,
730  kGuestIa32PerfGlobalCtrlHigh = 0x00002809,
731  kGuestPdptr0 = 0x0000280a,
732  kGuestPdptr0High = 0x0000280b,
733  kGuestPdptr1 = 0x0000280c,
734  kGuestPdptr1High = 0x0000280d,
735  kGuestPdptr2 = 0x0000280e,
736  kGuestPdptr2High = 0x0000280f,
737  kGuestPdptr3 = 0x00002810,
738  kGuestPdptr3High = 0x00002811,
739  kGuestIa32Bndcfgs = 0x00002812,
740  kGuestIa32BndcfgsHigh = 0x00002813,
741  // 64-Bit Host-State Fields
742  kHostIa32Pat = 0x00002c00,
743  kHostIa32PatHigh = 0x00002c01,
744  kHostIa32Efer = 0x00002c02,
745  kHostIa32EferHigh = 0x00002c03,
746  kHostIa32PerfGlobalCtrl = 0x00002c04,
747  kHostIa32PerfGlobalCtrlHigh = 0x00002c05,
748  // 32-Bit Control Fields
749  kPinBasedVmExecControl = 0x00004000,
750  kCpuBasedVmExecControl = 0x00004002,
751  kExceptionBitmap = 0x00004004,
752  kPageFaultErrorCodeMask = 0x00004006,
753  kPageFaultErrorCodeMatch = 0x00004008,
754  kCr3TargetCount = 0x0000400a,
755  kVmExitControls = 0x0000400c,
756  kVmExitMsrStoreCount = 0x0000400e,
757  kVmExitMsrLoadCount = 0x00004010,
758  kVmEntryControls = 0x00004012,
759  kVmEntryMsrLoadCount = 0x00004014,
760  kVmEntryIntrInfoField = 0x00004016,
761  kVmEntryExceptionErrorCode = 0x00004018,
762  kVmEntryInstructionLen = 0x0000401a,
763  kTprThreshold = 0x0000401c,
764  kSecondaryVmExecControl = 0x0000401e,
765  kPleGap = 0x00004020,
766  kPleWindow = 0x00004022,
767  // 32-Bit Read-Only Data Fields
768  kVmInstructionError = 0x00004400, // See: VM-Instruction Error Numbers
769  kVmExitReason = 0x00004402,
770  kVmExitIntrInfo = 0x00004404,
771  kVmExitIntrErrorCode = 0x00004406,
772  kIdtVectoringInfoField = 0x00004408,
773  kIdtVectoringErrorCode = 0x0000440a,
774  kVmExitInstructionLen = 0x0000440c,
775  kVmxInstructionInfo = 0x0000440e,
776  // 32-Bit Guest-State Fields
777  kGuestEsLimit = 0x00004800,
778  kGuestCsLimit = 0x00004802,
779  kGuestSsLimit = 0x00004804,
780  kGuestDsLimit = 0x00004806,
781  kGuestFsLimit = 0x00004808,
782  kGuestGsLimit = 0x0000480a,
783  kGuestLdtrLimit = 0x0000480c,
784  kGuestTrLimit = 0x0000480e,
785  kGuestGdtrLimit = 0x00004810,
786  kGuestIdtrLimit = 0x00004812,
787  kGuestEsArBytes = 0x00004814,
788  kGuestCsArBytes = 0x00004816,
789  kGuestSsArBytes = 0x00004818,
790  kGuestDsArBytes = 0x0000481a,
791  kGuestFsArBytes = 0x0000481c,
792  kGuestGsArBytes = 0x0000481e,
793  kGuestLdtrArBytes = 0x00004820,
794  kGuestTrArBytes = 0x00004822,
795  kGuestInterruptibilityInfo = 0x00004824,
796  kGuestActivityState = 0x00004826,
797  kGuestSmbase = 0x00004828,
798  kGuestSysenterCs = 0x0000482a,
799  kVmxPreemptionTimerValue = 0x0000482e,
800  // 32-Bit Host-State Field
801  kHostIa32SysenterCs = 0x00004c00,
802  // Natural-Width Control Fields
803  kCr0GuestHostMask = 0x00006000,
804  kCr4GuestHostMask = 0x00006002,
805  kCr0ReadShadow = 0x00006004,
806  kCr4ReadShadow = 0x00006006,
807  kCr3TargetValue0 = 0x00006008,
808  kCr3TargetValue1 = 0x0000600a,
809  kCr3TargetValue2 = 0x0000600c,
810  kCr3TargetValue3 = 0x0000600e,
811  // Natural-Width Read-Only Data Fields
812  kExitQualification = 0x00006400,
813  kIoRcx = 0x00006402,
814  kIoRsi = 0x00006404,
815  kIoRdi = 0x00006406,
816  kIoRip = 0x00006408,
817  kGuestLinearAddress = 0x0000640a,
818  // Natural-Width Guest-State Fields
819  kGuestCr0 = 0x00006800,
820  kGuestCr3 = 0x00006802,
821  kGuestCr4 = 0x00006804,
822  kGuestEsBase = 0x00006806,
823  kGuestCsBase = 0x00006808,
824  kGuestSsBase = 0x0000680a,
825  kGuestDsBase = 0x0000680c,
826  kGuestFsBase = 0x0000680e,
827  kGuestGsBase = 0x00006810,
828  kGuestLdtrBase = 0x00006812,
829  kGuestTrBase = 0x00006814,
830  kGuestGdtrBase = 0x00006816,
831  kGuestIdtrBase = 0x00006818,
832  kGuestDr7 = 0x0000681a,
833  kGuestRsp = 0x0000681c,
834  kGuestRip = 0x0000681e,
835  kGuestRflags = 0x00006820,
836  kGuestPendingDbgExceptions = 0x00006822,
837  kGuestSysenterEsp = 0x00006824,
838  kGuestSysenterEip = 0x00006826,
839  // Natural-Width Host-State Fields
840  kHostCr0 = 0x00006c00,
841  kHostCr3 = 0x00006c02,
842  kHostCr4 = 0x00006c04,
843  kHostFsBase = 0x00006c06,
844  kHostGsBase = 0x00006c08,
845  kHostTrBase = 0x00006c0a,
846  kHostGdtrBase = 0x00006c0c,
847  kHostIdtrBase = 0x00006c0e,
848  kHostIa32SysenterEsp = 0x00006c10,
849  kHostIa32SysenterEip = 0x00006c12,
850  kHostRsp = 0x00006c14,
851  kHostRip = 0x00006c16
852 };
853 
855 enum class VmxExitReason : unsigned __int16 {
856  kExceptionOrNmi = 0,
857  kExternalInterrupt = 1,
858  kTripleFault = 2,
859  kInit = 3,
860  kSipi = 4,
861  kIoSmi = 5,
862  kOtherSmi = 6,
863  kPendingInterrupt = 7,
864  kNmiWindow = 8,
865  kTaskSwitch = 9,
866  kCpuid = 10,
867  kGetSec = 11,
868  kHlt = 12,
869  kInvd = 13,
870  kInvlpg = 14,
871  kRdpmc = 15,
872  kRdtsc = 16,
873  kRsm = 17,
874  kVmcall = 18,
875  kVmclear = 19,
876  kVmlaunch = 20,
877  kVmptrld = 21,
878  kVmptrst = 22,
879  kVmread = 23,
880  kVmresume = 24,
881  kVmwrite = 25,
882  kVmoff = 26,
883  kVmon = 27,
884  kCrAccess = 28,
885  kDrAccess = 29,
886  kIoInstruction = 30,
887  kMsrRead = 31,
888  kMsrWrite = 32,
889  kInvalidGuestState = 33, // See: BASIC VM-ENTRY CHECKS
890  kMsrLoading = 34,
891  kUndefined35 = 35,
892  kMwaitInstruction = 36,
893  kMonitorTrapFlag = 37,
894  kUndefined38 = 38,
895  kMonitorInstruction = 39,
896  kPauseInstruction = 40,
897  kMachineCheck = 41,
898  kUndefined42 = 42,
899  kTprBelowThreshold = 43,
900  kApicAccess = 44,
901  kVirtualizedEoi = 45,
902  kGdtrOrIdtrAccess = 46,
903  kLdtrOrTrAccess = 47,
904  kEptViolation = 48,
905  kEptMisconfig = 49,
906  kInvept = 50,
907  kRdtscp = 51,
908  kVmxPreemptionTime = 52,
909  kInvvpid = 53,
910  kWbinvd = 54,
911  kXsetbv = 55,
912  kApicWrite = 56,
913  kRdrand = 57,
914  kInvpcid = 58,
915  kVmfunc = 59,
916  kUndefined60 = 60,
917  kRdseed = 61,
918  kUndefined62 = 62,
919  kXsaves = 63,
920  kXrstors = 64,
921 };
922 static_assert(sizeof(VmxExitReason) == 2, "Size check");
923 
943  kVmcallNonClearVmcs = 19,
951 };
952 
955 enum class memory_type : unsigned __int8 {
956  kUncacheable = 0,
957  kWriteCombining = 1,
958  kWriteThrough = 4,
959  kWriteProtected = 5,
960  kWriteBack = 6,
961  kUncached = 7,
962 };
963 
966  unsigned long revision_identifier;
967  unsigned long vmx_abort_indicator;
968  unsigned long data[1];
969 };
970 
973  unsigned int all;
974  struct {
976  unsigned reserved1 : 2;
977  unsigned nmi_exiting : 1;
978  unsigned reserved2 : 1;
979  unsigned virtual_nmis : 1;
982  } fields;
983 };
984 static_assert(sizeof(VmxPinBasedControls) == 4, "Size check");
985 
988  unsigned int all;
989  struct {
990  unsigned reserved1 : 2;
992  unsigned use_tsc_offseting : 1;
993  unsigned reserved2 : 3;
994  unsigned hlt_exiting : 1;
995  unsigned reserved3 : 1;
996  unsigned invlpg_exiting : 1;
997  unsigned mwait_exiting : 1;
998  unsigned rdpmc_exiting : 1;
999  unsigned rdtsc_exiting : 1;
1000  unsigned reserved4 : 2;
1001  unsigned cr3_load_exiting : 1;
1002  unsigned cr3_store_exiting : 1;
1003  unsigned reserved5 : 2;
1004  unsigned cr8_load_exiting : 1;
1005  unsigned cr8_store_exiting : 1;
1006  unsigned use_tpr_shadow : 1;
1007  unsigned nmi_window_exiting : 1;
1008  unsigned mov_dr_exiting : 1;
1010  unsigned use_io_bitmaps : 1;
1011  unsigned reserved6 : 1;
1012  unsigned monitor_trap_flag : 1;
1013  unsigned use_msr_bitmaps : 1;
1014  unsigned monitor_exiting : 1;
1015  unsigned pause_exiting : 1;
1017  } fields;
1018 };
1019 static_assert(sizeof(VmxProcessorBasedControls) == 4, "Size check");
1020 
1023  unsigned int all;
1024  struct {
1026  unsigned enable_ept : 1;
1028  unsigned enable_rdtscp : 1;
1029  unsigned virtualize_x2apic_mode : 1;
1030  unsigned enable_vpid : 1;
1031  unsigned wbinvd_exiting : 1;
1032  unsigned unrestricted_guest : 1;
1035  unsigned pause_loop_exiting : 1;
1036  unsigned rdrand_exiting : 1;
1037  unsigned enable_invpcid : 1;
1038  unsigned enable_vm_functions : 1;
1039  unsigned vmcs_shadowing : 1;
1040  unsigned reserved1 : 1;
1041  unsigned rdseed_exiting : 1;
1042  unsigned reserved2 : 1;
1043  unsigned ept_violation_ve : 1;
1044  unsigned reserved3 : 1;
1045  unsigned enable_xsaves_xstors : 1;
1046  unsigned reserved4 : 1;
1048  unsigned reserved5 : 2;
1049  unsigned use_tsc_scaling : 1;
1050  } fields;
1051 };
1052 static_assert(sizeof(VmxSecondaryProcessorBasedControls) == 4, "Size check");
1053 
1056  unsigned int all;
1057  struct {
1058  unsigned reserved1 : 2;
1059  unsigned save_debug_controls : 1;
1060  unsigned reserved2 : 6;
1062  unsigned reserved3 : 2;
1064  unsigned reserved4 : 2;
1066  unsigned reserved5 : 2;
1067  unsigned save_ia32_pat : 1;
1068  unsigned load_ia32_pat : 1;
1069  unsigned save_ia32_efer : 1;
1070  unsigned load_ia32_efer : 1;
1072  unsigned clear_ia32_bndcfgs : 1;
1074  } fields;
1075 };
1076 static_assert(sizeof(VmxVmExitControls) == 4, "Size check");
1077 
1080  unsigned int all;
1081  struct {
1082  unsigned reserved1 : 2;
1083  unsigned load_debug_controls : 1;
1084  unsigned reserved2 : 6;
1085  unsigned ia32e_mode_guest : 1;
1086  unsigned entry_to_smm : 1;
1088  unsigned reserved3 : 1;
1090  unsigned load_ia32_pat : 1;
1091  unsigned load_ia32_efer : 1;
1092  unsigned load_ia32_bndcfgs : 1;
1094  } fields;
1095 };
1096 static_assert(sizeof(VmxVmExitControls) == 4, "Size check");
1097 
1100  unsigned int all;
1101  struct {
1102  unsigned type : 4;
1103  unsigned system : 1;
1104  unsigned dpl : 2;
1105  unsigned present : 1;
1106  unsigned reserved1 : 4;
1107  unsigned avl : 1;
1108  unsigned l : 1;
1109  unsigned db : 1;
1110  unsigned gran : 1;
1111  unsigned unusable : 1;
1112  unsigned reserved2 : 15;
1113  } fields;
1114 };
1115 static_assert(sizeof(VmxRegmentDescriptorAccessRight) == 4, "Size check");
1116 
1119  unsigned __int64 all;
1120  struct {
1121  unsigned lock : 1;
1122  unsigned enable_smx : 1;
1123  unsigned enable_vmxon : 1;
1124  unsigned reserved1 : 5;
1125  unsigned enable_local_senter : 7;
1126  unsigned enable_global_senter : 1;
1127  unsigned reserved2 : 16;
1128  unsigned reserved3 : 32;
1129  } fields;
1130 };
1131 static_assert(sizeof(Ia32FeatureControlMsr) == 8, "Size check");
1132 
1135  unsigned __int64 all;
1136  struct {
1137  unsigned revision_identifier : 31;
1138  unsigned reserved1 : 1;
1139  unsigned region_size : 12;
1140  unsigned region_clear : 1;
1141  unsigned reserved2 : 3;
1142  unsigned supported_ia64 : 1;
1143  unsigned supported_dual_moniter : 1;
1144  unsigned memory_type : 4;
1145  unsigned vm_exit_report : 1;
1146  unsigned vmx_capability_hint : 1;
1147  unsigned reserved3 : 8;
1148  } fields;
1149 };
1150 static_assert(sizeof(Ia32VmxBasicMsr) == 8, "Size check");
1151 
1154  unsigned __int64 all;
1155  struct {
1156  unsigned time_stamp : 5;
1157  unsigned reserved1 : 1;
1161  unsigned reserved2 : 6;
1165  unsigned maximum_msrs_number : 3;
1168  unsigned reserved3 : 2;
1169  unsigned revision_identifier : 32;
1170  } fields;
1171 };
1172 static_assert(sizeof(Ia32VmxMiscMsr) == 8, "Size check");
1173 
1176  unsigned __int64 all;
1177  struct {
1178  unsigned reserved1 : 1;
1180  unsigned reserved2 : 22;
1181  unsigned reserved3 : 32;
1182  } fields;
1183 };
1184 static_assert(sizeof(Ia32VmxVmcsEnumMsr) == 8, "Size check");
1185 
1188  unsigned __int64 all;
1189  struct {
1191  unsigned reserved1 : 5;
1193  unsigned reserved2 : 1;
1195  unsigned reserved3 : 5;
1197  unsigned reserved4 : 1;
1198  unsigned support_pde_2mb_pages : 1;
1200  unsigned reserved5 : 2;
1201  unsigned support_invept : 1;
1203  unsigned reserved6 : 3;
1206  unsigned reserved7 : 5;
1207  unsigned support_invvpid : 1;
1208  unsigned reserved8 : 7;
1213  unsigned reserved9 : 20;
1214  } fields;
1215 };
1216 static_assert(sizeof(Ia32VmxEptVpidCapMsr) == 8, "Size check");
1217 
1220  unsigned int all;
1221  struct {
1223  unsigned short reserved1 : 12;
1224  unsigned short pending_mtf_vm_exit : 1;
1225  unsigned short vm_exit_from_vmx_root : 1;
1226  unsigned short reserved2 : 1;
1227  unsigned short vm_entry_failure : 1;
1228  } fields;
1229 };
1230 static_assert(sizeof(VmExitInformation) == 4, "Size check");
1231 
1235  ULONG32 all;
1236  struct {
1237  ULONG32 reserved1 : 7;
1238  ULONG32 address_size : 3;
1239  ULONG32 reserved2 : 5;
1240  ULONG32 segment_register : 3;
1241  ULONG32 reserved3 : 14;
1242  } fields;
1243 };
1244 static_assert(sizeof(InsOrOutsInstInformation) == 4, "Size check");
1245 
1249  ULONG32 all;
1250  struct {
1251  ULONG32 scalling : 2;
1252  ULONG32 reserved1 : 5;
1253  ULONG32 address_size : 3;
1254  ULONG32 reserved2 : 1;
1255  ULONG32 reserved3 : 4;
1256  ULONG32 segment_register : 3;
1257  ULONG32 index_register : 4;
1259  ULONG32 base_register : 4;
1261  ULONG32 index_register2 : 4;
1262  } fields;
1263 };
1264 static_assert(sizeof(InvEptOrPcidOrVpidInstInformation) == 4, "Size check");
1265 
1269  ULONG32 all;
1270  struct {
1271  ULONG32 scalling : 2;
1272  ULONG32 reserved1 : 5;
1273  ULONG32 address_size : 3;
1274  ULONG32 reserved2 : 1;
1275  ULONG32 operand_size : 1;
1276  ULONG32 reserved3 : 3;
1277  ULONG32 segment_register : 3;
1278  ULONG32 index_register : 4;
1280  ULONG32 base_register : 4;
1282  ULONG32 instruction_identity : 2;
1283  ULONG32 reserved4 : 2;
1284  } fields;
1285 };
1286 static_assert(sizeof(GdtrOrIdtrInstInformation) == 4, "Size check");
1287 
1289 enum class Scaling {
1290  kNoScaling = 0,
1291  kScaleBy2,
1292  kScaleBy4,
1293  kScaleBy8,
1294 };
1295 
1297 enum class AddressSize {
1298  k16bit = 0,
1299  k32bit,
1300  k64bit,
1301 };
1302 
1304 enum class SegmentRegisters {
1305  kEs = 0,
1306  kCs,
1307  kSs,
1308  kDs,
1309  kFs,
1310  kGs,
1311 };
1312 
1315  kSgdt = 0,
1316  kSidt,
1317  kLgdt,
1318  kLidt,
1319 };
1320 
1324  ULONG32 all;
1325  struct {
1326  ULONG32 scalling : 2;
1327  ULONG32 reserved1 : 1;
1328  ULONG32 register1 : 4;
1329  ULONG32 address_size : 3;
1330  ULONG32 register_access : 1;
1331  ULONG32 reserved2 : 4;
1332  ULONG32 segment_register : 3;
1333  ULONG32 index_register : 4;
1335  ULONG32 base_register : 4;
1337  ULONG32 instruction_identity : 2;
1338  ULONG32 reserved4 : 2;
1339  } fields;
1340 };
1341 static_assert(sizeof(LdtrOrTrInstInformation) == 4, "Size check");
1342 
1345  kSldt = 0,
1346  kStr,
1347  kLldt,
1348  kLtr,
1349 };
1350 
1352 enum class MovDrDirection {
1353  kMoveToDr = 0,
1354  kMoveFromDr,
1355 };
1356 
1359  ULONG_PTR all;
1360  struct {
1361  ULONG_PTR debugl_register : 3;
1362  ULONG_PTR reserved1 : 1;
1363  ULONG_PTR direction : 1;
1364  ULONG_PTR reserved2 : 3;
1365  ULONG_PTR gp_register : 4;
1366  ULONG_PTR reserved3 : 20;
1367  ULONG_PTR reserved4 : 32;
1368  } fields;
1369 };
1370 static_assert(sizeof(MovDrQualification) == 8, "Size check");
1371 
1374  ULONG_PTR all;
1375  struct {
1376  ULONG_PTR size_of_access : 3;
1377  ULONG_PTR direction : 1;
1378  ULONG_PTR string_instruction : 1;
1379  ULONG_PTR rep_prefixed : 1;
1380  ULONG_PTR operand_encoding : 1;
1381  ULONG_PTR reserved1 : 9;
1382  ULONG_PTR port_number : 16;
1383  } fields;
1384 };
1385 static_assert(sizeof(IoInstQualification) == sizeof(void*), "Size check");
1386 
1389  k1Byte = 0,
1390  k2Byte = 1,
1391  k4Byte = 3,
1392 };
1393 
1395 enum class MovCrAccessType {
1396  kMoveToCr = 0,
1397  kMoveFromCr,
1398  kClts,
1399  kLmsw,
1400 };
1401 
1404  ULONG_PTR all;
1405  struct {
1406  ULONG_PTR control_register : 4;
1407  ULONG_PTR access_type : 2;
1408  ULONG_PTR lmsw_operand_type : 1;
1409  ULONG_PTR reserved1 : 1;
1410  ULONG_PTR gp_register : 4;
1411  ULONG_PTR reserved2 : 4;
1412  ULONG_PTR lmsw_source_data : 16;
1413  ULONG_PTR reserved3 : 32;
1414  } fields;
1415 };
1416 static_assert(sizeof(MovCrQualification) == 8, "Size check");
1417 
1419 union EptPointer {
1420  ULONG64 all;
1421  struct {
1422  ULONG64 memory_type : 3;
1423  ULONG64 page_walk_length : 3;
1425  ULONG64 reserved1 : 5;
1426  ULONG64 pml4_address : 36;
1427  ULONG64 reserved2 : 16;
1428  } fields;
1429 };
1430 static_assert(sizeof(EptPointer) == 8, "Size check");
1431 
1432 // Note on interpretation of N in those definitions:
1433 //
1434 // N is the physical-address width supported by the logical processor. Software
1435 // can determine a processor's physical-address width by executing CPUID with
1436 // 80000008H in EAX.The physical - address width is returned in bits 7:0 of EAX.
1437 
1441  ULONG64 all;
1442  struct {
1443  ULONG64 read_access : 1;
1444  ULONG64 write_access : 1;
1445  ULONG64 execute_access : 1;
1446  ULONG64 reserved1 : 5;
1447  ULONG64 accessed : 1;
1448  ULONG64 ignored1 : 1;
1450  ULONG64 ignored2 : 1;
1451  ULONG64 pdpt_address : 36;
1452  ULONG64 reserved2 : 4;
1453  ULONG64 ignored3 : 12;
1454  } fields;
1455 };
1456 static_assert(sizeof(EptPml4Entry) == 8, "Size check");
1457 
1461  ULONG64 all;
1462  struct {
1463  ULONG64 read_access : 1;
1464  ULONG64 write_access : 1;
1465  ULONG64 execute_access : 1;
1466  ULONG64 memory_type : 3;
1468  ULONG64 must_be1 : 1;
1469  ULONG64 accessed : 1;
1470  ULONG64 written : 1;
1472  ULONG64 ignored1 : 1;
1473  ULONG64 reserved1 : 18;
1474  ULONG64 physial_address : 18;
1475  ULONG64 reserved2 : 4;
1476  ULONG64 ignored2 : 11;
1477  ULONG64 suppress_ve : 1;
1478  } fields;
1479 };
1480 static_assert(sizeof(EptPdptSuperPageEntry) == 8, "Size check");
1481 
1485  ULONG64 all;
1486  struct {
1487  ULONG64 read_access : 1;
1488  ULONG64 write_access : 1;
1489  ULONG64 execute_access : 1;
1490  ULONG64 reserved1 : 5;
1491  ULONG64 accessed : 1;
1492  ULONG64 ignored1 : 1;
1494  ULONG64 ignored2 : 1;
1495  ULONG64 pd_address : 36;
1496  ULONG64 reserved2 : 4;
1497  ULONG64 ignored3 : 12;
1498  } fields;
1499 };
1500 static_assert(sizeof(EptPdptEntry) == 8, "Size check");
1501 
1504  ULONG64 all;
1505  struct {
1506  ULONG64 read_access : 1;
1507  ULONG64 write_access : 1;
1508  ULONG64 execute_access : 1;
1509  ULONG64 memory_type : 3;
1511  ULONG64 must_be1 : 1;
1512  ULONG64 accessed : 1;
1513  ULONG64 written : 1;
1515  ULONG64 ignored1 : 1;
1516  ULONG64 reserved1 : 9;
1517  ULONG64 physial_address : 27;
1518  ULONG64 reserved2 : 4;
1519  ULONG64 ignored2 : 11;
1520  ULONG64 suppress_ve : 1;
1521  } fields;
1522 };
1523 static_assert(sizeof(EptPdLargePageEntry) == 8, "Size check");
1524 
1527 union EptPdEntry {
1528  ULONG64 all;
1529  struct {
1530  ULONG64 read_access : 1;
1531  ULONG64 write_access : 1;
1532  ULONG64 execute_access : 1;
1533  ULONG64 reserved1 : 4;
1534  ULONG64 must_be0 : 1;
1535  ULONG64 accessed : 1;
1536  ULONG64 ignored1 : 1;
1538  ULONG64 ignored2 : 1;
1539  ULONG64 pt_address : 36;
1540  ULONG64 reserved2 : 4;
1541  ULONG64 ignored3 : 12;
1542  } fields;
1543 };
1544 static_assert(sizeof(EptPdEntry) == 8, "Size check");
1545 
1547 union EptPtEntry {
1548  ULONG64 all;
1549  struct {
1550  ULONG64 read_access : 1;
1551  ULONG64 write_access : 1;
1552  ULONG64 execute_access : 1;
1553  ULONG64 memory_type : 3;
1555  ULONG64 ignored1 : 1;
1556  ULONG64 accessed : 1;
1557  ULONG64 written : 1;
1559  ULONG64 ignored2 : 1;
1560  ULONG64 physial_address : 36;
1561  ULONG64 reserved1 : 4;
1562  ULONG64 Ignored3 : 11;
1563  ULONG64 suppress_ve : 1;
1564  } fields;
1565 };
1566 static_assert(sizeof(EptPtEntry) == 8, "Size check");
1567 
1570  ULONG64 all;
1571  struct {
1572  ULONG64 read_access : 1;
1573  ULONG64 write_access : 1;
1574  ULONG64 execute_access : 1;
1575  ULONG64 ept_readable : 1;
1576  ULONG64 ept_writeable : 1;
1577  ULONG64 ept_executable : 1;
1583  ULONG64 execute_disable_page : 1;
1584  ULONG64 nmi_unblocking : 1;
1585  } fields;
1586 };
1587 static_assert(sizeof(EptViolationQualification) == 8, "Size check");
1588 
1592  ULONG64 reserved1;
1593 };
1594 static_assert(sizeof(InvEptDescriptor) == 16, "Size check");
1595 
1597 enum class InvEptType : ULONG_PTR {
1599  kGlobalInvalidation = 2,
1600 };
1601 
1604  USHORT vpid;
1605  USHORT reserved1;
1606  ULONG32 reserved2;
1608 };
1609 static_assert(sizeof(InvVpidDescriptor) == 16, "Size check");
1610 
1612 enum class InvVpidType : ULONG_PTR {
1617 };
1618 
1621  ULONG32 all;
1622  struct {
1623  ULONG32 vector : 8;
1624  ULONG32 interruption_type : 3;
1625  ULONG32 error_code_valid : 1;
1626  ULONG32 nmi_unblocking : 1;
1627  ULONG32 reserved : 18;
1628  ULONG32 valid : 1;
1629  } fields;
1630 };
1631 static_assert(sizeof(VmExitInterruptionInformationField) == 4, "Size check");
1632 
1635  ULONG32 all;
1636  struct {
1637  ULONG32 vector : 8;
1638  ULONG32 interruption_type : 3;
1639  ULONG32 deliver_error_code : 1;
1640  ULONG32 reserved : 19;
1641  ULONG32 valid : 1;
1642  } fields;
1643 };
1644 static_assert(sizeof(VmEntryInterruptionInformationField) == 4, "Size check");
1645 
1647 enum class InterruptionType {
1648  kExternalInterrupt = 0,
1649  kReserved = 1, // Not used for VM-Exit
1651  kHardwareException = 3,
1652  kSoftwareInterrupt = 4, // Not used for VM-Exit
1653  kPrivilegedSoftwareException = 5, // Not used for VM-Exit
1654  kSoftwareException = 6,
1655  kOtherEvent = 7, // Not used for VM-Exit
1656 };
1657 
1660  kDivideErrorException = 0,
1661  kDebugException = 1,
1662  kNmiInterrupt = 2,
1663  kBreakpointException = 3,
1664  kOverflowException = 4,
1668  kDoubleFaultException = 8,
1670  kInvalidTssException = 10,
1671  kSegmentNotPresent = 11,
1672  kStackFaultException = 12,
1674  kPageFaultException = 14,
1677  kMachineCheckException = 18,
1680 };
1681 
1683 constexpr unsigned int operator<<(_In_ unsigned int lhs,
1684  _In_ InterruptionVector rhs) {
1685  return (lhs << static_cast<unsigned int>(rhs));
1686 }
1687 
1688 #endif // HYPERPLATFORM_IA32_TYPE_H_
ULONG64 written
[9]
Definition: ia32_type.h:1513
ULONG32 pse36
[17] 36-Bit Page Size Extension
Definition: ia32_type.h:369
ULONG64 execute_disable_page
[11]
Definition: ia32_type.h:1583
ULONG32 user
[3] 0= CPL==0
Definition: ia32_type.h:640
ULONG64 write_through
[3] PWT
Definition: ia32_type.h:411
ULONG_PTR port_number
[16:31]
Definition: ia32_type.h:1382
ULONG page_frame_number
Definition: ia32_type.h:454
GdtrOrIdtrInstructionIdentity
See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT.
Definition: ia32_type.h:1314
ULONG64 copy_on_write
[9]
Definition: ia32_type.h:437
struct SegmentSelector::@7 fields
ULONG_PTR lmsw_source_data
[16:31]
Definition: ia32_type.h:1412
ULONG_PTR cx
Definition: ia32_type.h:87
unsigned load_ia32_perf_global_ctrl
[13]
Definition: ia32_type.h:1089
struct Ia32VmxEptVpidCapMsr::@31 fields
memory_type
See: Memory Types That Can Be Encoded With PAT Memory Types Recommended for VMCS and Related Data Str...
Definition: ia32_type.h:955
SegmentDescriptor descriptor
Definition: ia32_type.h:303
ULONG32 mtrr
[12] Memory Type Range Registers
Definition: ia32_type.h:364
ULONG64 all
Definition: ia32_type.h:1441
ULONG_PTR reserved2
[3] Always 0
Definition: ia32_type.h:48
unsigned load_ia32_efer
[21]
Definition: ia32_type.h:1070
struct CpuFeaturesEdx::@10 fields
ULONG32 valid
[31]
Definition: ia32_type.h:1641
ULONG32 apic
[9] APIC On-Chip
Definition: ia32_type.h:361
unsigned supported_read_ia32_smbase_msr
[15]
Definition: ia32_type.h:1162
ULONG64 ignored1
[7]
Definition: ia32_type.h:1555
ULONG32 fpu
[0] Floating Point Unit On-Chip
Definition: ia32_type.h:353
ULONG32 pge
[13] Page Global Bit
Definition: ia32_type.h:365
See: Format of an EPT Page-Table Entry that Maps a 4-KByte Page.
Definition: ia32_type.h:1547
unsigned mov_dr_exiting
[23]
Definition: ia32_type.h:1008
unsigned vm_exit_report
[54]
Definition: ia32_type.h:1145
ULONG64 ignored1
[0:4]
Definition: ia32_type.h:471
ULONG32 reserved4
[30:31]
Definition: ia32_type.h:1283
ULONG32 dtes64
[2] 64-bit DS Area
Definition: ia32_type.h:315
ULONG32 tsc
[4] Time Stamp Counter
Definition: ia32_type.h:357
ULONG_PTR all
Definition: ia32_type.h:145
unsigned process_posted_interrupts
[7]
Definition: ia32_type.h:981
unsigned l3
[6] Local Breakpoint Enable 3
Definition: ia32_type.h:200
unsigned reserved4
[15]
Definition: ia32_type.h:1197
VmxExitReason
See: VMX BASIC EXIT REASONS.
Definition: ia32_type.h:855
unsigned reserved3
[19]
Definition: ia32_type.h:164
ULONG64 write_access
[1]
Definition: ia32_type.h:1464
ULONG_PTR access_type
[4:5]
Definition: ia32_type.h:1407
unsigned int all
Definition: ia32_type.h:973
ULONG64 execute_access
[2]
Definition: ia32_type.h:1508
unsigned entry_to_smm
[10]
Definition: ia32_type.h:1086
ULONG_PTR pf
[2] Parity flag
Definition: ia32_type.h:47
struct EptPml4Entry::@41 fields
unsigned cr8_store_exiting
[20]
Definition: ia32_type.h:1005
ULONG64 physial_address
[30:48-1]
Definition: ia32_type.h:1474
struct MovCrQualification::@39 fields
ULONG32 index_register_invalid
[22]
Definition: ia32_type.h:1279
See: CONTROL REGISTERS.
Definition: ia32_type.h:122
ULONG32 reserved2
[20] Reserved
Definition: ia32_type.h:372
unsigned support_single_context_retaining_globals_invvpid
[43]
Definition: ia32_type.h:1212
ULONG32 interruption_type
[8:10]
Definition: ia32_type.h:1638
ULONG32 xsave
[26] XSAVE/XRSTOR feature
Definition: ia32_type.h:339
ULONG64 ignored2
[11]
Definition: ia32_type.h:1538
unsigned load_debug_controls
[2]
Definition: ia32_type.h:1083
ULONG_PTR ax
Definition: ia32_type.h:100
See: Format of an EPT Page-Directory-Pointer-Table Entry (PDPTE) that References an EPT Page Director...
Definition: ia32_type.h:1484
ULONG64 reserved2
[48:63]
Definition: ia32_type.h:1427
ULONG_PTR base
Definition: ia32_type.h:225
ULONG32 reserved3
[30] Reserved
Definition: ia32_type.h:382
ULONG64 physial_address
[21:48-1]
Definition: ia32_type.h:1517
ULONG64 reserved2
[48:51]
Definition: ia32_type.h:1540
ULONG64 suppress_ve
[63]
Definition: ia32_type.h:1477
ULONG64 reserved0
[11]
Definition: ia32_type.h:419
struct IoInstQualification::@38 fields
unsigned reserved2
[45:47]
Definition: ia32_type.h:1141
ULONG64 all
Definition: ia32_type.h:1548
unsigned osxsave
[18] XSAVE and Processor Extended States-Enable
Definition: ia32_type.h:163
unsigned reserved1
[0]
Definition: ia32_type.h:1178
ULONG32 scalling
[0:1]
Definition: ia32_type.h:1271
ULONG32 cx16
[13] CMPXCHG16B
Definition: ia32_type.h:326
ULONG64 page_frame_number
[12:47]
Definition: ia32_type.h:440
InterruptionType
See: Format of the VM-Entry Interruption-Information Field.
Definition: ia32_type.h:1647
unsigned pae
[5] Physical Address Extension
Definition: ia32_type.h:152
unsigned __int64 all
Definition: ia32_type.h:1176
unsigned reserved1
[0:1]
Definition: ia32_type.h:1082
unsigned tsd
[2] Time Stamp Disable
Definition: ia32_type.h:149
ULONG32 reserved3
[18:31]
Definition: ia32_type.h:1241
ULONG64 large_page
[7] PAT
Definition: ia32_type.h:435
See: Extended-Page-Table Pointer (EPTP)
Definition: ia32_type.h:1419
ULONG32 f16c
[29] 16-bit floating-point conversion
Definition: ia32_type.h:342
ULONG64 execute_access
[2]
Definition: ia32_type.h:1532
ULONG64 reserved1
[48:51]
Definition: ia32_type.h:1561
ULONG64 read_access
[0]
Definition: ia32_type.h:1443
ULONG accessed
[5]
Definition: ia32_type.h:395
ULONG64 must_be1
[7]
Definition: ia32_type.h:1468
ULONG_PTR gp_register
[8:11]
Definition: ia32_type.h:1365
ULONG64 written
[9]
Definition: ia32_type.h:1557
unsigned supported_activity_state_shutdown
[7]
Definition: ia32_type.h:1159
nt!_HARDWARE_PTE on x86 PAE-enabled Windows
Definition: ia32_type.h:407
See: Information Returned by CPUID Instruction.
Definition: ia32_type.h:495
ULONG32 vector
[0:7]
Definition: ia32_type.h:1637
unsigned __int64 all
Definition: ia32_type.h:1119
ULONG64 write_access
[1]
Definition: ia32_type.h:1551
unsigned time_stamp
[0:4]
Definition: ia32_type.h:1156
ULONG32 all
Definition: ia32_type.h:351
FlagRegister flags
Definition: ia32_type.h:113
ULONG_PTR di
Definition: ia32_type.h:81
ULONG64 ignored1
[9]
Definition: ia32_type.h:1492
unsigned smap
[21] Supervisor Mode Access Protection Enable
Definition: ia32_type.h:166
unsigned bt
[15] Task Switch
Definition: ia32_type.h:183
ULONG32 base_register
[23:26]
Definition: ia32_type.h:1335
unsigned l2
[4] Local Breakpoint Enable 2
Definition: ia32_type.h:198
unsigned support_accessed_and_dirty_flag
[21]
Definition: ia32_type.h:1202
unsigned unusable
[16] Segment unusable
Definition: ia32_type.h:1111
ULONG64 limit_high
Definition: ia32_type.h:291
ULONG64 ignored2
[11]
Definition: ia32_type.h:1450
See: Virtual-Machine Control Structures & FORMAT OF THE VMCS REGION.
Definition: ia32_type.h:965
ULONG64 enable_accessed_and_dirty_flags
[6]
Definition: ia32_type.h:1424
unsigned interrupt_window_exiting
[2]
Definition: ia32_type.h:991
ULONG32 mce
[7] Machine Check Exception
Definition: ia32_type.h:359
ULONG_PTR reserved4
[15] Always 0
Definition: ia32_type.h:59
unsigned use_msr_bitmaps
[28]
Definition: ia32_type.h:1013
unsigned osxmmexcpt
[10] OS Support for Unmasked SIMD Exceptions
Definition: ia32_type.h:157
Represents a stack layout after PUSHAD.
Definition: ia32_type.h:92
ULONG32 operand_size
[11]
Definition: ia32_type.h:1275
ULONG32 rdrand
[30] RDRAND instruction
Definition: ia32_type.h:343
unsigned external_interrupt_exiting
[0]
Definition: ia32_type.h:975
unsigned vmxe
[13] Virtual Machine Extensions Enabled
Definition: ia32_type.h:159
ULONG64 apic_base
[12:35]
Definition: ia32_type.h:570
ULONG32 not_used
[31] Always 0 (a.k.a. HypervisorPresent)
Definition: ia32_type.h:344
struct Cpuid80000008Eax::@13 fields
ULONG64 reserved1
[3:7]
Definition: ia32_type.h:1490
ULONG_PTR all
Definition: ia32_type.h:192
ULONG_PTR vip
[20] Virtual interrupt pending
Definition: ia32_type.h:64
ULONG_PTR iopl
[12:13] I/O privilege level
Definition: ia32_type.h:57
unsigned rdtsc_exiting
[12]
Definition: ia32_type.h:999
ULONG32 instruction_identity
[28:29]
Definition: ia32_type.h:1282
unsigned char type
[8:12]
Definition: ia32_type.h:248
ULONG_PTR vif
[19] Virtual interrupt flag
Definition: ia32_type.h:63
struct Ia32VmxVmcsEnumMsr::@30 fields
ULONG_PTR af
[4] Borrow flag
Definition: ia32_type.h:49
ULONG_PTR cf
[0] Carry flag
Definition: ia32_type.h:45
ULONG64 reserved2
[5:8]
Definition: ia32_type.h:486
ULONG64 all
Definition: ia32_type.h:480
InvVpidType
See: INVVPID Descriptor.
Definition: ia32_type.h:1612
unsigned smxe
[14] SMX-Enable Bit
Definition: ia32_type.h:160
unsigned nw
[29] Not Write-Through
Definition: ia32_type.h:136
struct SegmentDescriptor::@8 fields
ULONG_PTR reserved2
[5:7]
Definition: ia32_type.h:1364
VmxExitReason reason
[0:15]
Definition: ia32_type.h:1222
ULONG32 sse4_2
[20] SSE4.2
Definition: ia32_type.h:333
unsigned l0
[0] Local Breakpoint Enable 0
Definition: ia32_type.h:194
unsigned supported_dual_moniter
[49]
Definition: ia32_type.h:1143
ULONG64 all
Definition: ia32_type.h:242
struct VmExitInformation::@32 fields
See: VPID AND EPT CAPABILITIES.
Definition: ia32_type.h:1187
unsigned support_single_context_invvpid
[41]
Definition: ia32_type.h:1210
unsigned conceal_vmentries_from_intel_pt
[17]
Definition: ia32_type.h:1093
ULONG64 present
[0]
Definition: ia32_type.h:482
ULONG64 ignore_pat_memory_type
[6]
Definition: ia32_type.h:1510
ULONG_PTR tf
[8] Trap flag
Definition: ia32_type.h:53
See: CONTROL REGISTERS.
Definition: ia32_type.h:144
ULONG64 accessed
[8]
Definition: ia32_type.h:1491
unsigned reserved1
[4:11] Always 1
Definition: ia32_type.h:179
struct Ia32ApicBaseMsr::@19 fields
IDT entry (nt!_KIDTENTRY)
Definition: ia32_type.h:241
See: Format of an EPT Page-Directory-Pointer-Table Entry (PDPTE) that Maps a 1-GByte Page...
Definition: ia32_type.h:1460
unsigned load_ia32_perf_global_ctrl
[12]
Definition: ia32_type.h:1063
struct Ia32MtrrPhysMaskMsr::@18 fields
unsigned lock
[0]
Definition: ia32_type.h:1121
unsigned support_page_walk_length4
[6]
Definition: ia32_type.h:1192
ULONG32 pclmulqdq
[1] PCLMULQDQ
Definition: ia32_type.h:314
See: Guest Register State.
Definition: ia32_type.h:1099
unsigned __int64 all
Definition: ia32_type.h:1135
ULONG_PTR bx
Definition: ia32_type.h:85
unsigned reserved3
[8]
Definition: ia32_type.h:995
ULONG64 ignore_pat_memory_type
[6]
Definition: ia32_type.h:1467
ULONG_PTR string_instruction
[4]
Definition: ia32_type.h:1378
ULONG_PTR reserved3
Definition: ia32_type.h:1366
struct Cr0::@2 fields
nt!_HARDWARE_PTE on x86 PAE-disabled Windows
Definition: ia32_type.h:389
unsigned bd
[13] Debug Register Access Detected
Definition: ia32_type.h:181
unsigned region_clear
[44]
Definition: ia32_type.h:1140
unsigned reserved3
[56:63]
Definition: ia32_type.h:1147
ULONG32 popcnt
[23] POPCNT instruction
Definition: ia32_type.h:336
ULONG64 valid
[0]
Definition: ia32_type.h:408
ULONG64 write_through
[3]
Definition: ia32_type.h:484
ULONG_PTR rep_prefixed
[5]
Definition: ia32_type.h:1379
unsigned pce
[8] Performance-Monitoring Counter Enable
Definition: ia32_type.h:155
unsigned osfxsr
[9] OS Support for FXSAVE/FXRSTOR
Definition: ia32_type.h:156
EptPointer ept_pointer
Definition: ia32_type.h:1591
unsigned len1
[22:23] Length 1
Definition: ia32_type.h:212
unsigned pe
[0] Protected Mode Enabled
Definition: ia32_type.h:125
unsigned support_all_context_invvpid
[42]
Definition: ia32_type.h:1211
unsigned reserved3
[16:63]
Definition: ia32_type.h:1128
unsigned enable_smx
[1]
Definition: ia32_type.h:1122
ULONG64 read_access
[0]
Definition: ia32_type.h:1550
ULONG32 smx
[6] Safer Mode Extensions
Definition: ia32_type.h:319
ULONG64 reserved1
[3:6]
Definition: ia32_type.h:1533
ULONG32 reserved
[12:30]
Definition: ia32_type.h:1640
unsigned load_ia32_pat
[19]
Definition: ia32_type.h:1068
unsigned g1
[3] Global Breakpoint Enable 1
Definition: ia32_type.h:197
unsigned supported_cr3_target_value_number_clear
[24]
Definition: ia32_type.h:1164
ULONG_PTR r9
Definition: ia32_type.h:79
unsigned g2
[5] Global Breakpoint Enable 2
Definition: ia32_type.h:199
ULONG64 valid
[0]
Definition: ia32_type.h:428
ULONG64 accessed
[5]
Definition: ia32_type.h:433
LdtrOrTrInstructionIdentity
See: Format of the VM-Exit Instruction-Information Field as Used for LLDT, LTR, SLDT, and STR.
Definition: ia32_type.h:1344
unsigned suppoeted_change_ia32_smm_monitor_ctl
[28]
Definition: ia32_type.h:1166
ULONG64 base_high
Definition: ia32_type.h:296
ULONG64 readable_writable_page
[10]
Definition: ia32_type.h:1582
ULONG64 linear_address
Definition: ia32_type.h:1607
IoInstSizeOfAccess
See: Exit Qualification for I/O Instructions.
Definition: ia32_type.h:1388
unsigned g0
[1] Global Breakpoint Enable 0
Definition: ia32_type.h:195
nt!_HARDWARE_PTE on the current platform
Definition: ia32_type.h:468
ULONG32 fma
[12] FMA extensions using YMM state
Definition: ia32_type.h:325
unsigned reserved4
[13:14]
Definition: ia32_type.h:1064
ULONG32 msr
[5] RDMSR and WRMSR Instructions
Definition: ia32_type.h:358
struct Ia32MtrrFixedRangeMsr::@16 fields
ULONG64 ignored2
[52:62]
Definition: ia32_type.h:1476
ULONG_PTR all
Definition: ia32_type.h:123
unsigned save_vmx_preemption_timer_value
[22]
Definition: ia32_type.h:1071
unsigned reserved3
[10:11]
Definition: ia32_type.h:1062
unsigned use_tpr_shadow
[21]
Definition: ia32_type.h:1006
unsigned reserved3
[19:28]
Definition: ia32_type.h:135
ULONG32 ss
[27] Self Snoop
Definition: ia32_type.h:379
See: IA32_MTRR_PHYSBASEn and IA32_MTRR_PHYSMASKn Variable-Range Register Pair.
Definition: ia32_type.h:539
struct Ia32FeatureControlMsr::@27 fields
ULONG_PTR nt
[14] Nested task flag
Definition: ia32_type.h:58
unsigned de
[3] Debugging Extensions
Definition: ia32_type.h:150
unsigned cr3_store_exiting
[16]
Definition: ia32_type.h:1002
ULONG64 software_ws_index
[52:62]
Definition: ia32_type.h:442
ULONG64 memory_type
[0:2]
Definition: ia32_type.h:1422
ULONG32 present
[1] 0= NotPresent
Definition: ia32_type.h:638
See: Definitions of Primary Processor-Based VM-Execution Controls.
Definition: ia32_type.h:987
ULONG64 ignored2
[11]
Definition: ia32_type.h:1559
unsigned enable_vmxon
[2]
Definition: ia32_type.h:1123
unsigned supported_activity_state_hlt
[6]
Definition: ia32_type.h:1158
ULONG64 written
[9]
Definition: ia32_type.h:1470
unsigned rw3
[28:29] Read / Write 3
Definition: ia32_type.h:215
unsigned pge
[7] Page Global Enable
Definition: ia32_type.h:154
ULONG32 instruction_identity
[28:29]
Definition: ia32_type.h:1337
ULONG_PTR di
Definition: ia32_type.h:93
ULONG64 bootstrap_processor
[8]
Definition: ia32_type.h:566
InvEptType
See: INVEPT Descriptor.
Definition: ia32_type.h:1597
See: Definitions of VM-Entry Controls.
Definition: ia32_type.h:1079
ULONG32 pse
[3] Page Size Extension
Definition: ia32_type.h:356
ULONG_PTR sp
Definition: ia32_type.h:96
unsigned wp
[16] Write Protect
Definition: ia32_type.h:132
unsigned support_execute_only_pages
[0]
Definition: ia32_type.h:1190
struct Ia32VmxBasicMsr::@28 fields
ULONG32 sse2
[26] SSE2
Definition: ia32_type.h:378
unsigned short pending_mtf_vm_exit
[28]
Definition: ia32_type.h:1224
ULONG64 execute_access
[2]
Definition: ia32_type.h:1445
ULONG32 base_register_invalid
[27]
Definition: ia32_type.h:1336
unsigned le
[8] Local Exact Breakpoint Enable
Definition: ia32_type.h:202
ULONG_PTR df
[10] Direction flag
Definition: ia32_type.h:55
ULONG64 write_access
[1]
Definition: ia32_type.h:1507
unsigned reserved2
[17]
Definition: ia32_type.h:133
unsigned host_address_space_size
[9]
Definition: ia32_type.h:1061
unsigned support_all_context_invept
[26]
Definition: ia32_type.h:1205
ULONG64 valid_guest_linear_address
[7]
Definition: ia32_type.h:1579
unsigned char present
[15]
Definition: ia32_type.h:250
ULONG64 ignored3
[52:63]
Definition: ia32_type.h:1453
unsigned reserved1
[5]
Definition: ia32_type.h:1157
unsigned reserved7
[27:31]
Definition: ia32_type.h:1206
struct VmxRegmentDescriptorAccessRight::@26 fields
ULONG_PTR lmsw_operand_type
[6]
Definition: ia32_type.h:1408
ULONG64 reserved1
Definition: ia32_type.h:1592
ULONG32 mca
[14] Machine Check Architecture
Definition: ia32_type.h:366
struct FlagRegister::@1 fields
ULONG64 reserved2
[48:51]
Definition: ia32_type.h:1452
unsigned use_tsc_offseting
[3]
Definition: ia32_type.h:992
ULONG64 write_through
[3] PWT
Definition: ia32_type.h:431
unsigned b0
[0] Breakpoint Condition Detected 0
Definition: ia32_type.h:175
ULONG32 reserved1
[2:6]
Definition: ia32_type.h:1272
unsigned conceal_vmexits_from_intel_pt
[24]
Definition: ia32_type.h:1073
unsigned enable_global_senter
[15]
Definition: ia32_type.h:1126
ULONG64 physial_address
[12:48-1]
Definition: ia32_type.h:1560
ULONG_PTR reserved1
[3]
Definition: ia32_type.h:1362
ULONG32 clfsh
[19] CLFLUSH Instruction
Definition: ia32_type.h:371
ULONG32 address_size
[7:9]
Definition: ia32_type.h:1329
unsigned long vmx_abort_indicator
Definition: ia32_type.h:967
ULONG64 global
[8]
Definition: ia32_type.h:436
ULONG64 execute_access_for_user_mode_linear_address
[10]
Definition: ia32_type.h:1493
unsigned pvi
[1] Protected-Mode Virtual Interrupts
Definition: ia32_type.h:148
ULONG32 tm
[29] Thermal Monitor
Definition: ia32_type.h:381
unsigned supported_ia64
[48]
Definition: ia32_type.h:1142
unsigned supported_activity_state_wait_for_sipi
[8]
Definition: ia32_type.h:1160
See: VMCS ENUMERATION.
Definition: ia32_type.h:1175
ULONG copy_on_write
[9]
Definition: ia32_type.h:399
ULONG64 page_walk_length
[3:5]
Definition: ia32_type.h:1423
ULONG32 reserved1
[10] Reserved
Definition: ia32_type.h:362
ULONG64 ignored2
[32:63]
Definition: ia32_type.h:473
ULONG_PTR all
Definition: ia32_type.h:43
unsigned len0
[18:19] Length 0
Definition: ia32_type.h:210
ULONG64 accessed
[8]
Definition: ia32_type.h:1535
unsigned l1
[2] Local Breakpoint Enable 1
Definition: ia32_type.h:196
ULONG64 accessed
[8]
Definition: ia32_type.h:1512
ULONG64 write_access
[1]
Definition: ia32_type.h:1488
unsigned gd
[13] General Detect Enable
Definition: ia32_type.h:207
ULONG32 fetch
[5]
Definition: ia32_type.h:642
unsigned support_single_context_invept
[25]
Definition: ia32_type.h:1204
struct VmxSecondaryProcessorBasedControls::@23 fields
ULONG_PTR r10
Definition: ia32_type.h:78
unsigned mce
[6] Machine-Check Enable
Definition: ia32_type.h:153
ULONG64 base_mid
Definition: ia32_type.h:286
struct Ia32MtrrPhysBaseMsr::@17 fields
ULONG large_page
[7]
Definition: ia32_type.h:397
ULONG64 suppress_ve
[63]
Definition: ia32_type.h:1520
unsigned reserved1
[1:5]
Definition: ia32_type.h:1191
See: Page-Fault Error Code.
Definition: ia32_type.h:635
struct VmxProcessorBasedControls::@22 fields
unsigned save_ia32_efer
[20]
Definition: ia32_type.h:1069
ULONG_PTR dx
Definition: ia32_type.h:98
See: MISCELLANEOUS DATA.
Definition: ia32_type.h:1153
See: IA32_APIC_BASE MSR Supporting x2APIC.
Definition: ia32_type.h:562
ULONG32 avx
[28] AVX instruction extensions
Definition: ia32_type.h:341
ULONG_PTR rf
[16] Resume flag
Definition: ia32_type.h:60
unsigned em
[2] Emulate FLAG
Definition: ia32_type.h:127
See: Exit Qualification for EPT Violations.
Definition: ia32_type.h:1569
ULONG32 ds_cpl
[4] CPL qualified Debug Store
Definition: ia32_type.h:317
ULONG64 accessed
[8]
Definition: ia32_type.h:1556
ULONG64 reserved2
[48:51]
Definition: ia32_type.h:1518
unsigned short reserved2
[30]
Definition: ia32_type.h:1226
unsigned enable_local_senter
[8:14]
Definition: ia32_type.h:1125
ULONG64 execute_access_for_user_mode_linear_address
[10]
Definition: ia32_type.h:1514
ULONG32 address_size
[7:9]
Definition: ia32_type.h:1273
ULONG64 read_access
[0]
Definition: ia32_type.h:1530
ULONG_PTR control_register
[0:3]
Definition: ia32_type.h:1406
unsigned long revision_identifier
Definition: ia32_type.h:966
unsigned pse
[4] Page Size Extensions
Definition: ia32_type.h:151
unsigned char ist_index
[0:2]
Definition: ia32_type.h:246
ULONG_PTR sp
Definition: ia32_type.h:84
ULONG32 movbe
[22] MOVBE instruction
Definition: ia32_type.h:335
ULONG64 pd_address
[12:48-1]
Definition: ia32_type.h:1495
See: Exit Qualification for Control-Register Accesses.
Definition: ia32_type.h:1403
VmxInstructionError
See: VM-instruction error numbers.
Definition: ia32_type.h:925
unsigned reserved3
[30:31]
Definition: ia32_type.h:1168
ULONG_PTR reserved2
[12:15]
Definition: ia32_type.h:1411
unsigned acknowledge_interrupt_on_exit
[15]
Definition: ia32_type.h:1065
ULONG64 large_page
[7] PAT
Definition: ia32_type.h:415
unsigned reserved3
[9:13]
Definition: ia32_type.h:1195
ULONG unknown2
Definition: ia32_type.h:453
unsigned ne
[5] Numeric Error
Definition: ia32_type.h:130
unsigned g3
[7] Global Breakpoint Enable 3
Definition: ia32_type.h:201
struct VmxPinBasedControls::@21 fields
ULONG64 nmi_unblocking
[12]
Definition: ia32_type.h:1584
ULONG32 write
[2] 0= Read
Definition: ia32_type.h:639
unsigned load_ia32_bndcfgs
[16]
Definition: ia32_type.h:1092
ULONG reserved0
[11]
Definition: ia32_type.h:401
unsigned unconditional_io_exiting
[24]
Definition: ia32_type.h:1009
struct VmEntryInterruptionInformationField::@49 fields
unsigned vme
[0] Virtual Mode Extensions
Definition: ia32_type.h:147
ULONG64 execute_access_for_user_mode_linear_address
[10]
Definition: ia32_type.h:1558
See: Exit Qualification for MOV DR.
Definition: ia32_type.h:1358
ULONG64 write
[1]
Definition: ia32_type.h:409
ULONG64 all
Definition: ia32_type.h:1528
ULONG_PTR r13
Definition: ia32_type.h:75
unsigned reserved3
[17:31] Always 1
Definition: ia32_type.h:185
unsigned smep
[20] Supervisor Mode Execution Protection Enable
Definition: ia32_type.h:165
ULONG32 reserved
[4]
Definition: ia32_type.h:641
ULONG64 memory_type
[3:5]
Definition: ia32_type.h:1466
ULONG64 execute_access
[2]
Definition: ia32_type.h:1489
ULONG64 all
Definition: ia32_type.h:1504
ULONG_PTR vm
[17] Virtual 8086 mode
Definition: ia32_type.h:61
ULONG32 reserved
[16] Reserved
Definition: ia32_type.h:329
ULONG prototype
[10]
Definition: ia32_type.h:400
unsigned len2
[26:27] Length 2
Definition: ia32_type.h:214
ULONG cache_disable
[4]
Definition: ia32_type.h:394
unsigned revision_identifier
[32:63]
Definition: ia32_type.h:1169
ULONG64 all
Definition: ia32_type.h:469
struct EptPdEntry::@45 fields
unsigned reserved6
[22:24]
Definition: ia32_type.h:1203
unsigned reserved2
[12] Always 0
Definition: ia32_type.h:180
ULONG64 valid
[11]
Definition: ia32_type.h:555
ULONG64 memory_type
[3:5]
Definition: ia32_type.h:1553
ULONG64 read_access
[0]
Definition: ia32_type.h:1463
unsigned ge
[9] Global Exact Breakpoint Enable
Definition: ia32_type.h:203
ULONG_PTR bx
Definition: ia32_type.h:97
GpRegisters gp
Definition: ia32_type.h:112
MovCrAccessType
See: Exit Qualification for Control-Register Accesses.
Definition: ia32_type.h:1395
ULONG_PTR reserved1
[7]
Definition: ia32_type.h:1409
ULONG32 all
Definition: ia32_type.h:1635
unsigned long data[1]
Implementation-specific format.
Definition: ia32_type.h:968
See: Feature Information Returned in the ECX Register.
Definition: ia32_type.h:310
unsigned int all
Definition: ia32_type.h:1080
Msr
See: MODEL-SPECIFIC REGISTERS (MSRS)
Definition: ia32_type.h:576
ULONG_PTR ax
Definition: ia32_type.h:88
ULONG64 owner
[2]
Definition: ia32_type.h:410
unsigned reserved2
[7]
Definition: ia32_type.h:1193
ULONG32 reserved
Definition: ia32_type.h:262
ULONG_PTR gp_register
[8:11]
Definition: ia32_type.h:1410
ULONG_PTR all
Definition: ia32_type.h:173
unsigned reserved6
[26]
Definition: ia32_type.h:1011
ULONG_PTR intf
[9] Interrupt flag
Definition: ia32_type.h:54
ULONG32 mmx
[23] Intel MMX Technology
Definition: ia32_type.h:375
AddressSize
See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT.
Definition: ia32_type.h:1297
unsigned reserved3
[12]
Definition: ia32_type.h:1088
unsigned hlt_exiting
[7]
Definition: ia32_type.h:994
See: SYSTEM FLAGS AND FIELDS IN THE EFLAGS REGISTER.
Definition: ia32_type.h:42
ULONG32 reserved2
[11:14]
Definition: ia32_type.h:1331
unsigned pause_exiting
[30]
Definition: ia32_type.h:1015
unsigned reserved3
[14:15] Always 0
Definition: ia32_type.h:208
ULONG32 cmov
[15] Conditional Move Instructions
Definition: ia32_type.h:367
unsigned reserved2
[4:6]
Definition: ia32_type.h:993
ULONG64 type
[0:7]
Definition: ia32_type.h:542
Scaling
See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT.
Definition: ia32_type.h:1289
See: Format of the VM-Entry Interruption-Information Field.
Definition: ia32_type.h:1634
ULONG32 linear_address_bits
[8:15]
Definition: ia32_type.h:499
ULONG64 reserved2
[9]
Definition: ia32_type.h:567
ULONG_PTR zf
[6] Zero flag
Definition: ia32_type.h:51
See: Format of Exit Reason in Basic VM-Exit Information.
Definition: ia32_type.h:1219
unsigned bs
[14] Single Step
Definition: ia32_type.h:182
unsigned reserved2
[15:16]
Definition: ia32_type.h:161
ULONG64 read_access
[0]
Definition: ia32_type.h:1506
ULONG_PTR direction
[4]
Definition: ia32_type.h:1363
struct InvEptOrPcidOrVpidInstInformation::@34 fields
See: Definitions of Pin-Based VM-Execution Controls.
Definition: ia32_type.h:972
struct PageFaultErrorCode::@20 fields
See: INVEPT Descriptor.
Definition: ia32_type.h:1590
unsigned b3
[3] Breakpoint Condition Detected 3
Definition: ia32_type.h:178
See: Debug Control Register (DR7)
Definition: ia32_type.h:191
ULONG64 Ignored3
[52:62]
Definition: ia32_type.h:1562
unsigned region_size
[32:43]
Definition: ia32_type.h:1139
ULONG write
[1]
Definition: ia32_type.h:391
VmcsField
See: FIELD ENCODING IN VMCS.
Definition: ia32_type.h:648
See: Definitions of Secondary Processor-Based VM-Execution Controls.
Definition: ia32_type.h:1022
ULONG32 scalling
[0:1]
Definition: ia32_type.h:1326
unsigned char dpl
[13:14]
Definition: ia32_type.h:249
unsigned rtm
[11] Restricted Transactional Memory
Definition: ia32_type.h:205
unsigned reserved1
[0:1]
Definition: ia32_type.h:990
See: Segment Selectors.
Definition: ia32_type.h:269
ULONG64 page_directory_pa
[12:52]
Definition: ia32_type.h:488
See: Format of an EPT Page-Directory Entry (PDE) that References an EPT Page Table.
Definition: ia32_type.h:1527
See: Format of the VM-Exit Interruption-Information Field.
Definition: ia32_type.h:1620
ULONG_PTR direction
[3]
Definition: ia32_type.h:1377
ULONG32 reserved2
[10:14]
Definition: ia32_type.h:1239
ULONG32 reserved3
[24] one-shot operation using a TSC deadline
Definition: ia32_type.h:337
unsigned et
[4] Extension Type FLAG
Definition: ia32_type.h:129
See: Segment Descriptor.
Definition: ia32_type.h:302
unsigned short limit
Definition: ia32_type.h:224
unsigned short ti
Table Indicator.
Definition: ia32_type.h:273
unsigned cd
[30] Cache Disable
Definition: ia32_type.h:137
struct GdtrOrIdtrInstInformation::@35 fields
ULONG32 base_register_invalid
[27]
Definition: ia32_type.h:1281
ULONG32 sse4_1
[19] SSE4.1
Definition: ia32_type.h:332
ULONG64 ignore_pat_memory_type
[6]
Definition: ia32_type.h:1554
See: Segment Descriptor.
Definition: ia32_type.h:281
unsigned reserved1
[0:1]
Definition: ia32_type.h:1058
struct EptPtEntry::@46 fields
ULONG32 htt
[28] Max APIC IDs reserved field is Valid
Definition: ia32_type.h:380
unsigned maximum_msrs_number
[25:27]
Definition: ia32_type.h:1165
ULONG32 physical_address_bits
[0:7]
Definition: ia32_type.h:498
unsigned support_pdpte_1_gb_pages
[17]
Definition: ia32_type.h:1199
ULONG64 pt_address
[12:48-1]
Definition: ia32_type.h:1539
ULONG_PTR r14
Definition: ia32_type.h:74
struct EptPdLargePageEntry::@44 fields
ULONG64 l
64-bit code segment (IA-32e mode only)
Definition: ia32_type.h:293
unsigned am
[18] Alignment Mask
Definition: ia32_type.h:134
ULONG64 owner
[2]
Definition: ia32_type.h:430
unsigned reserved2
[3:8]
Definition: ia32_type.h:1084
ULONG_PTR debugl_register
[0:2]
Definition: ia32_type.h:1361
unsigned __int64 all
Definition: ia32_type.h:1188
struct PaeCr3::@11 fields
unsigned deactivate_dual_monitor_treatment
[11]
Definition: ia32_type.h:1087
InterruptionVector
See: Format of the VM-Entry Interruption-Information Field.
Definition: ia32_type.h:1659
unsigned ts
[3] Task Switched FLAG
Definition: ia32_type.h:128
unsigned revision_identifier
[0:30]
Definition: ia32_type.h:1137
unsigned short vm_exit_from_vmx_root
[29]
Definition: ia32_type.h:1225
ULONG32 cid
[10] L1 context ID
Definition: ia32_type.h:323
ULONG32 psn
[18] Processor Serial Number
Definition: ia32_type.h:370
unsigned monitor_trap_flag
[27]
Definition: ia32_type.h:1012
unsigned reserved1
[11:12]
Definition: ia32_type.h:158
ULONG64 read_access
[0]
Definition: ia32_type.h:1487
ULONG unknown1
Definition: ia32_type.h:451
ULONG64 ignored2
[11]
Definition: ia32_type.h:1494
unsigned supported_vmwrite_vm_exit_information
[29]
Definition: ia32_type.h:1167
unsigned virtual_nmis
[5]
Definition: ia32_type.h:979
unsigned int all
Definition: ia32_type.h:1056
ULONG_PTR r12
Definition: ia32_type.h:76
ULONG64 reserved2
[48:51]
Definition: ia32_type.h:1475
ULONG_PTR sf
[7] Sign flag
Definition: ia32_type.h:52
struct EptPdptEntry::@43 fields
unsigned cr8_load_exiting
[19]
Definition: ia32_type.h:1004
ULONG64 execute_access_for_user_mode_linear_address
[10]
Definition: ia32_type.h:1537
ULONG64 page_frame_number
[12:37]
Definition: ia32_type.h:420
ULONG64 default_mtemory_type
Definition: ia32_type.h:520
constexpr unsigned int operator<<(_In_ unsigned int lhs, _In_ InterruptionVector rhs)
Provides << operator for VmEntryInterruptionInformationField.
Definition: ia32_type.h:1683
ULONG64 user_mode_linear_address
[9]
Definition: ia32_type.h:1581
unsigned b1
[1] Breakpoint Condition Detected 1
Definition: ia32_type.h:176
ULONG32 all
Definition: ia32_type.h:311
ULONG32 register1
[3:6]
Definition: ia32_type.h:1328
ULONG64 caused_by_translation
[8]
Definition: ia32_type.h:1580
ULONG64 execute_access
[2]
Definition: ia32_type.h:1552
ULONG32 index_register
[18:21]
Definition: ia32_type.h:1278
ULONG64 reserved1
[12:20]
Definition: ia32_type.h:1516
unsigned support_individual_address_invvpid
[40]
Definition: ia32_type.h:1209
unsigned clear_ia32_bndcfgs
[23]
Definition: ia32_type.h:1072
ULONG64 ignored1
[9]
Definition: ia32_type.h:1536
unsigned int all
Definition: ia32_type.h:1220
ULONG32 ds
[21] Debug Store
Definition: ia32_type.h:373
ULONG32 osxsave
[27] enable XSETBV/XGETBV instructions
Definition: ia32_type.h:340
ULONG global
[8]
Definition: ia32_type.h:398
ULONG32 sep
[11] SYSENTER and SYSEXIT Instructions
Definition: ia32_type.h:363
struct VmExitInterruptionInformationField::@48 fields
ULONG64 reserved1
[1:2]
Definition: ia32_type.h:483
ULONG64 reserved1
[7:11]
Definition: ia32_type.h:1425
ULONG_PTR reserved3
[32:63]
Definition: ia32_type.h:1413
See: Exit Qualification for I/O Instructions.
Definition: ia32_type.h:1373
See: PDPTE Registers.
Definition: ia32_type.h:479
ULONG32 segment_register
[15:17]
Definition: ia32_type.h:1332
unsigned reserved1
[6:15]
Definition: ia32_type.h:131
unsigned b2
[2] Breakpoint Condition Detected 2
Definition: ia32_type.h:177
ULONG_PTR bp
Definition: ia32_type.h:83
unsigned activate_vmx_peemption_timer
[6]
Definition: ia32_type.h:980
ULONG_PTR r15
Definition: ia32_type.h:73
ULONG64 execute_access_for_user_mode_linear_address
[10]
Definition: ia32_type.h:1449
unsigned short vm_entry_failure
[31]
Definition: ia32_type.h:1227
ULONG32 index_register
[18:21]
Definition: ia32_type.h:1333
ULONG64 base_low
Definition: ia32_type.h:285
ULONG64 ignored1
[11]
Definition: ia32_type.h:1472
ULONG_PTR si
Definition: ia32_type.h:94
ULONG64 reserved
[8:11]
Definition: ia32_type.h:543
ULONG64 accessed
[8]
Definition: ia32_type.h:1447
unsigned short offset_middle
Definition: ia32_type.h:251
ULONG64 dirty
[6]
Definition: ia32_type.h:414
unsigned rw0
[16:17] Read / Write 0
Definition: ia32_type.h:209
unsigned char reserved
[3:7]
Definition: ia32_type.h:247
unsigned reserved5
[18:19]
Definition: ia32_type.h:1200
ULONG64 reserved1
[3:7]
Definition: ia32_type.h:1446
ULONG write_through
[3]
Definition: ia32_type.h:393
See: Format of an EPT PML4 Entry (PML4E) that References an EPT Page-Directory-Pointer Table...
Definition: ia32_type.h:1440
unsigned nmi_window_exiting
[22]
Definition: ia32_type.h:1007
unsigned reserved2
[4]
Definition: ia32_type.h:978
unsigned memory_type
[50:53]
Definition: ia32_type.h:1144
IDT entry for x64 (nt!_KIDTENTRY64)
Definition: ia32_type.h:259
ULONG64 cache_disable
[4]
Definition: ia32_type.h:485
unsigned use_io_bitmaps
[25]
Definition: ia32_type.h:1010
ULONG32 segment_register
[15:17]
Definition: ia32_type.h:1277
unsigned __int64 all
Definition: ia32_type.h:1154
struct PdptrRegister::@12 fields
ULONG64 reserved1
[48:51]
Definition: ia32_type.h:441
ULONG64 ept_executable
[5]
Definition: ia32_type.h:1577
ULONG32 pcid
[17] Process-context identifiers
Definition: ia32_type.h:330
ULONG32 reserved3
[12:14]
Definition: ia32_type.h:1276
unsigned load_ia32_efer
[15]
Definition: ia32_type.h:1091
ULONG64 phys_mask
[12:MAXPHYADDR]
Definition: ia32_type.h:556
ULONG_PTR reserved3
[5] Always 0
Definition: ia32_type.h:50
nt!_HARDWARE_PTE on x64 Windows
Definition: ia32_type.h:427
static const ULONG32 kHyperVCpuidInterface
A majority of modern hypervisors expose their signatures through CPUID with this CPUID function code ...
Definition: ia32_type.h:29
struct EptPointer::@40 fields
unsigned load_ia32_pat
[14]
Definition: ia32_type.h:1090
struct MovDrQualification::@37 fields
ULONG32 sse
[25] SSE
Definition: ia32_type.h:377
MovDrDirection
See: Exit Qualification for MOV DR.
Definition: ia32_type.h:1352
ULONG64 suppress_ve
[63]
Definition: ia32_type.h:1563
ULONG64 execute_access
[2]
Definition: ia32_type.h:1465
unsigned support_invept
[20]
Definition: ia32_type.h:1201
unsigned support_pde_2mb_pages
[16]
Definition: ia32_type.h:1198
ULONG64 write_access
[1]
Definition: ia32_type.h:1531
ULONG_PTR id
[21] Identification flag
Definition: ia32_type.h:65
ULONG_PTR r8
Definition: ia32_type.h:80
unsigned cr3_load_exiting
[15]
Definition: ia32_type.h:1001
ULONG32 deliver_error_code
[11]
Definition: ia32_type.h:1639
unsigned support_invvpid
[32]
Definition: ia32_type.h:1207
unsigned short rpl
Requested Privilege Level.
Definition: ia32_type.h:272
See: BASIC VMX INFORMATION.
Definition: ia32_type.h:1134
See: ARCHITECTURAL MSRS.
Definition: ia32_type.h:1118
ULONG64 pml4_address
[12:48-1]
Definition: ia32_type.h:1426
ULONG page_frame_number
[12:31]
Definition: ia32_type.h:402
struct KidtEntry::@6 fields
unsigned monitor_exiting
[29]
Definition: ia32_type.h:1014
ULONG_PTR reserved1
[7:15]
Definition: ia32_type.h:1381
ULONG64 accessed
[5]
Definition: ia32_type.h:413
ULONG64 variable_range_count
Definition: ia32_type.h:507
unsigned mp
[1] Monitor Coprocessor FLAG
Definition: ia32_type.h:126
ULONG64 memory_type
[3:5]
Definition: ia32_type.h:1509
struct Ia32MtrrDefaultTypeMsr::@15 fields
unsigned support_write_back_memory_type
[14]
Definition: ia32_type.h:1196
See: Format of the VM-Exit Instruction-Information Field as Used for INVEPT, INVPCID, and INVVPID.
Definition: ia32_type.h:1248
See: Format of the VM-Exit Instruction-Information Field as Used for LLDT, LTR, SLDT, and STR.
Definition: ia32_type.h:1323
ULONG64 dirty
[6]
Definition: ia32_type.h:434
See: IA32_MTRR_DEF_TYPE MSR.
Definition: ia32_type.h:517
struct CpuFeaturesEcx::@9 fields
ULONG64 must_be0
[7]
Definition: ia32_type.h:1534
ULONG_PTR dx
Definition: ia32_type.h:86
struct Dr7::@5 fields
ULONG_PTR reserved5
[22:31] Always 0
Definition: ia32_type.h:66
struct VmxVmExitControls::@24 fields
See: Debug Status Register (DR6)
Definition: ia32_type.h:172
ULONG64 copy_on_write
[9]
Definition: ia32_type.h:417
ULONG_PTR bp
Definition: ia32_type.h:95
ULONG64 phys_base
[12:MAXPHYADDR]
Definition: ia32_type.h:544
ULONG32 fxsr
[24] FXSAVE and FXRSTOR Instructions
Definition: ia32_type.h:376
ULONG no_execute
Definition: ia32_type.h:449
ULONG_PTR operand_encoding
[6]
Definition: ia32_type.h:1380
See: IA32_MTRRCAP Register.
Definition: ia32_type.h:504
unsigned pg
[31] Paging Enabled
Definition: ia32_type.h:138
ULONG64 execute_access_for_user_mode_linear_address
[10]
Definition: ia32_type.h:1471
ULONG64 reserved1
[0:7]
Definition: ia32_type.h:565
ULONG32 base_register
[23:26]
Definition: ia32_type.h:1280
unsigned short offset_low
Definition: ia32_type.h:244
ULONG owner
[2]
Definition: ia32_type.h:392
unsigned short selector
Definition: ia32_type.h:245
unsigned supported_cr3_target_value_number
[16:23]
Definition: ia32_type.h:1163
ULONG64 write
[1]
Definition: ia32_type.h:429
ULONG64 enable_xapic_global
[11]
Definition: ia32_type.h:569
ULONG64 pdpt_address
[12:48-1]
Definition: ia32_type.h:1451
unsigned reserved2
[3:8]
Definition: ia32_type.h:1060
See: Fixed Range MTRRs.
Definition: ia32_type.h:529
ULONG64 reserved1
[38:62]
Definition: ia32_type.h:421
ULONG32 sse3
[0] Streaming SIMD Extensions 3 (SSE3)
Definition: ia32_type.h:313
unsigned invlpg_exiting
[9]
Definition: ia32_type.h:996
ULONG64 prototype
[10]
Definition: ia32_type.h:418
unsigned vmx_capability_hint
[55]
Definition: ia32_type.h:1146
ULONG64 limit_low
Definition: ia32_type.h:284
unsigned activate_secondary_control
[31]
Definition: ia32_type.h:1016
ULONG32 pdcm
[15] Performance/Debug capability MSR
Definition: ia32_type.h:328
ULONG32 est
[7] Enhanced Intel Speedstep Technology
Definition: ia32_type.h:320
ULONG64 ignored3
[52:63]
Definition: ia32_type.h:1497
ULONG64 all
Definition: ia32_type.h:1485
ULONG64 page_directory_pointer_table_pa
[5:31]
Definition: ia32_type.h:472
ULONG32 reserved4
[30:31]
Definition: ia32_type.h:1338
unsigned supported_highest_vmcs_encoding
[1:9]
Definition: ia32_type.h:1179
ULONG64 ept_executable_for_user_mode
[6]
Definition: ia32_type.h:1578
ULONG32 de
[2] Debugging Extensions
Definition: ia32_type.h:355
unsigned nmi_exiting
[3]
Definition: ia32_type.h:977
ULONG_PTR ac
[18] Alignment check
Definition: ia32_type.h:62
ULONG32 tm2
[8] Thermal monitor 2
Definition: ia32_type.h:321
unsigned reserved4
[13:14]
Definition: ia32_type.h:1000
ULONG32 segment_register
[15:17]
Definition: ia32_type.h:1240
ULONG64 write_access
[1]
Definition: ia32_type.h:1444
unsigned ia32e_mode_guest
[9]
Definition: ia32_type.h:1085
Represents a stack layout after PUSHAQ.
Definition: ia32_type.h:72
ULONG64 prototype
[10]
Definition: ia32_type.h:438
ULONG_PTR r11
Definition: ia32_type.h:77
ULONG32 vmx
[5] Virtual Machine Technology
Definition: ia32_type.h:318
ULONG64 ignored
[9:11]
Definition: ia32_type.h:487
See: MEMORY-MANAGEMENT REGISTERS.
Definition: ia32_type.h:223
See: Format of the VM-Exit Instruction-Information Field as Used for INS and OUTS.
Definition: ia32_type.h:1234
unsigned pcide
[17] PCID Enable
Definition: ia32_type.h:162
ULONG32 sdbg
[11] IA32_DEBUG_INTERFACE MSR
Definition: ia32_type.h:324
ULONG32 reserved1
[0:6]
Definition: ia32_type.h:1237
SegmentRegisters
See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT.
Definition: ia32_type.h:1304
ULONG64 no_execute
[63]
Definition: ia32_type.h:422
unsigned reserved2
[9:14]
Definition: ia32_type.h:1161
unsigned len3
[30:31] Length 3
Definition: ia32_type.h:216
ULONG32 pat
[16] Page Attribute Table
Definition: ia32_type.h:368
See: INVVPID Descriptor.
Definition: ia32_type.h:1603
unsigned reserved5
[17:18]
Definition: ia32_type.h:1003
static const SIZE_T kVmxMaxVmcsSize
See: OVERVIEW.
Definition: ia32_type.h:24
ULONG64 execute_access
[2]
Definition: ia32_type.h:1574
unsigned reserved1
[31]
Definition: ia32_type.h:1138
ULONG64 accessed
[8]
Definition: ia32_type.h:1469
unsigned rtm
[16] Restricted Transactional Memory
Definition: ia32_type.h:184
ULONG64 reserved3
[53:63]
Definition: ia32_type.h:489
unsigned short all
Definition: ia32_type.h:270
ULONG_PTR reserved4
[12:63]
Definition: ia32_type.h:1367
ULONG32 aes
[25] AESNI instruction
Definition: ia32_type.h:338
ULONG32 acpi
[22] TM and Software Controlled Clock
Definition: ia32_type.h:374
ULONG64 cache_disable
[4] PCD
Definition: ia32_type.h:432
ULONG64 reserved0
[11]
Definition: ia32_type.h:439
unsigned reserved2
Definition: ia32_type.h:1180
unsigned mwait_exiting
[10]
Definition: ia32_type.h:997
ULONG64 all
Definition: ia32_type.h:1461
nt!_HARDWARE_PTE on ARM Windows
Definition: ia32_type.h:448
ULONG_PTR size_of_access
[0:2]
Definition: ia32_type.h:1376
unsigned l
[13] Reserved (except for CS) 64-bit mode
Definition: ia32_type.h:1108
ULONG64 ignored3
[52:63]
Definition: ia32_type.h:1541
ULONG32 register_access
[10]
Definition: ia32_type.h:1330
struct Ia32VmxMiscMsr::@29 fields
ULONG64 fixed_range_supported
Definition: ia32_type.h:508
ULONG64 reserved1
[12:29]
Definition: ia32_type.h:1473
unsigned reserved1
[10] Always 1
Definition: ia32_type.h:204
ULONG64 fixed_mtrrs_enabled
Definition: ia32_type.h:522
See: Definitions of VM-Exit Controls.
Definition: ia32_type.h:1055
unsigned rdpmc_exiting
[11]
Definition: ia32_type.h:998
ULONG_PTR cx
Definition: ia32_type.h:99
ULONG32 monitor
[3] MONITOR/WAIT
Definition: ia32_type.h:316
unsigned reserved1
[3:7]
Definition: ia32_type.h:1124
ULONG32 address_size
[7:9]
Definition: ia32_type.h:1238
ULONG64 reserved
[0:10]
Definition: ia32_type.h:554
struct EptPdptSuperPageEntry::@42 fields
ULONG32 x2_apic
[21] x2APIC feature
Definition: ia32_type.h:334
ULONG64 no_execute
[63]
Definition: ia32_type.h:443
ULONG64 ignored2
[52:62]
Definition: ia32_type.h:1519
struct Ia32MtrrCapabilitiesMsr::@14 fields
ULONG dirty
[6]
Definition: ia32_type.h:396
KidtEntry idt_entry
Definition: ia32_type.h:260
ULONG64 all
Definition: ia32_type.h:1420
unsigned short reserved1
[16:30]
Definition: ia32_type.h:1223
unsigned save_debug_controls
[2]
Definition: ia32_type.h:1059
ULONG32 vme
[1] Virtual 8086 Mode Enhancements
Definition: ia32_type.h:354
unsigned mode_based_execute_control_for_ept
[22]
Definition: ia32_type.h:1047
unsigned rw2
[24:25] Read / Write 2
Definition: ia32_type.h:213
unsigned reserved9
[44:63]
Definition: ia32_type.h:1213
unsigned save_ia32_pat
[18]
Definition: ia32_type.h:1067
unsigned reserved3
[10:63]
Definition: ia32_type.h:1181
unsigned support_uncacheble_memory_type
[8]
Definition: ia32_type.h:1194
struct VmxVmEntryControls::@25 fields
ULONG_PTR si
Definition: ia32_type.h:82
ULONG64 must_be1
[7]
Definition: ia32_type.h:1511
ULONG32 ssse3
[9] Supplemental Streaming SIMD Extensions 3
Definition: ia32_type.h:322
ULONG32 pbe
[31] Pending Break Enable
Definition: ia32_type.h:383
ULONG64 enable_x2apic_mode
[10]
Definition: ia32_type.h:568
ULONG_PTR of
[11] Overflow flag
Definition: ia32_type.h:56
ULONG64 ignored1
[11]
Definition: ia32_type.h:1515
ULONG32 cx8
[8] Thermal monitor 2
Definition: ia32_type.h:360
unsigned reserved5
[16:17]
Definition: ia32_type.h:1066
ULONG valid
[0]
Definition: ia32_type.h:390
See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT.
Definition: ia32_type.h:1268
ULONG32 dca
[18] prefetch from a memory mapped device
Definition: ia32_type.h:331
struct Dr6::@4 fields
unsigned reserved1
[1:2]
Definition: ia32_type.h:976
See: IA32_MTRR_PHYSBASEn and IA32_MTRR_PHYSMASKn Variable-Range Register Pair.
Definition: ia32_type.h:551
unsigned reserved8
[33:39]
Definition: ia32_type.h:1208
unsigned rw1
[20:21] Read / Write 1
Definition: ia32_type.h:211
ULONG32 offset_high
Definition: ia32_type.h:261
struct InsOrOutsInstInformation::@33 fields
ULONG64 ignored1
[9]
Definition: ia32_type.h:1448
See: Format of an EPT Page-Directory Entry (PDE) that Maps a 2-MByte Page.
Definition: ia32_type.h:1503
Represents a stack layout after a sequence of PUSHFx, PUSHAx.
Definition: ia32_type.h:111
ULONG32 xtpr
[14] xTPR Update Control
Definition: ia32_type.h:327
ULONG_PTR reserved1
[1] Always 1
Definition: ia32_type.h:46
struct LdtrOrTrInstInformation::@36 fields
ULONG32 index_register_invalid
[22]
Definition: ia32_type.h:1334
ULONG64 cache_disable
[4] PCD
Definition: ia32_type.h:412
See: More on Feature Information Returned in the EDX Register.
Definition: ia32_type.h:350
struct EptViolationQualification::@47 fields
unsigned short index
Definition: ia32_type.h:274
struct Cr4::@3 fields
unsigned reserved2
[12] Always 0
Definition: ia32_type.h:206
ULONG64 global
[8]
Definition: ia32_type.h:416
ULONG64 reserved2
[48:51]
Definition: ia32_type.h:1496
ULONG writable
Definition: ia32_type.h:452