windows-native 1.0.44

Windows Native Undocumented API for Rust Language 🔥
use crate::bitfield::{BitfieldUnit, UnionField};

pub const GDI_MAX_HANDLE_COUNT: u32 = 65535;
pub const GDI_HANDLE_INDEX_SHIFT: u32 = 0;
pub const GDI_HANDLE_INDEX_BITS: u32 = 16;
pub const GDI_HANDLE_INDEX_MASK: u32 = 65535;
pub const GDI_HANDLE_TYPE_SHIFT: u32 = 16;
pub const GDI_HANDLE_TYPE_BITS: u32 = 5;
pub const GDI_HANDLE_TYPE_MASK: u32 = 31;
pub const GDI_HANDLE_ALTTYPE_SHIFT: u32 = 21;
pub const GDI_HANDLE_ALTTYPE_BITS: u32 = 2;
pub const GDI_HANDLE_ALTTYPE_MASK: u32 = 3;
pub const GDI_HANDLE_STOCK_SHIFT: u32 = 23;
pub const GDI_HANDLE_STOCK_BITS: u32 = 1;
pub const GDI_HANDLE_STOCK_MASK: u32 = 1;
pub const GDI_HANDLE_UNIQUE_SHIFT: u32 = 24;
pub const GDI_HANDLE_UNIQUE_BITS: u32 = 8;
pub const GDI_HANDLE_UNIQUE_MASK: u32 = 255;
pub const GDI_DEF_TYPE: u32 = 0;
pub const GDI_DC_TYPE: u32 = 1;
pub const GDI_DD_DIRECTDRAW_TYPE: u32 = 2;
pub const GDI_DD_SURFACE_TYPE: u32 = 3;
pub const GDI_RGN_TYPE: u32 = 4;
pub const GDI_SURF_TYPE: u32 = 5;
pub const GDI_CLIENTOBJ_TYPE: u32 = 6;
pub const GDI_PATH_TYPE: u32 = 7;
pub const GDI_PAL_TYPE: u32 = 8;
pub const GDI_ICMLCS_TYPE: u32 = 9;
pub const GDI_LFONT_TYPE: u32 = 10;
pub const GDI_RFONT_TYPE: u32 = 11;
pub const GDI_PFE_TYPE: u32 = 12;
pub const GDI_PFT_TYPE: u32 = 13;
pub const GDI_ICMCXF_TYPE: u32 = 14;
pub const GDI_ICMDLL_TYPE: u32 = 15;
pub const GDI_BRUSH_TYPE: u32 = 16;
pub const GDI_PFF_TYPE: u32 = 17;
pub const GDI_CACHE_TYPE: u32 = 18;
pub const GDI_SPACE_TYPE: u32 = 19;
pub const GDI_DBRUSH_TYPE: u32 = 20;
pub const GDI_META_TYPE: u32 = 21;
pub const GDI_EFSTATE_TYPE: u32 = 22;
pub const GDI_BMFD_TYPE: u32 = 23;
pub const GDI_VTFD_TYPE: u32 = 24;
pub const GDI_TTFD_TYPE: u32 = 25;
pub const GDI_RC_TYPE: u32 = 26;
pub const GDI_TEMP_TYPE: u32 = 27;
pub const GDI_DRVOBJ_TYPE: u32 = 28;
pub const GDI_DCIOBJ_TYPE: u32 = 29;
pub const GDI_SPOOL_TYPE: u32 = 30;
pub const GDI_ALTTYPE_1: u32 = 2097152;
pub const GDI_ALTTYPE_2: u32 = 4194304;
pub const GDI_ALTTYPE_3: u32 = 6291456;
pub const GDI_CLIENT_BITMAP_TYPE: u32 = 327680;
pub const GDI_CLIENT_BRUSH_TYPE: u32 = 1048576;
pub const GDI_CLIENT_CLIENTOBJ_TYPE: u32 = 393216;
pub const GDI_CLIENT_DC_TYPE: u32 = 65536;
pub const GDI_CLIENT_FONT_TYPE: u32 = 655360;
pub const GDI_CLIENT_PALETTE_TYPE: u32 = 524288;
pub const GDI_CLIENT_REGION_TYPE: u32 = 262144;
pub const GDI_CLIENT_ALTDC_TYPE: u32 = 2162688;
pub const GDI_CLIENT_DIBSECTION_TYPE: u32 = 2424832;
pub const GDI_CLIENT_EXTPEN_TYPE: u32 = 5242880;
pub const GDI_CLIENT_METADC16_TYPE: u32 = 6684672;
pub const GDI_CLIENT_METAFILE_TYPE: u32 = 4587520;
pub const GDI_CLIENT_METAFILE16_TYPE: u32 = 2490368;
pub const GDI_CLIENT_PEN_TYPE: u32 = 3145728;

