LCOV - code coverage report
Current view: top level - src/pe - load_configuration.rs (source / functions) Coverage Total Hit
Test: lief.lcov Lines: 43.5 % 1135 494
Test Date: 2024-11-30:00:00:00 Functions: 20.1 % 657 132

            Line data    Source code
       1              : use std::marker::PhantomData;
       2              : use crate::common::FromFFI;
       3              : use crate::pe::code_integrity::CodeIntegrity;
       4              : use lief_ffi as ffi;
       5              : 
       6           50 : #[derive(Debug)]
       7              : pub enum LoadConfiguration<'a> {
       8              :     Base(Base<'a>),
       9              :     V0(LoadConfigV0<'a>),
      10              :     V1(LoadConfigV1<'a>),
      11              :     V2(LoadConfigV2<'a>),
      12              :     V3(LoadConfigV3<'a>),
      13              :     V4(LoadConfigV4<'a>),
      14              :     V5(LoadConfigV5<'a>),
      15              :     V6(LoadConfigV6<'a>),
      16              :     V7(LoadConfigV7<'a>),
      17              :     V8(LoadConfigV8<'a>),
      18              :     V9(LoadConfigV9<'a>),
      19              :     V10(LoadConfigV10<'a>),
      20              :     V11(LoadConfigV11<'a>),
      21              : }
      22              : 
      23              : 
      24              : impl<'a> FromFFI<ffi::PE_LoadConfiguration> for LoadConfiguration<'a> {
      25           50 :     fn from_ffi(ffi_entry: cxx::UniquePtr<ffi::PE_LoadConfiguration>) -> Self {
      26           50 :         unsafe {
      27           50 :             let config_ref = ffi_entry.as_ref().unwrap();
      28           50 : 
      29           50 :             if ffi::PE_LoadConfigurationV0::classof(config_ref) {
      30            0 :                 let raw = {
      31            0 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
      32            0 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV0>;
      33            0 :                     std::mem::transmute::<From, To>(ffi_entry)
      34            0 :                 };
      35            0 :                 LoadConfiguration::V0(LoadConfigV0::from_ffi(raw))
      36           50 :             } else if ffi::PE_LoadConfigurationV1::classof(config_ref) {
      37            0 :                 let raw = {
      38            0 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
      39            0 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV1>;
      40            0 :                     std::mem::transmute::<From, To>(ffi_entry)
      41            0 :                 };
      42            0 :                 LoadConfiguration::V1(LoadConfigV1::from_ffi(raw))
      43           50 :             } else if ffi::PE_LoadConfigurationV2::classof(config_ref) {
      44            0 :                 let raw = {
      45            0 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
      46            0 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV2>;
      47            0 :                     std::mem::transmute::<From, To>(ffi_entry)
      48            0 :                 };
      49            0 :                 LoadConfiguration::V2(LoadConfigV2::from_ffi(raw))
      50           50 :             } else if ffi::PE_LoadConfigurationV3::classof(config_ref) {
      51            0 :                 let raw = {
      52            0 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
      53            0 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV3>;
      54            0 :                     std::mem::transmute::<From, To>(ffi_entry)
      55            0 :                 };
      56            0 :                 LoadConfiguration::V3(LoadConfigV3::from_ffi(raw))
      57           50 :             } else if ffi::PE_LoadConfigurationV4::classof(config_ref) {
      58            0 :                 let raw = {
      59            0 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
      60            0 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV4>;
      61            0 :                     std::mem::transmute::<From, To>(ffi_entry)
      62            0 :                 };
      63            0 :                 LoadConfiguration::V4(LoadConfigV4::from_ffi(raw))
      64           50 :             } else if ffi::PE_LoadConfigurationV5::classof(config_ref) {
      65            0 :                 let raw = {
      66            0 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
      67            0 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV5>;
      68            0 :                     std::mem::transmute::<From, To>(ffi_entry)
      69            0 :                 };
      70            0 :                 LoadConfiguration::V5(LoadConfigV5::from_ffi(raw))
      71           50 :             } else if ffi::PE_LoadConfigurationV6::classof(config_ref) {
      72            0 :                 let raw = {
      73            0 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
      74            0 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV6>;
      75            0 :                     std::mem::transmute::<From, To>(ffi_entry)
      76            0 :                 };
      77            0 :                 LoadConfiguration::V6(LoadConfigV6::from_ffi(raw))
      78           50 :             } else if ffi::PE_LoadConfigurationV7::classof(config_ref) {
      79           10 :                 let raw = {
      80           10 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
      81           10 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV7>;
      82           10 :                     std::mem::transmute::<From, To>(ffi_entry)
      83           10 :                 };
      84           10 :                 LoadConfiguration::V7(LoadConfigV7::from_ffi(raw))
      85           40 :             } else if ffi::PE_LoadConfigurationV8::classof(config_ref) {
      86            0 :                 let raw = {
      87            0 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
      88            0 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV8>;
      89            0 :                     std::mem::transmute::<From, To>(ffi_entry)
      90            0 :                 };
      91            0 :                 LoadConfiguration::V8(LoadConfigV8::from_ffi(raw))
      92           40 :             } else if ffi::PE_LoadConfigurationV9::classof(config_ref) {
      93            0 :                 let raw = {
      94            0 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
      95            0 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV9>;
      96            0 :                     std::mem::transmute::<From, To>(ffi_entry)
      97            0 :                 };
      98            0 :                 LoadConfiguration::V9(LoadConfigV9::from_ffi(raw))
      99           40 :             } else if ffi::PE_LoadConfigurationV10::classof(config_ref) {
     100            0 :                 let raw = {
     101            0 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
     102            0 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV10>;
     103            0 :                     std::mem::transmute::<From, To>(ffi_entry)
     104            0 :                 };
     105            0 :                 LoadConfiguration::V10(LoadConfigV10::from_ffi(raw))
     106           40 :             } else if ffi::PE_LoadConfigurationV11::classof(config_ref) {
     107           40 :                 let raw = {
     108           40 :                     type From = cxx::UniquePtr<ffi::PE_LoadConfiguration>;
     109           40 :                     type To = cxx::UniquePtr<ffi::PE_LoadConfigurationV11>;
     110           40 :                     std::mem::transmute::<From, To>(ffi_entry)
     111           40 :                 };
     112           40 :                 LoadConfiguration::V11(LoadConfigV11::from_ffi(raw))
     113              :             } else {
     114            0 :                 LoadConfiguration::Base(Base::from_ffi(ffi_entry))
     115              :             }
     116              :         }
     117           50 :     }
     118              : }
     119              : 
     120              : pub struct Base<'a> {
     121              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfiguration>,
     122              :     _owner: PhantomData<&'a ffi::PE_Binary>,
     123              : }
     124              : 
     125              : impl std::fmt::Debug for Base<'_> {
     126            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     127            0 :         let base = self as &dyn AsBase;
     128            0 :         f.write_str(format!("{base:?}").as_str())
     129            0 :     }
     130              : }
     131              : 
     132              : impl std::fmt::Debug for &dyn AsBase {
     133           50 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     134           50 :         f.debug_struct("Base")
     135           50 :             .field("characteristics", &self.characteristics())
     136           50 :             .field("timedatestamp", &self.timedatestamp())
     137           50 :             .field("major_version", &self.major_version())
     138           50 :             .field("minor_version", &self.minor_version())
     139           50 :             .field("global_flags_clear", &self.global_flags_clear())
     140           50 :             .field("global_flags_set", &self.global_flags_set())
     141           50 :             .field("critical_section_default_timeout", &self.critical_section_default_timeout())
     142           50 :             .field("decommit_free_block_threshold", &self.decommit_free_block_threshold())
     143           50 :             .field("decommit_total_free_threshold", &self.decommit_total_free_threshold())
     144           50 :             .field("lock_prefix_table", &self.lock_prefix_table())
     145           50 :             .field("maximum_allocation_size", &self.maximum_allocation_size())
     146           50 :             .field("virtual_memory_threshold", &self.virtual_memory_threshold())
     147           50 :             .field("process_affinity_mask", &self.process_affinity_mask())
     148           50 :             .field("process_heap_flags", &self.process_heap_flags())
     149           50 :             .field("csd_version", &self.csd_version())
     150           50 :             .field("reserved1", &self.reserved1())
     151           50 :             .field("dependent_load_flags", &self.dependent_load_flags())
     152           50 :             .field("editlist", &self.editlist())
     153           50 :             .field("security_cookie", &self.security_cookie())
     154           50 :             .finish()
     155           50 :     }
     156              : }
     157              : 
     158              : impl<'a> FromFFI<ffi::PE_LoadConfiguration> for Base<'a> {
     159            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfiguration>) -> Self {
     160            0 :         Self {
     161            0 :             ptr,
     162            0 :             _owner: PhantomData,
     163            0 :         }
     164            0 :     }
     165              : }
     166              : 
     167              : pub trait AsBase {
     168              :     #[doc(hidden)]
     169              :     fn as_base(&self) -> &ffi::PE_LoadConfiguration;
     170              : 
     171            5 :     fn characteristics(&self) -> u32 {
     172            5 :         self.as_base().characteristics()
     173            5 :     }
     174              : 
     175            0 :     fn size(&self) -> u32 {
     176            0 :         self.as_base().size()
     177            0 :     }
     178              : 
     179            5 :     fn timedatestamp(&self) -> u32 {
     180            5 :         self.as_base().timedatestamp()
     181            5 :     }
     182              : 
     183            5 :     fn major_version(&self) -> u32 {
     184            5 :         self.as_base().major_version()
     185            5 :     }
     186              : 
     187            5 :     fn minor_version(&self) -> u32 {
     188            5 :         self.as_base().minor_version()
     189            5 :     }
     190              : 
     191            5 :     fn global_flags_clear(&self) -> u32 {
     192            5 :         self.as_base().global_flags_clear()
     193            5 :     }
     194              : 
     195            5 :     fn global_flags_set(&self) -> u32 {
     196            5 :         self.as_base().global_flags_set()
     197            5 :     }
     198              : 
     199            5 :     fn critical_section_default_timeout(&self) -> u32 {
     200            5 :         self.as_base().critical_section_default_timeout()
     201            5 :     }
     202              : 
     203            5 :     fn decommit_free_block_threshold(&self) -> u64 {
     204            5 :         self.as_base().decommit_free_block_threshold()
     205            5 :     }
     206              : 
     207            5 :     fn decommit_total_free_threshold(&self) -> u64 {
     208            5 :         self.as_base().decommit_total_free_threshold()
     209            5 :     }
     210              : 
     211            5 :     fn lock_prefix_table(&self) -> u64 {
     212            5 :         self.as_base().lock_prefix_table()
     213            5 :     }
     214              : 
     215            5 :     fn maximum_allocation_size(&self) -> u64 {
     216            5 :         self.as_base().maximum_allocation_size()
     217            5 :     }
     218              : 
     219            5 :     fn virtual_memory_threshold(&self) -> u64 {
     220            5 :         self.as_base().virtual_memory_threshold()
     221            5 :     }
     222              : 
     223            5 :     fn process_affinity_mask(&self) -> u64 {
     224            5 :         self.as_base().process_affinity_mask()
     225            5 :     }
     226              : 
     227            5 :     fn process_heap_flags(&self) -> u32 {
     228            5 :         self.as_base().process_heap_flags()
     229            5 :     }
     230              : 
     231            5 :     fn csd_version(&self) -> u16 {
     232            5 :         self.as_base().csd_version()
     233            5 :     }
     234              : 
     235            5 :     fn reserved1(&self) -> u16 {
     236            5 :         self.as_base().reserved1()
     237            5 :     }
     238              : 
     239            5 :     fn dependent_load_flags(&self) -> u16 {
     240            5 :         self.as_base().dependent_load_flags()
     241            5 :     }
     242              : 
     243            5 :     fn editlist(&self) -> u32 {
     244            5 :         self.as_base().editlist()
     245            5 :     }
     246              : 
     247            5 :     fn security_cookie(&self) -> u64 {
     248            5 :         self.as_base().security_cookie()
     249            5 :     }
     250              : }
     251              : 
     252              : impl AsBase for Base<'_> {
     253            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
     254            0 :         self.ptr.as_ref().unwrap()
     255            0 :     }
     256              : }
     257              : 
     258              : pub struct LoadConfigV0<'a> {
     259              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV0>,
     260              :     _owner: PhantomData<&'a ffi::PE_Binary>,
     261              : }
     262              : 
     263              : impl std::fmt::Debug for LoadConfigV0<'_> {
     264            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     265            0 :         let base = self as &dyn AsLoadConfigV0;
     266            0 :         f.write_str(format!("{base:?}").as_str())
     267            0 :     }
     268              : }
     269              : 
     270              : impl std::fmt::Debug for &dyn AsLoadConfigV0 {
     271           50 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     272           50 :         f.debug_struct("LoadConfigV0")
     273           50 :             .field("se_handler_table", &self.se_handler_table())
     274           50 :             .field("se_handler_count", &self.se_handler_count())
     275           50 :             .finish()
     276           50 :     }
     277              : }
     278              : 
     279              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV0> for LoadConfigV0<'a> {
     280            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV0>) -> Self {
     281            0 :         Self {
     282            0 :             ptr,
     283            0 :             _owner: PhantomData,
     284            0 :         }
     285            0 :     }
     286              : }
     287              : 
     288              : pub trait AsLoadConfigV0 {
     289              :     #[doc(hidden)]
     290              :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0;
     291              : 
     292            5 :     fn se_handler_table(&self) -> u64 {
     293            5 :         self.as_v0().se_handler_table()
     294            5 :     }
     295              : 
     296            5 :     fn se_handler_count(&self) -> u64 {
     297            5 :         self.as_v0().se_handler_count()
     298            5 :     }
     299              : }
     300              : 
     301              : impl AsBase for LoadConfigV0<'_> {
     302            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
     303            0 :         self.ptr.as_ref().unwrap().as_ref()
     304            0 :     }
     305              : }
     306              : 
     307              : impl AsLoadConfigV0 for LoadConfigV0<'_> {
     308            0 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
     309            0 :         self.ptr.as_ref().unwrap()
     310            0 :     }
     311              : }
     312              : 
     313              : pub struct LoadConfigV1<'a> {
     314              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV1>,
     315              :     _owner: PhantomData<&'a ffi::PE_Binary>,
     316              : }
     317              : 
     318              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV1> for LoadConfigV1<'a> {
     319            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV1>) -> Self {
     320            0 :         Self {
     321            0 :             ptr,
     322            0 :             _owner: PhantomData,
     323            0 :         }
     324            0 :     }
     325              : }
     326              : 
     327              : impl std::fmt::Debug for LoadConfigV1<'_> {
     328            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     329            0 :         let base = self as &dyn AsLoadConfigV1;
     330            0 :         f.write_str(format!("{base:?}").as_str())
     331            0 :     }
     332              : }
     333              : 
     334              : impl std::fmt::Debug for &dyn AsLoadConfigV1 {
     335           50 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     336           50 :         f.debug_struct("LoadConfigV1")
     337           50 :             .field("guard_cf_check_function_pointer", &self.guard_cf_check_function_pointer())
     338           50 :             .field("guard_cf_dispatch_function_pointer", &self.guard_cf_dispatch_function_pointer())
     339           50 :             .field("guard_cf_function_table", &self.guard_cf_function_table())
     340           50 :             .field("guard_cf_function_count", &self.guard_cf_function_count())
     341           50 :             .field("guard_flags", &self.guard_flags())
     342           50 :             .finish()
     343           50 :     }
     344              : }
     345              : 
     346              : pub trait AsLoadConfigV1 {
     347              :     #[doc(hidden)]
     348              :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1;
     349              : 
     350            5 :     fn guard_cf_check_function_pointer(&self) -> u64 {
     351            5 :         self.as_v1().guard_cf_check_function_pointer()
     352            5 :     }
     353              : 
     354            5 :     fn guard_cf_dispatch_function_pointer(&self) -> u64 {
     355            5 :         self.as_v1().guard_cf_dispatch_function_pointer()
     356            5 :     }
     357              : 
     358            5 :     fn guard_cf_function_table(&self) -> u64 {
     359            5 :         self.as_v1().guard_cf_function_table()
     360            5 :     }
     361              : 
     362            5 :     fn guard_cf_function_count(&self) -> u64 {
     363            5 :         self.as_v1().guard_cf_function_count()
     364            5 :     }
     365              : 
     366            5 :     fn guard_flags(&self) -> u32 {
     367            5 :         self.as_v1().guard_flags()
     368            5 :     }
     369              : }
     370              : 
     371              : impl AsBase for LoadConfigV1<'_> {
     372            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
     373            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
     374            0 :     }
     375              : }
     376              : 
     377              : impl AsLoadConfigV0 for LoadConfigV1<'_> {
     378            0 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
     379            0 :         self.ptr.as_ref().unwrap().as_ref()
     380            0 :     }
     381              : }
     382              : 
     383              : impl AsLoadConfigV1 for LoadConfigV1<'_> {
     384            0 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
     385            0 :         self.ptr.as_ref().unwrap()
     386            0 :     }
     387              : }
     388              : 
     389              : pub struct LoadConfigV2<'a> {
     390              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV2>,
     391              :     _owner: PhantomData<&'a ffi::PE_Binary>,
     392              : }
     393              : 
     394              : 
     395              : impl std::fmt::Debug for LoadConfigV2<'_> {
     396            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     397            0 :         let base = self as &dyn AsLoadConfigV2;
     398            0 :         f.write_str(format!("{base:?}").as_str())
     399            0 :     }
     400              : }
     401              : 
     402              : impl std::fmt::Debug for &dyn AsLoadConfigV2 {
     403           50 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     404           50 :         f.debug_struct("LoadConfigV2")
     405           50 :             .field("code_integrity", &self.code_integrity())
     406           50 :             .finish()
     407           50 :     }
     408              : }
     409              : 
     410              : 
     411              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV2> for LoadConfigV2<'a> {
     412            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV2>) -> Self {
     413            0 :         Self {
     414            0 :             ptr,
     415            0 :             _owner: PhantomData,
     416            0 :         }
     417            0 :     }
     418              : }
     419              : 
     420              : 
     421              : pub trait AsLoadConfigV2 {
     422              :     #[doc(hidden)]
     423              :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2;
     424              : 
     425            5 :     fn code_integrity(&self) -> CodeIntegrity {
     426            5 :         CodeIntegrity::from_ffi(self.as_v2().code_integrity())
     427            5 :     }
     428              : }
     429              : 
     430              : impl AsBase for LoadConfigV2<'_> {
     431            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
     432            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref().as_ref()
     433            0 :     }
     434              : }
     435              : 
     436              : impl AsLoadConfigV0 for LoadConfigV2<'_> {
     437            0 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
     438            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
     439            0 :     }
     440              : }
     441              : 
     442              : impl AsLoadConfigV1 for LoadConfigV2<'_> {
     443            0 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
     444            0 :         self.ptr.as_ref().unwrap().as_ref()
     445            0 :     }
     446              : }
     447              : 
     448              : impl AsLoadConfigV2 for LoadConfigV2<'_> {
     449            0 :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2 {
     450            0 :         self.ptr.as_ref().unwrap()
     451            0 :     }
     452              : }
     453              : 
     454              : pub struct LoadConfigV3<'a> {
     455              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV3>,
     456              :     _owner: PhantomData<&'a ffi::PE_Binary>,
     457              : }
     458              : 
     459              : impl std::fmt::Debug for LoadConfigV3<'_> {
     460            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     461            0 :         let base = self as &dyn AsLoadConfigV3;
     462            0 :         f.write_str(format!("{base:?}").as_str())
     463            0 :     }
     464              : }
     465              : 
     466              : 
     467              : impl std::fmt::Debug for &dyn AsLoadConfigV3 {
     468           50 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     469           50 :         f.debug_struct("LoadConfigV3")
     470           50 :             .field("guard_address_taken_iat_entry_table", &self.guard_address_taken_iat_entry_table())
     471           50 :             .field("guard_address_taken_iat_entry_count", &self.guard_address_taken_iat_entry_count())
     472           50 :             .field("guard_long_jump_target_table", &self.guard_long_jump_target_table())
     473           50 :             .field("guard_long_jump_target_count", &self.guard_long_jump_target_count())
     474           50 :             .finish()
     475           50 :     }
     476              : }
     477              : 
     478              : 
     479              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV3> for LoadConfigV3<'a> {
     480            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV3>) -> Self {
     481            0 :         Self {
     482            0 :             ptr,
     483            0 :             _owner: PhantomData,
     484            0 :         }
     485            0 :     }
     486              : }
     487              : 
     488              : 
     489              : pub trait AsLoadConfigV3 {
     490              :     #[doc(hidden)]
     491              :     fn as_v3(&self) -> &ffi::PE_LoadConfigurationV3;
     492              : 
     493            5 :     fn guard_address_taken_iat_entry_table(&self) -> u64 {
     494            5 :         self.as_v3().guard_address_taken_iat_entry_table()
     495            5 :     }
     496              : 
     497            5 :     fn guard_address_taken_iat_entry_count(&self) -> u64 {
     498            5 :         self.as_v3().guard_address_taken_iat_entry_count()
     499            5 :     }
     500              : 
     501            5 :     fn guard_long_jump_target_table(&self) -> u64 {
     502            5 :         self.as_v3().guard_long_jump_target_table()
     503            5 :     }
     504              : 
     505            5 :     fn guard_long_jump_target_count(&self) -> u64 {
     506            5 :         self.as_v3().guard_long_jump_target_count()
     507            5 :     }
     508              : }
     509              : 
     510              : impl AsBase for LoadConfigV3<'_> {
     511            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
     512            0 :         self.ptr
     513            0 :             .as_ref()
     514            0 :             .unwrap()
     515            0 :             .as_ref()
     516            0 :             .as_ref()
     517            0 :             .as_ref()
     518            0 :             .as_ref()
     519            0 :     }
     520              : }
     521              : 
     522              : impl AsLoadConfigV0 for LoadConfigV3<'_> {
     523            0 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
     524            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref().as_ref()
     525            0 :     }
     526              : }
     527              : 
     528              : impl AsLoadConfigV1 for LoadConfigV3<'_> {
     529            0 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
     530            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
     531            0 :     }
     532              : }
     533              : 
     534              : impl AsLoadConfigV2 for LoadConfigV3<'_> {
     535            0 :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2 {
     536            0 :         self.ptr.as_ref().unwrap().as_ref()
     537            0 :     }
     538              : }
     539              : 
     540              : impl AsLoadConfigV3 for LoadConfigV3<'_> {
     541            0 :     fn as_v3(&self) -> &ffi::PE_LoadConfigurationV3 {
     542            0 :         self.ptr.as_ref().unwrap()
     543            0 :     }
     544              : }
     545              : 
     546              : pub struct LoadConfigV4<'a> {
     547              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV4>,
     548              :     _owner: PhantomData<&'a ffi::PE_Binary>,
     549              : }
     550              : 
     551              : impl std::fmt::Debug for LoadConfigV4<'_> {
     552            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     553            0 :         let base = self as &dyn AsLoadConfigV4;
     554            0 :         f.write_str(format!("{base:?}").as_str())
     555            0 :     }
     556              : }
     557              : 
     558              : 
     559              : impl std::fmt::Debug for &dyn AsLoadConfigV4 {
     560           50 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     561           50 :         f.debug_struct("LoadConfigV4")
     562           50 :             .field("dynamic_value_reloc_table", &self.dynamic_value_reloc_table())
     563           50 :             .field("hybrid_metadata_pointer", &self.hybrid_metadata_pointer())
     564           50 :             .finish()
     565           50 :     }
     566              : }
     567              : 
     568              : 
     569              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV4> for LoadConfigV4<'a> {
     570            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV4>) -> Self {
     571            0 :         Self {
     572            0 :             ptr,
     573            0 :             _owner: PhantomData,
     574            0 :         }
     575            0 :     }
     576              : }
     577              : 
     578              : pub trait AsLoadConfigV4 {
     579              :     #[doc(hidden)]
     580              :     fn as_v4(&self) -> &ffi::PE_LoadConfigurationV4;
     581              : 
     582            5 :     fn dynamic_value_reloc_table(&self) -> u64 {
     583            5 :         self.as_v4().dynamic_value_reloc_table()
     584            5 :     }
     585              : 
     586            5 :     fn hybrid_metadata_pointer(&self) -> u64 {
     587            5 :         self.as_v4().hybrid_metadata_pointer()
     588            5 :     }
     589              : }
     590              : 
     591              : impl AsBase for LoadConfigV4<'_> {
     592            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
     593            0 :         self.ptr
     594            0 :             .as_ref()
     595            0 :             .unwrap()
     596            0 :             .as_ref()
     597            0 :             .as_ref()
     598            0 :             .as_ref()
     599            0 :             .as_ref()
     600            0 :             .as_ref()
     601            0 :     }
     602              : }
     603              : 
     604              : impl AsLoadConfigV0 for LoadConfigV4<'_> {
     605            0 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
     606            0 :         self.ptr
     607            0 :             .as_ref()
     608            0 :             .unwrap()
     609            0 :             .as_ref()
     610            0 :             .as_ref()
     611            0 :             .as_ref()
     612            0 :             .as_ref()
     613            0 :     }
     614              : }
     615              : 
     616              : impl AsLoadConfigV1 for LoadConfigV4<'_> {
     617            0 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
     618            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref().as_ref()
     619            0 :     }
     620              : }
     621              : 
     622              : impl AsLoadConfigV2 for LoadConfigV4<'_> {
     623            0 :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2 {
     624            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
     625            0 :     }
     626              : }
     627              : 
     628              : impl AsLoadConfigV3 for LoadConfigV4<'_> {
     629            0 :     fn as_v3(&self) -> &ffi::PE_LoadConfigurationV3 {
     630            0 :         self.ptr.as_ref().unwrap().as_ref()
     631            0 :     }
     632              : }
     633              : 
     634              : impl AsLoadConfigV4 for LoadConfigV4<'_> {
     635            0 :     fn as_v4(&self) -> &ffi::PE_LoadConfigurationV4 {
     636            0 :         self.ptr.as_ref().unwrap()
     637            0 :     }
     638              : }
     639              : 
     640              : pub struct LoadConfigV5<'a> {
     641              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV5>,
     642              :     _owner: PhantomData<&'a ffi::PE_Binary>,
     643              : }
     644              : 
     645              : impl std::fmt::Debug for LoadConfigV5<'_> {
     646            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     647            0 :         let base = self as &dyn AsLoadConfigV5;
     648            0 :         f.write_str(format!("{base:?}").as_str())
     649            0 :     }
     650              : }
     651              : 
     652              : 
     653              : impl std::fmt::Debug for &dyn AsLoadConfigV5 {
     654           50 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     655           50 :         f.debug_struct("LoadConfigV5")
     656           50 :             .field("guard_rf_failure_routine", &self.guard_rf_failure_routine())
     657           50 :             .field("guard_rf_failure_routine_function_pointer", &self.guard_rf_failure_routine_function_pointer())
     658           50 :             .field("dynamic_value_reloctable_offset", &self.dynamic_value_reloctable_offset())
     659           50 :             .field("dynamic_value_reloctable_section", &self.dynamic_value_reloctable_section())
     660           50 :             .field("reserved2", &self.reserved2())
     661           50 :             .finish()
     662           50 :     }
     663              : }
     664              : 
     665              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV5> for LoadConfigV5<'a> {
     666            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV5>) -> Self {
     667            0 :         Self {
     668            0 :             ptr,
     669            0 :             _owner: PhantomData,
     670            0 :         }
     671            0 :     }
     672              : }
     673              : 
     674              : pub trait AsLoadConfigV5 {
     675              :     #[doc(hidden)]
     676              :     fn as_v5(&self) -> &ffi::PE_LoadConfigurationV5;
     677              : 
     678            5 :     fn guard_rf_failure_routine(&self) -> u64 {
     679            5 :         self.as_v5().guard_rf_failure_routine()
     680            5 :     }
     681              : 
     682            5 :     fn guard_rf_failure_routine_function_pointer(&self) -> u64 {
     683            5 :         self.as_v5().guard_rf_failure_routine_function_pointer()
     684            5 :     }
     685              : 
     686            5 :     fn dynamic_value_reloctable_offset(&self) -> u32 {
     687            5 :         self.as_v5().dynamic_value_reloctable_offset()
     688            5 :     }
     689              : 
     690            5 :     fn dynamic_value_reloctable_section(&self) -> u16 {
     691            5 :         self.as_v5().dynamic_value_reloctable_section()
     692            5 :     }
     693              : 
     694            5 :     fn reserved2(&self) -> u16 {
     695            5 :         self.as_v5().reserved2()
     696            5 :     }
     697              : }
     698              : 
     699              : impl AsBase for LoadConfigV5<'_> {
     700            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
     701            0 :         self.ptr
     702            0 :             .as_ref()
     703            0 :             .unwrap()
     704            0 :             .as_ref()
     705            0 :             .as_ref()
     706            0 :             .as_ref()
     707            0 :             .as_ref()
     708            0 :             .as_ref()
     709            0 :             .as_ref()
     710            0 :     }
     711              : }
     712              : 
     713              : impl AsLoadConfigV0 for LoadConfigV5<'_> {
     714            0 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
     715            0 :         self.ptr
     716            0 :             .as_ref()
     717            0 :             .unwrap()
     718            0 :             .as_ref()
     719            0 :             .as_ref()
     720            0 :             .as_ref()
     721            0 :             .as_ref()
     722            0 :             .as_ref()
     723            0 :     }
     724              : }
     725              : 
     726              : impl AsLoadConfigV1 for LoadConfigV5<'_> {
     727            0 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
     728            0 :         self.ptr
     729            0 :             .as_ref()
     730            0 :             .unwrap()
     731            0 :             .as_ref()
     732            0 :             .as_ref()
     733            0 :             .as_ref()
     734            0 :             .as_ref()
     735            0 :     }
     736              : }
     737              : 
     738              : impl AsLoadConfigV2 for LoadConfigV5<'_> {
     739            0 :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2 {
     740            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref().as_ref()
     741            0 :     }
     742              : }
     743              : 
     744              : impl AsLoadConfigV3 for LoadConfigV5<'_> {
     745            0 :     fn as_v3(&self) -> &ffi::PE_LoadConfigurationV3 {
     746            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
     747            0 :     }
     748              : }
     749              : 
     750              : impl AsLoadConfigV4 for LoadConfigV5<'_> {
     751            0 :     fn as_v4(&self) -> &ffi::PE_LoadConfigurationV4 {
     752            0 :         self.ptr.as_ref().unwrap().as_ref()
     753            0 :     }
     754              : }
     755              : 
     756              : impl AsLoadConfigV5 for LoadConfigV5<'_> {
     757            0 :     fn as_v5(&self) -> &ffi::PE_LoadConfigurationV5 {
     758            0 :         self.ptr.as_ref().unwrap()
     759            0 :     }
     760              : }
     761              : 
     762              : pub struct LoadConfigV6<'a> {
     763              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV6>,
     764              :     _owner: PhantomData<&'a ffi::PE_Binary>,
     765              : }
     766              : 
     767              : impl std::fmt::Debug for LoadConfigV6<'_> {
     768            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     769            0 :         let base = self as &dyn AsLoadConfigV6;
     770            0 :         f.write_str(format!("{base:?}").as_str())
     771            0 :     }
     772              : }
     773              : 
     774              : 
     775              : impl std::fmt::Debug for &dyn AsLoadConfigV6 {
     776           50 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     777           50 :         f.debug_struct("LoadConfigV6")
     778           50 :             .field("guard_rf_verify_stackpointer_function_pointer", &self.guard_rf_verify_stackpointer_function_pointer())
     779           50 :             .field("hotpatch_table_offset", &self.hotpatch_table_offset())
     780           50 :             .finish()
     781           50 :     }
     782              : }
     783              : 
     784              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV6> for LoadConfigV6<'a> {
     785            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV6>) -> Self {
     786            0 :         Self {
     787            0 :             ptr,
     788            0 :             _owner: PhantomData,
     789            0 :         }
     790            0 :     }
     791              : }
     792              : 
     793              : pub trait AsLoadConfigV6 {
     794              :     #[doc(hidden)]
     795              :     fn as_v6(&self) -> &ffi::PE_LoadConfigurationV6;
     796              : 
     797            5 :     fn guard_rf_verify_stackpointer_function_pointer(&self) -> u64 {
     798            5 :         self.as_v6().guard_rf_verify_stackpointer_function_pointer()
     799            5 :     }
     800              : 
     801            5 :     fn hotpatch_table_offset(&self) -> u32 {
     802            5 :         self.as_v6().hotpatch_table_offset()
     803            5 :     }
     804              : }
     805              : 
     806              : impl AsBase for LoadConfigV6<'_> {
     807            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
     808            0 :         self.ptr
     809            0 :             .as_ref()
     810            0 :             .unwrap()
     811            0 :             .as_ref()
     812            0 :             .as_ref()
     813            0 :             .as_ref()
     814            0 :             .as_ref()
     815            0 :             .as_ref()
     816            0 :             .as_ref()
     817            0 :             .as_ref()
     818            0 :     }
     819              : }
     820              : 
     821              : impl AsLoadConfigV0 for LoadConfigV6<'_> {
     822            0 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
     823            0 :         self.ptr
     824            0 :             .as_ref()
     825            0 :             .unwrap()
     826            0 :             .as_ref()
     827            0 :             .as_ref()
     828            0 :             .as_ref()
     829            0 :             .as_ref()
     830            0 :             .as_ref()
     831            0 :             .as_ref()
     832            0 :     }
     833              : }
     834              : 
     835              : impl AsLoadConfigV1 for LoadConfigV6<'_> {
     836            0 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
     837            0 :         self.ptr
     838            0 :             .as_ref()
     839            0 :             .unwrap()
     840            0 :             .as_ref()
     841            0 :             .as_ref()
     842            0 :             .as_ref()
     843            0 :             .as_ref()
     844            0 :             .as_ref()
     845            0 :     }
     846              : }
     847              : 
     848              : impl AsLoadConfigV2 for LoadConfigV6<'_> {
     849            0 :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2 {
     850            0 :         self.ptr
     851            0 :             .as_ref()
     852            0 :             .unwrap()
     853            0 :             .as_ref()
     854            0 :             .as_ref()
     855            0 :             .as_ref()
     856            0 :             .as_ref()
     857            0 :     }
     858              : }
     859              : 
     860              : impl AsLoadConfigV3 for LoadConfigV6<'_> {
     861            0 :     fn as_v3(&self) -> &ffi::PE_LoadConfigurationV3 {
     862            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref().as_ref()
     863            0 :     }
     864              : }
     865              : 
     866              : impl AsLoadConfigV4 for LoadConfigV6<'_> {
     867            0 :     fn as_v4(&self) -> &ffi::PE_LoadConfigurationV4 {
     868            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
     869            0 :     }
     870              : }
     871              : 
     872              : impl AsLoadConfigV5 for LoadConfigV6<'_> {
     873            0 :     fn as_v5(&self) -> &ffi::PE_LoadConfigurationV5 {
     874            0 :         self.ptr.as_ref().unwrap().as_ref()
     875            0 :     }
     876              : }
     877              : 
     878              : impl AsLoadConfigV6 for LoadConfigV6<'_> {
     879            0 :     fn as_v6(&self) -> &ffi::PE_LoadConfigurationV6 {
     880            0 :         self.ptr.as_ref().unwrap()
     881            0 :     }
     882              : }
     883              : 
     884              : pub struct LoadConfigV7<'a> {
     885              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV7>,
     886              :     _owner: PhantomData<&'a ffi::PE_Binary>,
     887              : }
     888              : 
     889              : 
     890              : impl std::fmt::Debug for LoadConfigV7<'_> {
     891           20 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     892           20 :         let base = self as &dyn AsLoadConfigV7;
     893           20 :         f.write_str(format!("{base:?}").as_str())
     894           20 :     }
     895              : }
     896              : 
     897              : 
     898              : impl std::fmt::Debug for &dyn AsLoadConfigV7 {
     899           60 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     900           60 :         f.debug_struct("LoadConfigV7")
     901           60 :             .field("reserved3", &self.reserved3())
     902           60 :             .field("addressof_unicode_string", &self.addressof_unicode_string())
     903           60 :             .finish()
     904           60 :     }
     905              : }
     906              : 
     907              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV7> for LoadConfigV7<'a> {
     908           10 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV7>) -> Self {
     909           10 :         Self {
     910           10 :             ptr,
     911           10 :             _owner: PhantomData,
     912           10 :         }
     913           10 :     }
     914              : }
     915              : 
     916              : pub trait AsLoadConfigV7 {
     917              :     #[doc(hidden)]
     918              :     fn as_v7(&self) -> &ffi::PE_LoadConfigurationV7;
     919              : 
     920           24 :     fn reserved3(&self) -> u32 {
     921           24 :         self.as_v7().reserved3()
     922           24 :     }
     923              : 
     924           24 :     fn addressof_unicode_string(&self) -> u64 {
     925           24 :         self.as_v7().addressof_unicode_string()
     926           24 :     }
     927              : }
     928              : 
     929              : impl AsBase for LoadConfigV7<'_> {
     930          190 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
     931          190 :         self.ptr
     932          190 :             .as_ref()
     933          190 :             .unwrap()
     934          190 :             .as_ref()
     935          190 :             .as_ref()
     936          190 :             .as_ref()
     937          190 :             .as_ref()
     938          190 :             .as_ref()
     939          190 :             .as_ref()
     940          190 :             .as_ref()
     941          190 :             .as_ref()
     942          190 :     }
     943              : }
     944              : 
     945              : impl AsLoadConfigV0 for LoadConfigV7<'_> {
     946           20 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
     947           20 :         self.ptr
     948           20 :             .as_ref()
     949           20 :             .unwrap()
     950           20 :             .as_ref()
     951           20 :             .as_ref()
     952           20 :             .as_ref()
     953           20 :             .as_ref()
     954           20 :             .as_ref()
     955           20 :             .as_ref()
     956           20 :             .as_ref()
     957           20 :     }
     958              : }
     959              : 
     960              : impl AsLoadConfigV1 for LoadConfigV7<'_> {
     961           50 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
     962           50 :         self.ptr
     963           50 :             .as_ref()
     964           50 :             .unwrap()
     965           50 :             .as_ref()
     966           50 :             .as_ref()
     967           50 :             .as_ref()
     968           50 :             .as_ref()
     969           50 :             .as_ref()
     970           50 :             .as_ref()
     971           50 :     }
     972              : }
     973              : 
     974              : impl AsLoadConfigV2 for LoadConfigV7<'_> {
     975           10 :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2 {
     976           10 :         self.ptr
     977           10 :             .as_ref()
     978           10 :             .unwrap()
     979           10 :             .as_ref()
     980           10 :             .as_ref()
     981           10 :             .as_ref()
     982           10 :             .as_ref()
     983           10 :             .as_ref()
     984           10 :     }
     985              : }
     986              : 
     987              : impl AsLoadConfigV3 for LoadConfigV7<'_> {
     988           40 :     fn as_v3(&self) -> &ffi::PE_LoadConfigurationV3 {
     989           40 :         self.ptr
     990           40 :             .as_ref()
     991           40 :             .unwrap()
     992           40 :             .as_ref()
     993           40 :             .as_ref()
     994           40 :             .as_ref()
     995           40 :             .as_ref()
     996           40 :     }
     997              : }
     998              : 
     999              : impl AsLoadConfigV4 for LoadConfigV7<'_> {
    1000           20 :     fn as_v4(&self) -> &ffi::PE_LoadConfigurationV4 {
    1001           20 :         self.ptr.as_ref().unwrap().as_ref().as_ref().as_ref()
    1002           20 :     }
    1003              : }
    1004              : 
    1005              : impl AsLoadConfigV5 for LoadConfigV7<'_> {
    1006           50 :     fn as_v5(&self) -> &ffi::PE_LoadConfigurationV5 {
    1007           50 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
    1008           50 :     }
    1009              : }
    1010              : 
    1011              : impl AsLoadConfigV6 for LoadConfigV7<'_> {
    1012           20 :     fn as_v6(&self) -> &ffi::PE_LoadConfigurationV6 {
    1013           20 :         self.ptr.as_ref().unwrap().as_ref()
    1014           20 :     }
    1015              : }
    1016              : 
    1017              : impl AsLoadConfigV7 for LoadConfigV7<'_> {
    1018           40 :     fn as_v7(&self) -> &ffi::PE_LoadConfigurationV7 {
    1019           40 :         self.ptr.as_ref().unwrap()
    1020           40 :     }
    1021              : }
    1022              : 
    1023              : pub struct LoadConfigV8<'a> {
    1024              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV8>,
    1025              :     _owner: PhantomData<&'a ffi::PE_Binary>,
    1026              : }
    1027              : 
    1028              : 
    1029              : impl std::fmt::Debug for LoadConfigV8<'_> {
    1030            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    1031            0 :         let base = self as &dyn AsLoadConfigV8;
    1032            0 :         f.write_str(format!("{base:?}").as_str())
    1033            0 :     }
    1034              : }
    1035              : 
    1036              : 
    1037              : impl std::fmt::Debug for &dyn AsLoadConfigV8 {
    1038           40 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    1039           40 :         f.debug_struct("LoadConfigV8")
    1040           40 :             .field("volatile_metadata_pointer", &self.volatile_metadata_pointer())
    1041           40 :             .finish()
    1042           40 :     }
    1043              : }
    1044              : 
    1045              : 
    1046              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV8> for LoadConfigV8<'a> {
    1047            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV8>) -> Self {
    1048            0 :         Self {
    1049            0 :             ptr,
    1050            0 :             _owner: PhantomData,
    1051            0 :         }
    1052            0 :     }
    1053              : }
    1054              : 
    1055              : pub trait AsLoadConfigV8 {
    1056              :     #[doc(hidden)]
    1057              :     fn as_v8(&self) -> &ffi::PE_LoadConfigurationV8;
    1058              : 
    1059            4 :     fn volatile_metadata_pointer(&self) -> u64 {
    1060            4 :         self.as_v8().volatile_metadata_pointer()
    1061            4 :     }
    1062              : }
    1063              : 
    1064              : impl AsBase for LoadConfigV8<'_> {
    1065            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
    1066            0 :         self.ptr
    1067            0 :             .as_ref()
    1068            0 :             .unwrap()
    1069            0 :             .as_ref()
    1070            0 :             .as_ref()
    1071            0 :             .as_ref()
    1072            0 :             .as_ref()
    1073            0 :             .as_ref()
    1074            0 :             .as_ref()
    1075            0 :             .as_ref()
    1076            0 :             .as_ref()
    1077            0 :             .as_ref()
    1078            0 :     }
    1079              : }
    1080              : 
    1081              : impl AsLoadConfigV0 for LoadConfigV8<'_> {
    1082            0 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
    1083            0 :         self.ptr
    1084            0 :             .as_ref()
    1085            0 :             .unwrap()
    1086            0 :             .as_ref()
    1087            0 :             .as_ref()
    1088            0 :             .as_ref()
    1089            0 :             .as_ref()
    1090            0 :             .as_ref()
    1091            0 :             .as_ref()
    1092            0 :             .as_ref()
    1093            0 :             .as_ref()
    1094            0 :     }
    1095              : }
    1096              : 
    1097              : impl AsLoadConfigV1 for LoadConfigV8<'_> {
    1098            0 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
    1099            0 :         self.ptr
    1100            0 :             .as_ref()
    1101            0 :             .unwrap()
    1102            0 :             .as_ref()
    1103            0 :             .as_ref()
    1104            0 :             .as_ref()
    1105            0 :             .as_ref()
    1106            0 :             .as_ref()
    1107            0 :             .as_ref()
    1108            0 :             .as_ref()
    1109            0 :     }
    1110              : }
    1111              : 
    1112              : impl AsLoadConfigV2 for LoadConfigV8<'_> {
    1113            0 :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2 {
    1114            0 :         self.ptr
    1115            0 :             .as_ref()
    1116            0 :             .unwrap()
    1117            0 :             .as_ref()
    1118            0 :             .as_ref()
    1119            0 :             .as_ref()
    1120            0 :             .as_ref()
    1121            0 :             .as_ref()
    1122            0 :             .as_ref()
    1123            0 :     }
    1124              : }
    1125              : 
    1126              : impl AsLoadConfigV3 for LoadConfigV8<'_> {
    1127            0 :     fn as_v3(&self) -> &ffi::PE_LoadConfigurationV3 {
    1128            0 :         self.ptr
    1129            0 :             .as_ref()
    1130            0 :             .unwrap()
    1131            0 :             .as_ref()
    1132            0 :             .as_ref()
    1133            0 :             .as_ref()
    1134            0 :             .as_ref()
    1135            0 :             .as_ref()
    1136            0 :     }
    1137              : }
    1138              : 
    1139              : impl AsLoadConfigV4 for LoadConfigV8<'_> {
    1140            0 :     fn as_v4(&self) -> &ffi::PE_LoadConfigurationV4 {
    1141            0 :         self.ptr
    1142            0 :             .as_ref()
    1143            0 :             .unwrap()
    1144            0 :             .as_ref()
    1145            0 :             .as_ref()
    1146            0 :             .as_ref()
    1147            0 :             .as_ref()
    1148            0 :     }
    1149              : }
    1150              : 
    1151              : impl AsLoadConfigV5 for LoadConfigV8<'_> {
    1152            0 :     fn as_v5(&self) -> &ffi::PE_LoadConfigurationV5 {
    1153            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref().as_ref()
    1154            0 :     }
    1155              : }
    1156              : 
    1157              : impl AsLoadConfigV6 for LoadConfigV8<'_> {
    1158            0 :     fn as_v6(&self) -> &ffi::PE_LoadConfigurationV6 {
    1159            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
    1160            0 :     }
    1161              : }
    1162              : 
    1163              : impl AsLoadConfigV7 for LoadConfigV8<'_> {
    1164            0 :     fn as_v7(&self) -> &ffi::PE_LoadConfigurationV7 {
    1165            0 :         self.ptr.as_ref().unwrap().as_ref()
    1166            0 :     }
    1167              : }
    1168              : 
    1169              : impl AsLoadConfigV8 for LoadConfigV8<'_> {
    1170            0 :     fn as_v8(&self) -> &ffi::PE_LoadConfigurationV8 {
    1171            0 :         self.ptr.as_ref().unwrap()
    1172            0 :     }
    1173              : }
    1174              : 
    1175              : pub struct LoadConfigV9<'a> {
    1176              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV9>,
    1177              :     _owner: PhantomData<&'a ffi::PE_Binary>,
    1178              : }
    1179              : 
    1180              : impl std::fmt::Debug for LoadConfigV9<'_> {
    1181            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    1182            0 :         let base = self as &dyn AsLoadConfigV9;
    1183            0 :         f.write_str(format!("{base:?}").as_str())
    1184            0 :     }
    1185              : }
    1186              : 
    1187              : 
    1188              : impl std::fmt::Debug for &dyn AsLoadConfigV9 {
    1189           40 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    1190           40 :         f.debug_struct("LoadConfigV9")
    1191           40 :             .field("guard_eh_continuation_table", &self.guard_eh_continuation_table())
    1192           40 :             .field("guard_eh_continuation_count", &self.guard_eh_continuation_count())
    1193           40 :             .finish()
    1194           40 :     }
    1195              : }
    1196              : 
    1197              : 
    1198              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV9> for LoadConfigV9<'a> {
    1199            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV9>) -> Self {
    1200            0 :         Self {
    1201            0 :             ptr,
    1202            0 :             _owner: PhantomData,
    1203            0 :         }
    1204            0 :     }
    1205              : }
    1206              : 
    1207              : pub trait AsLoadConfigV9 {
    1208              :     #[doc(hidden)]
    1209              :     fn as_v9(&self) -> &ffi::PE_LoadConfigurationV9;
    1210              : 
    1211            4 :     fn guard_eh_continuation_table(&self) -> u64 {
    1212            4 :         self.as_v9().guard_eh_continuation_table()
    1213            4 :     }
    1214              : 
    1215            4 :     fn guard_eh_continuation_count(&self) -> u64 {
    1216            4 :         self.as_v9().guard_eh_continuation_count()
    1217            4 :     }
    1218              : }
    1219              : 
    1220              : impl AsBase for LoadConfigV9<'_> {
    1221            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
    1222            0 :         self.ptr
    1223            0 :             .as_ref()
    1224            0 :             .unwrap()
    1225            0 :             .as_ref()
    1226            0 :             .as_ref()
    1227            0 :             .as_ref()
    1228            0 :             .as_ref()
    1229            0 :             .as_ref()
    1230            0 :             .as_ref()
    1231            0 :             .as_ref()
    1232            0 :             .as_ref()
    1233            0 :             .as_ref()
    1234            0 :             .as_ref()
    1235            0 :     }
    1236              : }
    1237              : 
    1238              : impl AsLoadConfigV0 for LoadConfigV9<'_> {
    1239            0 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
    1240            0 :         self.ptr
    1241            0 :             .as_ref()
    1242            0 :             .unwrap()
    1243            0 :             .as_ref()
    1244            0 :             .as_ref()
    1245            0 :             .as_ref()
    1246            0 :             .as_ref()
    1247            0 :             .as_ref()
    1248            0 :             .as_ref()
    1249            0 :             .as_ref()
    1250            0 :             .as_ref()
    1251            0 :             .as_ref()
    1252            0 :     }
    1253              : }
    1254              : 
    1255              : impl AsLoadConfigV1 for LoadConfigV9<'_> {
    1256            0 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
    1257            0 :         self.ptr
    1258            0 :             .as_ref()
    1259            0 :             .unwrap()
    1260            0 :             .as_ref()
    1261            0 :             .as_ref()
    1262            0 :             .as_ref()
    1263            0 :             .as_ref()
    1264            0 :             .as_ref()
    1265            0 :             .as_ref()
    1266            0 :             .as_ref()
    1267            0 :             .as_ref()
    1268            0 :     }
    1269              : }
    1270              : 
    1271              : impl AsLoadConfigV2 for LoadConfigV9<'_> {
    1272            0 :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2 {
    1273            0 :         self.ptr
    1274            0 :             .as_ref()
    1275            0 :             .unwrap()
    1276            0 :             .as_ref()
    1277            0 :             .as_ref()
    1278            0 :             .as_ref()
    1279            0 :             .as_ref()
    1280            0 :             .as_ref()
    1281            0 :             .as_ref()
    1282            0 :             .as_ref()
    1283            0 :     }
    1284              : }
    1285              : 
    1286              : impl AsLoadConfigV3 for LoadConfigV9<'_> {
    1287            0 :     fn as_v3(&self) -> &ffi::PE_LoadConfigurationV3 {
    1288            0 :         self.ptr
    1289            0 :             .as_ref()
    1290            0 :             .unwrap()
    1291            0 :             .as_ref()
    1292            0 :             .as_ref()
    1293            0 :             .as_ref()
    1294            0 :             .as_ref()
    1295            0 :             .as_ref()
    1296            0 :             .as_ref()
    1297            0 :     }
    1298              : }
    1299              : 
    1300              : impl AsLoadConfigV4 for LoadConfigV9<'_> {
    1301            0 :     fn as_v4(&self) -> &ffi::PE_LoadConfigurationV4 {
    1302            0 :         self.ptr
    1303            0 :             .as_ref()
    1304            0 :             .unwrap()
    1305            0 :             .as_ref()
    1306            0 :             .as_ref()
    1307            0 :             .as_ref()
    1308            0 :             .as_ref()
    1309            0 :             .as_ref()
    1310            0 :     }
    1311              : }
    1312              : 
    1313              : impl AsLoadConfigV5 for LoadConfigV9<'_> {
    1314            0 :     fn as_v5(&self) -> &ffi::PE_LoadConfigurationV5 {
    1315            0 :         self.ptr
    1316            0 :             .as_ref()
    1317            0 :             .unwrap()
    1318            0 :             .as_ref()
    1319            0 :             .as_ref()
    1320            0 :             .as_ref()
    1321            0 :             .as_ref()
    1322            0 :     }
    1323              : }
    1324              : 
    1325              : impl AsLoadConfigV6 for LoadConfigV9<'_> {
    1326            0 :     fn as_v6(&self) -> &ffi::PE_LoadConfigurationV6 {
    1327            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref().as_ref()
    1328            0 :     }
    1329              : }
    1330              : 
    1331              : impl AsLoadConfigV7 for LoadConfigV9<'_> {
    1332            0 :     fn as_v7(&self) -> &ffi::PE_LoadConfigurationV7 {
    1333            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
    1334            0 :     }
    1335              : }
    1336              : 
    1337              : impl AsLoadConfigV8 for LoadConfigV9<'_> {
    1338            0 :     fn as_v8(&self) -> &ffi::PE_LoadConfigurationV8 {
    1339            0 :         self.ptr.as_ref().unwrap().as_ref()
    1340            0 :     }
    1341              : }
    1342              : 
    1343              : impl AsLoadConfigV9 for LoadConfigV9<'_> {
    1344            0 :     fn as_v9(&self) -> &ffi::PE_LoadConfigurationV9 {
    1345            0 :         self.ptr.as_ref().unwrap()
    1346            0 :     }
    1347              : }
    1348              : 
    1349              : pub struct LoadConfigV10<'a> {
    1350              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV10>,
    1351              :     _owner: PhantomData<&'a ffi::PE_Binary>,
    1352              : }
    1353              : 
    1354              : impl std::fmt::Debug for LoadConfigV10<'_> {
    1355            0 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    1356            0 :         let base = self as &dyn AsLoadConfigV10;
    1357            0 :         f.write_str(format!("{base:?}").as_str())
    1358            0 :     }
    1359              : }
    1360              : 
    1361              : impl std::fmt::Debug for &dyn AsLoadConfigV10 {
    1362           40 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    1363           40 :         f.debug_struct("LoadConfigV10")
    1364           40 :             .field("guard_xfg_check_function_pointer", &self.guard_xfg_check_function_pointer())
    1365           40 :             .field("guard_xfg_dispatch_function_pointer", &self.guard_xfg_dispatch_function_pointer())
    1366           40 :             .field("guard_xfg_table_dispatch_function_pointer", &self.guard_xfg_table_dispatch_function_pointer())
    1367           40 :             .finish()
    1368           40 :     }
    1369              : }
    1370              : 
    1371              : 
    1372              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV10> for LoadConfigV10<'a> {
    1373            0 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV10>) -> Self {
    1374            0 :         Self {
    1375            0 :             ptr,
    1376            0 :             _owner: PhantomData,
    1377            0 :         }
    1378            0 :     }
    1379              : }
    1380              : 
    1381              : pub trait AsLoadConfigV10 {
    1382              :     #[doc(hidden)]
    1383              :     fn as_v10(&self) -> &ffi::PE_LoadConfigurationV10;
    1384              : 
    1385            4 :     fn guard_xfg_check_function_pointer(&self) -> u64 {
    1386            4 :         self.as_v10().guard_xfg_check_function_pointer()
    1387            4 :     }
    1388              : 
    1389            4 :     fn guard_xfg_dispatch_function_pointer(&self) -> u64 {
    1390            4 :         self.as_v10().guard_xfg_dispatch_function_pointer()
    1391            4 :     }
    1392              : 
    1393            4 :     fn guard_xfg_table_dispatch_function_pointer(&self) -> u64 {
    1394            4 :         self.as_v10().guard_xfg_table_dispatch_function_pointer()
    1395            4 :     }
    1396              : }
    1397              : 
    1398              : impl AsBase for LoadConfigV10<'_> {
    1399            0 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
    1400            0 :         self.ptr
    1401            0 :             .as_ref()
    1402            0 :             .unwrap()
    1403            0 :             .as_ref()
    1404            0 :             .as_ref()
    1405            0 :             .as_ref()
    1406            0 :             .as_ref()
    1407            0 :             .as_ref()
    1408            0 :             .as_ref()
    1409            0 :             .as_ref()
    1410            0 :             .as_ref()
    1411            0 :             .as_ref()
    1412            0 :             .as_ref()
    1413            0 :             .as_ref()
    1414            0 :     }
    1415              : }
    1416              : 
    1417              : impl AsLoadConfigV0 for LoadConfigV10<'_> {
    1418            0 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
    1419            0 :         self.ptr
    1420            0 :             .as_ref()
    1421            0 :             .unwrap()
    1422            0 :             .as_ref()
    1423            0 :             .as_ref()
    1424            0 :             .as_ref()
    1425            0 :             .as_ref()
    1426            0 :             .as_ref()
    1427            0 :             .as_ref()
    1428            0 :             .as_ref()
    1429            0 :             .as_ref()
    1430            0 :             .as_ref()
    1431            0 :             .as_ref()
    1432            0 :     }
    1433              : }
    1434              : 
    1435              : impl AsLoadConfigV1 for LoadConfigV10<'_> {
    1436            0 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
    1437            0 :         self.ptr
    1438            0 :             .as_ref()
    1439            0 :             .unwrap()
    1440            0 :             .as_ref()
    1441            0 :             .as_ref()
    1442            0 :             .as_ref()
    1443            0 :             .as_ref()
    1444            0 :             .as_ref()
    1445            0 :             .as_ref()
    1446            0 :             .as_ref()
    1447            0 :             .as_ref()
    1448            0 :             .as_ref()
    1449            0 :     }
    1450              : }
    1451              : 
    1452              : impl AsLoadConfigV2 for LoadConfigV10<'_> {
    1453            0 :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2 {
    1454            0 :         self.ptr
    1455            0 :             .as_ref()
    1456            0 :             .unwrap()
    1457            0 :             .as_ref()
    1458            0 :             .as_ref()
    1459            0 :             .as_ref()
    1460            0 :             .as_ref()
    1461            0 :             .as_ref()
    1462            0 :             .as_ref()
    1463            0 :             .as_ref()
    1464            0 :             .as_ref()
    1465            0 :     }
    1466              : }
    1467              : 
    1468              : impl AsLoadConfigV3 for LoadConfigV10<'_> {
    1469            0 :     fn as_v3(&self) -> &ffi::PE_LoadConfigurationV3 {
    1470            0 :         self.ptr
    1471            0 :             .as_ref()
    1472            0 :             .unwrap()
    1473            0 :             .as_ref()
    1474            0 :             .as_ref()
    1475            0 :             .as_ref()
    1476            0 :             .as_ref()
    1477            0 :             .as_ref()
    1478            0 :             .as_ref()
    1479            0 :             .as_ref()
    1480            0 :     }
    1481              : }
    1482              : 
    1483              : impl AsLoadConfigV4 for LoadConfigV10<'_> {
    1484            0 :     fn as_v4(&self) -> &ffi::PE_LoadConfigurationV4 {
    1485            0 :         self.ptr
    1486            0 :             .as_ref()
    1487            0 :             .unwrap()
    1488            0 :             .as_ref()
    1489            0 :             .as_ref()
    1490            0 :             .as_ref()
    1491            0 :             .as_ref()
    1492            0 :             .as_ref()
    1493            0 :             .as_ref()
    1494            0 :     }
    1495              : }
    1496              : 
    1497              : impl AsLoadConfigV5 for LoadConfigV10<'_> {
    1498            0 :     fn as_v5(&self) -> &ffi::PE_LoadConfigurationV5 {
    1499            0 :         self.ptr
    1500            0 :             .as_ref()
    1501            0 :             .unwrap()
    1502            0 :             .as_ref()
    1503            0 :             .as_ref()
    1504            0 :             .as_ref()
    1505            0 :             .as_ref()
    1506            0 :             .as_ref()
    1507            0 :     }
    1508              : }
    1509              : 
    1510              : impl AsLoadConfigV6 for LoadConfigV10<'_> {
    1511            0 :     fn as_v6(&self) -> &ffi::PE_LoadConfigurationV6 {
    1512            0 :         self.ptr
    1513            0 :             .as_ref()
    1514            0 :             .unwrap()
    1515            0 :             .as_ref()
    1516            0 :             .as_ref()
    1517            0 :             .as_ref()
    1518            0 :             .as_ref()
    1519            0 :     }
    1520              : }
    1521              : 
    1522              : impl AsLoadConfigV7 for LoadConfigV10<'_> {
    1523            0 :     fn as_v7(&self) -> &ffi::PE_LoadConfigurationV7 {
    1524            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref().as_ref()
    1525            0 :     }
    1526              : }
    1527              : 
    1528              : impl AsLoadConfigV8 for LoadConfigV10<'_> {
    1529            0 :     fn as_v8(&self) -> &ffi::PE_LoadConfigurationV8 {
    1530            0 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
    1531            0 :     }
    1532              : }
    1533              : 
    1534              : impl AsLoadConfigV9 for LoadConfigV10<'_> {
    1535            0 :     fn as_v9(&self) -> &ffi::PE_LoadConfigurationV9 {
    1536            0 :         self.ptr.as_ref().unwrap().as_ref()
    1537            0 :     }
    1538              : }
    1539              : 
    1540              : impl AsLoadConfigV10 for LoadConfigV10<'_> {
    1541            0 :     fn as_v10(&self) -> &ffi::PE_LoadConfigurationV10 {
    1542            0 :         self.ptr.as_ref().unwrap()
    1543            0 :     }
    1544              : }
    1545              : 
    1546              : pub struct LoadConfigV11<'a> {
    1547              :     ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV11>,
    1548              :     _owner: PhantomData<&'a ffi::PE_Binary>,
    1549              : }
    1550              : 
    1551              : impl std::fmt::Debug for LoadConfigV11<'_> {
    1552           80 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    1553           80 :         let base = self as &dyn AsLoadConfigV11;
    1554           80 :         f.write_str(format!("{base:?}").as_str())
    1555           80 :     }
    1556              : }
    1557              : 
    1558              : impl std::fmt::Debug for &dyn AsLoadConfigV11 {
    1559           80 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    1560           80 :         f.debug_struct("LoadConfigV11")
    1561           80 :             .field("cast_guard_os_determined_failure_mode", &self.cast_guard_os_determined_failure_mode())
    1562           80 :             .finish()
    1563           80 :     }
    1564              : }
    1565              : 
    1566              : impl<'a> FromFFI<ffi::PE_LoadConfigurationV11> for LoadConfigV11<'a> {
    1567           40 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::PE_LoadConfigurationV11>) -> Self {
    1568           40 :         Self {
    1569           40 :             ptr,
    1570           40 :             _owner: PhantomData,
    1571           40 :         }
    1572           40 :     }
    1573              : }
    1574              : 
    1575              : pub trait AsLoadConfigV11 {
    1576              :     #[doc(hidden)]
    1577              :     fn as_v11(&self) -> &ffi::PE_LoadConfigurationV11;
    1578              : 
    1579           80 :     fn cast_guard_os_determined_failure_mode(&self) -> u64 {
    1580           80 :         self.as_v11().cast_guard_os_determined_failure_mode()
    1581           80 :     }
    1582              : }
    1583              : 
    1584              : impl AsBase for LoadConfigV11<'_> {
    1585          760 :     fn as_base(&self) -> &ffi::PE_LoadConfiguration {
    1586          760 :         self.ptr
    1587          760 :             .as_ref()
    1588          760 :             .unwrap()
    1589          760 :             .as_ref()
    1590          760 :             .as_ref()
    1591          760 :             .as_ref()
    1592          760 :             .as_ref()
    1593          760 :             .as_ref()
    1594          760 :             .as_ref()
    1595          760 :             .as_ref()
    1596          760 :             .as_ref()
    1597          760 :             .as_ref()
    1598          760 :             .as_ref()
    1599          760 :             .as_ref()
    1600          760 :             .as_ref()
    1601          760 :     }
    1602              : }
    1603              : 
    1604              : impl AsLoadConfigV0 for LoadConfigV11<'_> {
    1605           80 :     fn as_v0(&self) -> &ffi::PE_LoadConfigurationV0 {
    1606           80 :         self.ptr
    1607           80 :             .as_ref()
    1608           80 :             .unwrap()
    1609           80 :             .as_ref()
    1610           80 :             .as_ref()
    1611           80 :             .as_ref()
    1612           80 :             .as_ref()
    1613           80 :             .as_ref()
    1614           80 :             .as_ref()
    1615           80 :             .as_ref()
    1616           80 :             .as_ref()
    1617           80 :             .as_ref()
    1618           80 :             .as_ref()
    1619           80 :             .as_ref()
    1620           80 :     }
    1621              : }
    1622              : 
    1623              : impl AsLoadConfigV1 for LoadConfigV11<'_> {
    1624          200 :     fn as_v1(&self) -> &ffi::PE_LoadConfigurationV1 {
    1625          200 :         self.ptr
    1626          200 :             .as_ref()
    1627          200 :             .unwrap()
    1628          200 :             .as_ref()
    1629          200 :             .as_ref()
    1630          200 :             .as_ref()
    1631          200 :             .as_ref()
    1632          200 :             .as_ref()
    1633          200 :             .as_ref()
    1634          200 :             .as_ref()
    1635          200 :             .as_ref()
    1636          200 :             .as_ref()
    1637          200 :             .as_ref()
    1638          200 :     }
    1639              : }
    1640              : 
    1641              : impl AsLoadConfigV2 for LoadConfigV11<'_> {
    1642           40 :     fn as_v2(&self) -> &ffi::PE_LoadConfigurationV2 {
    1643           40 :         self.ptr
    1644           40 :             .as_ref()
    1645           40 :             .unwrap()
    1646           40 :             .as_ref()
    1647           40 :             .as_ref()
    1648           40 :             .as_ref()
    1649           40 :             .as_ref()
    1650           40 :             .as_ref()
    1651           40 :             .as_ref()
    1652           40 :             .as_ref()
    1653           40 :             .as_ref()
    1654           40 :             .as_ref()
    1655           40 :     }
    1656              : }
    1657              : 
    1658              : impl AsLoadConfigV3 for LoadConfigV11<'_> {
    1659          160 :     fn as_v3(&self) -> &ffi::PE_LoadConfigurationV3 {
    1660          160 :         self.ptr
    1661          160 :             .as_ref()
    1662          160 :             .unwrap()
    1663          160 :             .as_ref()
    1664          160 :             .as_ref()
    1665          160 :             .as_ref()
    1666          160 :             .as_ref()
    1667          160 :             .as_ref()
    1668          160 :             .as_ref()
    1669          160 :             .as_ref()
    1670          160 :             .as_ref()
    1671          160 :     }
    1672              : }
    1673              : 
    1674              : impl AsLoadConfigV4 for LoadConfigV11<'_> {
    1675           80 :     fn as_v4(&self) -> &ffi::PE_LoadConfigurationV4 {
    1676           80 :         self.ptr
    1677           80 :             .as_ref()
    1678           80 :             .unwrap()
    1679           80 :             .as_ref()
    1680           80 :             .as_ref()
    1681           80 :             .as_ref()
    1682           80 :             .as_ref()
    1683           80 :             .as_ref()
    1684           80 :             .as_ref()
    1685           80 :             .as_ref()
    1686           80 :     }
    1687              : }
    1688              : 
    1689              : impl AsLoadConfigV5 for LoadConfigV11<'_> {
    1690          200 :     fn as_v5(&self) -> &ffi::PE_LoadConfigurationV5 {
    1691          200 :         self.ptr
    1692          200 :             .as_ref()
    1693          200 :             .unwrap()
    1694          200 :             .as_ref()
    1695          200 :             .as_ref()
    1696          200 :             .as_ref()
    1697          200 :             .as_ref()
    1698          200 :             .as_ref()
    1699          200 :             .as_ref()
    1700          200 :     }
    1701              : }
    1702              : 
    1703              : impl AsLoadConfigV6 for LoadConfigV11<'_> {
    1704           80 :     fn as_v6(&self) -> &ffi::PE_LoadConfigurationV6 {
    1705           80 :         self.ptr
    1706           80 :             .as_ref()
    1707           80 :             .unwrap()
    1708           80 :             .as_ref()
    1709           80 :             .as_ref()
    1710           80 :             .as_ref()
    1711           80 :             .as_ref()
    1712           80 :             .as_ref()
    1713           80 :     }
    1714              : }
    1715              : 
    1716              : impl AsLoadConfigV7 for LoadConfigV11<'_> {
    1717           80 :     fn as_v7(&self) -> &ffi::PE_LoadConfigurationV7 {
    1718           80 :         self.ptr
    1719           80 :             .as_ref()
    1720           80 :             .unwrap()
    1721           80 :             .as_ref()
    1722           80 :             .as_ref()
    1723           80 :             .as_ref()
    1724           80 :             .as_ref()
    1725           80 :     }
    1726              : }
    1727              : 
    1728              : impl AsLoadConfigV8 for LoadConfigV11<'_> {
    1729           40 :     fn as_v8(&self) -> &ffi::PE_LoadConfigurationV8 {
    1730           40 :         self.ptr.as_ref().unwrap().as_ref().as_ref().as_ref()
    1731           40 :     }
    1732              : }
    1733              : 
    1734              : impl AsLoadConfigV9 for LoadConfigV11<'_> {
    1735           80 :     fn as_v9(&self) -> &ffi::PE_LoadConfigurationV9 {
    1736           80 :         self.ptr.as_ref().unwrap().as_ref().as_ref()
    1737           80 :     }
    1738              : }
    1739              : 
    1740              : impl AsLoadConfigV10 for LoadConfigV11<'_> {
    1741          120 :     fn as_v10(&self) -> &ffi::PE_LoadConfigurationV10 {
    1742          120 :         self.ptr.as_ref().unwrap().as_ref()
    1743          120 :     }
    1744              : }
    1745              : 
    1746              : impl AsLoadConfigV11 for LoadConfigV11<'_> {
    1747           80 :     fn as_v11(&self) -> &ffi::PE_LoadConfigurationV11 {
    1748           80 :         self.ptr.as_ref().unwrap()
    1749           80 :     }
    1750              : }
        

Generated by: LCOV version 2.1-1