#
[API Reference](https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-process_mitigation_image_load_policy)
Example:
```rust
use win_mitigations::image_load::ImageLoadPolicy;
fn main() -> Result<(), windows::core::Error> {
ImageLoadPolicy::new()
.set_no_remote_images(true)
.build()?;
Ok(())
}
```
"]
#![cfg(windows)]
#[derive(Clone, Copy)]
pub struct ImageLoadPolicy {
policy: windows::Win32::System::SystemServices::PROCESS_MITIGATION_IMAGE_LOAD_POLICY,
}
impl ImageLoadPolicy {
#[must_use]
pub fn new() -> Self {
ImageLoadPolicy { policy: windows::Win32::System::SystemServices::PROCESS_MITIGATION_IMAGE_LOAD_POLICY::default() }
}
pub fn build(self) -> Result<(), windows::core::Error> {
crate::set_process_mitigation_policy(
windows::Win32::System::Threading::ProcessImageLoadPolicy,
&self.policy,
)
}
#[allow(clippy::missing_safety_doc)]
pub fn set_no_remote_images(&mut self, status: bool) -> &mut Self {
unsafe { self.policy.Anonymous.Flags |= u32::from(status) };
self
}
#[allow(clippy::missing_safety_doc)]
pub fn set_no_low_mandatory_label_images(&mut self, status: bool) -> &mut Self {
unsafe { self.policy.Anonymous.Flags |= u32::from(status) << 1 };
self
}
#[allow(clippy::missing_safety_doc)]
pub fn set_prefer_system32_images(&mut self, status: bool) -> &mut Self {
unsafe { self.policy.Anonymous.Flags |= u32::from(status) << 2 };
self
}
#[allow(clippy::missing_safety_doc)]
pub fn set_audit_no_remote_images(&mut self, status: bool) -> &mut Self {
unsafe { self.policy.Anonymous.Flags |= u32::from(status) << 3 };
self
}
#[allow(clippy::missing_safety_doc)]
pub fn set_audit_no_low_mandatory_label_images(&mut self, status: bool) -> &mut Self {
unsafe { self.policy.Anonymous.Flags |= u32::from(status) << 4 };
self
}
pub unsafe fn custom_set(&mut self, flag: u32, status: bool) -> &mut Self {
unsafe { self.policy.Anonymous.Flags |= u32::from(status) << flag };
self
}
}
impl Default for ImageLoadPolicy {
fn default() -> Self {
Self::new()
}
}