#[repr(C)]
pub struct GDI_HANDLE_ENTRY {
    pub Anonymous1: GDI_HANDLE_ENTRY_1,
    pub Owner: GDI_HANDLE_ENTRY_2,
    pub Unique: u16,
    pub Type: u8,
    pub Flags: u8,
    pub UserPointer: *mut std::ffi::c_void,
}

#[repr(C)]
pub struct GDI_HANDLE_ENTRY_1 {
    pub Object: UnionField<*mut std::ffi::c_void>,
    pub NextFree: UnionField<*mut std::ffi::c_void>,
    pub union_field: u64,
}

impl Default for GDI_HANDLE_ENTRY_1 {
    fn default() -> Self {
        unsafe { std::mem::zeroed() }
    }
}

impl std::fmt::Debug for GDI_HANDLE_ENTRY_1 {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "GDI_HANDLE_ENTRY_1 {{ union }}")
    }
}

#[repr(C)]
pub struct GDI_HANDLE_ENTRY_2 {
    pub Anonymous1: UnionField<GDI_HANDLE_ENTRY_2_1>,
    pub Value: UnionField<u32>,
    pub union_field: u32,
}

#[repr(C)]
pub struct GDI_HANDLE_ENTRY_2_1 {
    pub ProcessId: u16,
    _bitfield_align_1: [u16; 0],
    _bitfield_1: BitfieldUnit<[u8; 2]>,
}

impl Default for GDI_HANDLE_ENTRY_2_1 {
    fn default() -> Self {
        unsafe { std::mem::zeroed() }
    }
}

impl std::fmt::Debug for GDI_HANDLE_ENTRY_2_1 {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "GDI_HANDLE_ENTRY_2_1 {{ Lock : {:?}, Count : {:?} }}",
            self.Lock(),
            self.Count()
        )
    }
}

impl GDI_HANDLE_ENTRY_2_1 {
    #[inline]
    pub fn Lock(&self) -> u16 {
        self._bitfield_1.get(0usize, 1u8) as u16
    }

    #[inline]
    pub fn set_Lock(&mut self, val: u16) {
        self._bitfield_1.set(0usize, 1u8, val as u64)
    }

    #[inline]
    pub fn Count(&self) -> u16 {
        self._bitfield_1.get(1usize, 15u8) as u16
    }

    #[inline]
    pub fn set_Count(&mut self, val: u16) {
        self._bitfield_1.set(1usize, 15u8, val as u64)
    }

    #[inline]
    pub fn new_bitfield_1(Lock: u16, Count: u16) -> BitfieldUnit<[u8; 2]> {
        let mut bitfield_unit: BitfieldUnit<[u8; 2]> = Default::default();

        bitfield_unit.set(0usize, 1u8, Lock as u64);

        bitfield_unit.set(1usize, 15u8, Count as u64);

        bitfield_unit
    }
}

impl Default for GDI_HANDLE_ENTRY_2 {
    fn default() -> Self {
        unsafe { std::mem::zeroed() }
    }
}

impl std::fmt::Debug for GDI_HANDLE_ENTRY_2 {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "GDI_HANDLE_ENTRY_2 {{ union }}")
    }
}

impl Default for GDI_HANDLE_ENTRY {
    fn default() -> Self {
        unsafe { std::mem::zeroed() }
    }
}

impl std::fmt::Debug for GDI_HANDLE_ENTRY {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "GDI_HANDLE_ENTRY {{ Anonymous1: {:?}, Owner: {:?} }}",
            self.Anonymous1, self.Owner
        )
    }
}

#[repr(C)]
pub struct GDI_SHARED_MEMORY {
    pub Handles: [GDI_HANDLE_ENTRY; 65535],
}

impl Default for GDI_SHARED_MEMORY {
    fn default() -> Self {
        unsafe { std::mem::zeroed() }
    }
}

impl std::fmt::Debug for GDI_SHARED_MEMORY {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "GDI_SHARED_MEMORY {{ Handles: {:?} }}", self.Handles)
    }
}