//! NOTE: this file is autogenerated, DO NOT MODIFY
//--------------------------------------------------------------------------------
// Section: Constants (113)
//--------------------------------------------------------------------------------
pub const NTDDI_WIN2K = @as(u32, 83886080);
pub const NTDDI_WINXP = @as(u32, 83951616);
pub const NTDDI_WINXPSP2 = @as(u32, 83952128);
pub const NTDDI_WS03SP1 = @as(u32, 84017408);
pub const NTDDI_VISTA = @as(u32, 100663296);
pub const NTDDI_VISTASP1 = @as(u32, 100663552);
pub const NTDDI_WIN7 = @as(u32, 100728832);
pub const NTDDI_WIN8 = @as(u32, 100794368);
pub const NTDDI_WINBLUE = @as(u32, 100859904);
pub const NTDDI_WINTHRESHOLD = @as(u32, 167772160);
pub const SYSTEM_CPU_SET_INFORMATION_PARKED = @as(u32, 1);
pub const SYSTEM_CPU_SET_INFORMATION_ALLOCATED = @as(u32, 2);
pub const SYSTEM_CPU_SET_INFORMATION_ALLOCATED_TO_TARGET_PROCESS = @as(u32, 4);
pub const SYSTEM_CPU_SET_INFORMATION_REALTIME = @as(u32, 8);
pub const _WIN32_WINNT_NT4 = @as(u32, 1024);
pub const _WIN32_WINNT_WIN2K = @as(u32, 1280);
pub const _WIN32_WINNT_WINXP = @as(u32, 1281);
pub const _WIN32_WINNT_WS03 = @as(u32, 1282);
pub const _WIN32_WINNT_WIN6 = @as(u32, 1536);
pub const _WIN32_WINNT_VISTA = @as(u32, 1536);
pub const _WIN32_WINNT_WS08 = @as(u32, 1536);
pub const _WIN32_WINNT_LONGHORN = @as(u32, 1536);
pub const _WIN32_WINNT_WIN7 = @as(u32, 1537);
pub const _WIN32_WINNT_WIN8 = @as(u32, 1538);
pub const _WIN32_WINNT_WINBLUE = @as(u32, 1539);
pub const _WIN32_WINNT_WINTHRESHOLD = @as(u32, 2560);
pub const _WIN32_WINNT_WIN10 = @as(u32, 2560);
pub const _WIN32_IE_IE20 = @as(u32, 512);
pub const _WIN32_IE_IE30 = @as(u32, 768);
pub const _WIN32_IE_IE302 = @as(u32, 770);
pub const _WIN32_IE_IE40 = @as(u32, 1024);
pub const _WIN32_IE_IE401 = @as(u32, 1025);
pub const _WIN32_IE_IE50 = @as(u32, 1280);
pub const _WIN32_IE_IE501 = @as(u32, 1281);
pub const _WIN32_IE_IE55 = @as(u32, 1360);
pub const _WIN32_IE_IE60 = @as(u32, 1536);
pub const _WIN32_IE_IE60SP1 = @as(u32, 1537);
pub const _WIN32_IE_IE60SP2 = @as(u32, 1539);
pub const _WIN32_IE_IE70 = @as(u32, 1792);
pub const _WIN32_IE_IE80 = @as(u32, 2048);
pub const _WIN32_IE_IE90 = @as(u32, 2304);
pub const _WIN32_IE_IE100 = @as(u32, 2560);
pub const _WIN32_IE_IE110 = @as(u32, 2560);
pub const _WIN32_IE_NT4 = @as(u32, 512);
pub const _WIN32_IE_NT4SP1 = @as(u32, 512);
pub const _WIN32_IE_NT4SP2 = @as(u32, 512);
pub const _WIN32_IE_NT4SP3 = @as(u32, 770);
pub const _WIN32_IE_NT4SP4 = @as(u32, 1025);
pub const _WIN32_IE_NT4SP5 = @as(u32, 1025);
pub const _WIN32_IE_NT4SP6 = @as(u32, 1280);
pub const _WIN32_IE_WIN98 = @as(u32, 1025);
pub const _WIN32_IE_WIN98SE = @as(u32, 1280);
pub const _WIN32_IE_WINME = @as(u32, 1360);
pub const _WIN32_IE_WIN2K = @as(u32, 1281);
pub const _WIN32_IE_WIN2KSP1 = @as(u32, 1281);
pub const _WIN32_IE_WIN2KSP2 = @as(u32, 1281);
pub const _WIN32_IE_WIN2KSP3 = @as(u32, 1281);
pub const _WIN32_IE_WIN2KSP4 = @as(u32, 1281);
pub const _WIN32_IE_XP = @as(u32, 1536);
pub const _WIN32_IE_XPSP1 = @as(u32, 1537);
pub const _WIN32_IE_XPSP2 = @as(u32, 1539);
pub const _WIN32_IE_WS03 = @as(u32, 1538);
pub const _WIN32_IE_WS03SP1 = @as(u32, 1539);
pub const _WIN32_IE_WIN6 = @as(u32, 1792);
pub const _WIN32_IE_LONGHORN = @as(u32, 1792);
pub const _WIN32_IE_WIN7 = @as(u32, 2048);
pub const _WIN32_IE_WIN8 = @as(u32, 2560);
pub const _WIN32_IE_WINBLUE = @as(u32, 2560);
pub const _WIN32_IE_WINTHRESHOLD = @as(u32, 2560);
pub const _WIN32_IE_WIN10 = @as(u32, 2560);
pub const NTDDI_WIN4 = @as(u32, 67108864);
pub const NTDDI_WIN2KSP1 = @as(u32, 83886336);
pub const NTDDI_WIN2KSP2 = @as(u32, 83886592);
pub const NTDDI_WIN2KSP3 = @as(u32, 83886848);
pub const NTDDI_WIN2KSP4 = @as(u32, 83887104);
pub const NTDDI_WINXPSP1 = @as(u32, 83951872);
pub const NTDDI_WINXPSP3 = @as(u32, 83952384);
pub const NTDDI_WINXPSP4 = @as(u32, 83952640);
pub const NTDDI_WS03 = @as(u32, 84017152);
pub const NTDDI_WS03SP2 = @as(u32, 84017664);
pub const NTDDI_WS03SP3 = @as(u32, 84017920);
pub const NTDDI_WS03SP4 = @as(u32, 84018176);
pub const NTDDI_WIN6 = @as(u32, 100663296);
pub const NTDDI_WIN6SP1 = @as(u32, 100663552);
pub const NTDDI_WIN6SP2 = @as(u32, 100663808);
pub const NTDDI_WIN6SP3 = @as(u32, 100664064);
pub const NTDDI_WIN6SP4 = @as(u32, 100664320);
pub const NTDDI_VISTASP2 = @as(u32, 100663808);
pub const NTDDI_VISTASP3 = @as(u32, 100664064);
pub const NTDDI_VISTASP4 = @as(u32, 100664320);
pub const NTDDI_LONGHORN = @as(u32, 100663296);
pub const NTDDI_WS08 = @as(u32, 100663552);
pub const NTDDI_WS08SP2 = @as(u32, 100663808);
pub const NTDDI_WS08SP3 = @as(u32, 100664064);
pub const NTDDI_WS08SP4 = @as(u32, 100664320);
pub const NTDDI_WIN10 = @as(u32, 167772160);
pub const NTDDI_WIN10_TH2 = @as(u32, 167772161);
pub const NTDDI_WIN10_RS1 = @as(u32, 167772162);
pub const NTDDI_WIN10_RS2 = @as(u32, 167772163);
pub const NTDDI_WIN10_RS3 = @as(u32, 167772164);
pub const NTDDI_WIN10_RS4 = @as(u32, 167772165);
pub const NTDDI_WIN10_RS5 = @as(u32, 167772166);
pub const NTDDI_WIN10_19H1 = @as(u32, 167772167);
pub const NTDDI_WIN10_VB = @as(u32, 167772168);
pub const NTDDI_WIN10_MN = @as(u32, 167772169);
pub const NTDDI_WIN10_FE = @as(u32, 167772170);
pub const NTDDI_WIN10_CO = @as(u32, 167772171);
pub const WDK_NTDDI_VERSION = @as(u32, 167772171);
pub const OSVERSION_MASK = @as(u32, 4294901760);
pub const SPVERSION_MASK = @as(u32, 65280);
pub const SUBVERSION_MASK = @as(u32, 255);
pub const NTDDI_VERSION = @as(u32, 167772171);
pub const SCEX2_ALT_NETBIOS_NAME = @as(u32, 1);

//--------------------------------------------------------------------------------
// Section: Types (37)
//--------------------------------------------------------------------------------
pub const VER_FLAGS = enum(u32) {
    MINORVERSION = 1,
    MAJORVERSION = 2,
    BUILDNUMBER = 4,
    PLATFORMID = 8,
    SERVICEPACKMINOR = 16,
    SERVICEPACKMAJOR = 32,
    SUITENAME = 64,
    PRODUCT_TYPE = 128,
    _,
    pub fn initFlags(o: struct {
        MINORVERSION: u1 = 0,
        MAJORVERSION: u1 = 0,
        BUILDNUMBER: u1 = 0,
        PLATFORMID: u1 = 0,
        SERVICEPACKMINOR: u1 = 0,
        SERVICEPACKMAJOR: u1 = 0,
        SUITENAME: u1 = 0,
        PRODUCT_TYPE: u1 = 0,
    }) VER_FLAGS {
        return @as(VER_FLAGS, @enumFromInt((if (o.MINORVERSION == 1) @intFromEnum(VER_FLAGS.MINORVERSION) else 0) | (if (o.MAJORVERSION == 1) @intFromEnum(VER_FLAGS.MAJORVERSION) else 0) | (if (o.BUILDNUMBER == 1) @intFromEnum(VER_FLAGS.BUILDNUMBER) else 0) | (if (o.PLATFORMID == 1) @intFromEnum(VER_FLAGS.PLATFORMID) else 0) | (if (o.SERVICEPACKMINOR == 1) @intFromEnum(VER_FLAGS.SERVICEPACKMINOR) else 0) | (if (o.SERVICEPACKMAJOR == 1) @intFromEnum(VER_FLAGS.SERVICEPACKMAJOR) else 0) | (if (o.SUITENAME == 1) @intFromEnum(VER_FLAGS.SUITENAME) else 0) | (if (o.PRODUCT_TYPE == 1) @intFromEnum(VER_FLAGS.PRODUCT_TYPE) else 0)));
    }
};
pub const VER_MINORVERSION = VER_FLAGS.MINORVERSION;
pub const VER_MAJORVERSION = VER_FLAGS.MAJORVERSION;
pub const VER_BUILDNUMBER = VER_FLAGS.BUILDNUMBER;
pub const VER_PLATFORMID = VER_FLAGS.PLATFORMID;
pub const VER_SERVICEPACKMINOR = VER_FLAGS.SERVICEPACKMINOR;
pub const VER_SERVICEPACKMAJOR = VER_FLAGS.SERVICEPACKMAJOR;
pub const VER_SUITENAME = VER_FLAGS.SUITENAME;
pub const VER_PRODUCT_TYPE = VER_FLAGS.PRODUCT_TYPE;

pub const FIRMWARE_TABLE_PROVIDER = enum(u32) {
    ACPI = 1094930505,
    FIRM = 1179210317,
    RSMB = 1381190978,
};
pub const ACPI = FIRMWARE_TABLE_PROVIDER.ACPI;
pub const FIRM = FIRMWARE_TABLE_PROVIDER.FIRM;
pub const RSMB = FIRMWARE_TABLE_PROVIDER.RSMB;

pub const USER_CET_ENVIRONMENT = enum(u32) {
    WIN32_PROCESS = 0,
    SGX2_ENCLAVE = 2,
    VBS_ENCLAVE = 16,
    VBS_BASIC_ENCLAVE = 17,
};
pub const USER_CET_ENVIRONMENT_WIN32_PROCESS = USER_CET_ENVIRONMENT.WIN32_PROCESS;
pub const USER_CET_ENVIRONMENT_SGX2_ENCLAVE = USER_CET_ENVIRONMENT.SGX2_ENCLAVE;
pub const USER_CET_ENVIRONMENT_VBS_ENCLAVE = USER_CET_ENVIRONMENT.VBS_ENCLAVE;
pub const USER_CET_ENVIRONMENT_VBS_BASIC_ENCLAVE = USER_CET_ENVIRONMENT.VBS_BASIC_ENCLAVE;

pub const OS_PRODUCT_TYPE = enum(u32) {
    BUSINESS = 6,
    BUSINESS_N = 16,
    CLUSTER_SERVER = 18,
    CLUSTER_SERVER_V = 64,
    CORE = 101,
    CORE_COUNTRYSPECIFIC = 99,
    CORE_N = 98,
    CORE_SINGLELANGUAGE = 100,
    DATACENTER_EVALUATION_SERVER = 80,
    DATACENTER_A_SERVER_CORE = 145,
    STANDARD_A_SERVER_CORE = 146,
    DATACENTER_SERVER = 8,
    DATACENTER_SERVER_CORE = 12,
    DATACENTER_SERVER_CORE_V = 39,
    DATACENTER_SERVER_V = 37,
    EDUCATION = 121,
    EDUCATION_N = 122,
    ENTERPRISE = 4,
    ENTERPRISE_E = 70,
    ENTERPRISE_EVALUATION = 72,
    ENTERPRISE_N = 27,
    ENTERPRISE_N_EVALUATION = 84,
    ENTERPRISE_S = 125,
    ENTERPRISE_S_EVALUATION = 129,
    ENTERPRISE_S_N = 126,
    ENTERPRISE_S_N_EVALUATION = 130,
    ENTERPRISE_SERVER = 10,
    ENTERPRISE_SERVER_CORE = 14,
    ENTERPRISE_SERVER_CORE_V = 41,
    ENTERPRISE_SERVER_IA64 = 15,
    ENTERPRISE_SERVER_V = 38,
    ESSENTIALBUSINESS_SERVER_ADDL = 60,
    ESSENTIALBUSINESS_SERVER_ADDLSVC = 62,
    ESSENTIALBUSINESS_SERVER_MGMT = 59,
    ESSENTIALBUSINESS_SERVER_MGMTSVC = 61,
    HOME_BASIC = 2,
    HOME_BASIC_E = 67,
    HOME_BASIC_N = 5,
    HOME_PREMIUM = 3,
    HOME_PREMIUM_E = 68,
    HOME_PREMIUM_N = 26,
    HOME_PREMIUM_SERVER = 34,
    HOME_SERVER = 19,
    HYPERV = 42,
    IOTUAP = 123,
    IOTUAPCOMMERCIAL = 131,
    MEDIUMBUSINESS_SERVER_MANAGEMENT = 30,
    MEDIUMBUSINESS_SERVER_MESSAGING = 32,
    MEDIUMBUSINESS_SERVER_SECURITY = 31,
    MOBILE_CORE = 104,
    MOBILE_ENTERPRISE = 133,
    MULTIPOINT_PREMIUM_SERVER = 77,
    MULTIPOINT_STANDARD_SERVER = 76,
    PRO_WORKSTATION = 161,
    PRO_WORKSTATION_N = 162,
    PROFESSIONAL = 48,
    PROFESSIONAL_E = 69,
    PROFESSIONAL_N = 49,
    PROFESSIONAL_WMC = 103,
    SB_SOLUTION_SERVER = 50,
    SB_SOLUTION_SERVER_EM = 54,
    SERVER_FOR_SB_SOLUTIONS = 51,
    SERVER_FOR_SB_SOLUTIONS_EM = 55,
    SERVER_FOR_SMALLBUSINESS = 24,
    SERVER_FOR_SMALLBUSINESS_V = 35,
    SERVER_FOUNDATION = 33,
    SMALLBUSINESS_SERVER = 9,
    SMALLBUSINESS_SERVER_PREMIUM = 25,
    SMALLBUSINESS_SERVER_PREMIUM_CORE = 63,
    SOLUTION_EMBEDDEDSERVER = 56,
    STANDARD_EVALUATION_SERVER = 79,
    STANDARD_SERVER = 7,
    STANDARD_SERVER_CORE_ = 13,
    STANDARD_SERVER_CORE_V = 40,
    STANDARD_SERVER_V = 36,
    STANDARD_SERVER_SOLUTIONS = 52,
    STANDARD_SERVER_SOLUTIONS_CORE = 53,
    STARTER = 11,
    STARTER_E = 66,
    STARTER_N = 47,
    STORAGE_ENTERPRISE_SERVER = 23,
    STORAGE_ENTERPRISE_SERVER_CORE = 46,
    STORAGE_EXPRESS_SERVER = 20,
    STORAGE_EXPRESS_SERVER_CORE = 43,
    STORAGE_STANDARD_EVALUATION_SERVER = 96,
    STORAGE_STANDARD_SERVER = 21,
    STORAGE_STANDARD_SERVER_CORE = 44,
    STORAGE_WORKGROUP_EVALUATION_SERVER = 95,
    STORAGE_WORKGROUP_SERVER = 22,
    STORAGE_WORKGROUP_SERVER_CORE = 45,
    ULTIMATE = 1,
    ULTIMATE_E = 71,
    ULTIMATE_N = 28,
    UNDEFINED = 0,
    WEB_SERVER = 17,
    WEB_SERVER_CORE = 29,
};
pub const PRODUCT_BUSINESS = OS_PRODUCT_TYPE.BUSINESS;
pub const PRODUCT_BUSINESS_N = OS_PRODUCT_TYPE.BUSINESS_N;
pub const PRODUCT_CLUSTER_SERVER = OS_PRODUCT_TYPE.CLUSTER_SERVER;
pub const PRODUCT_CLUSTER_SERVER_V = OS_PRODUCT_TYPE.CLUSTER_SERVER_V;
pub const PRODUCT_CORE = OS_PRODUCT_TYPE.CORE;
pub const PRODUCT_CORE_COUNTRYSPECIFIC = OS_PRODUCT_TYPE.CORE_COUNTRYSPECIFIC;
pub const PRODUCT_CORE_N = OS_PRODUCT_TYPE.CORE_N;
pub const PRODUCT_CORE_SINGLELANGUAGE = OS_PRODUCT_TYPE.CORE_SINGLELANGUAGE;
pub const PRODUCT_DATACENTER_EVALUATION_SERVER = OS_PRODUCT_TYPE.DATACENTER_EVALUATION_SERVER;
pub const PRODUCT_DATACENTER_A_SERVER_CORE = OS_PRODUCT_TYPE.DATACENTER_A_SERVER_CORE;
pub const PRODUCT_STANDARD_A_SERVER_CORE = OS_PRODUCT_TYPE.STANDARD_A_SERVER_CORE;
pub const PRODUCT_DATACENTER_SERVER = OS_PRODUCT_TYPE.DATACENTER_SERVER;
pub const PRODUCT_DATACENTER_SERVER_CORE = OS_PRODUCT_TYPE.DATACENTER_SERVER_CORE;
pub const PRODUCT_DATACENTER_SERVER_CORE_V = OS_PRODUCT_TYPE.DATACENTER_SERVER_CORE_V;
pub const PRODUCT_DATACENTER_SERVER_V = OS_PRODUCT_TYPE.DATACENTER_SERVER_V;
pub const PRODUCT_EDUCATION = OS_PRODUCT_TYPE.EDUCATION;
pub const PRODUCT_EDUCATION_N = OS_PRODUCT_TYPE.EDUCATION_N;
pub const PRODUCT_ENTERPRISE = OS_PRODUCT_TYPE.ENTERPRISE;
pub const PRODUCT_ENTERPRISE_E = OS_PRODUCT_TYPE.ENTERPRISE_E;
pub const PRODUCT_ENTERPRISE_EVALUATION = OS_PRODUCT_TYPE.ENTERPRISE_EVALUATION;
pub const PRODUCT_ENTERPRISE_N = OS_PRODUCT_TYPE.ENTERPRISE_N;
pub const PRODUCT_ENTERPRISE_N_EVALUATION = OS_PRODUCT_TYPE.ENTERPRISE_N_EVALUATION;
pub const PRODUCT_ENTERPRISE_S = OS_PRODUCT_TYPE.ENTERPRISE_S;
pub const PRODUCT_ENTERPRISE_S_EVALUATION = OS_PRODUCT_TYPE.ENTERPRISE_S_EVALUATION;
pub const PRODUCT_ENTERPRISE_S_N = OS_PRODUCT_TYPE.ENTERPRISE_S_N;
pub const PRODUCT_ENTERPRISE_S_N_EVALUATION = OS_PRODUCT_TYPE.ENTERPRISE_S_N_EVALUATION;
pub const PRODUCT_ENTERPRISE_SERVER = OS_PRODUCT_TYPE.ENTERPRISE_SERVER;
pub const PRODUCT_ENTERPRISE_SERVER_CORE = OS_PRODUCT_TYPE.ENTERPRISE_SERVER_CORE;
pub const PRODUCT_ENTERPRISE_SERVER_CORE_V = OS_PRODUCT_TYPE.ENTERPRISE_SERVER_CORE_V;
pub const PRODUCT_ENTERPRISE_SERVER_IA64 = OS_PRODUCT_TYPE.ENTERPRISE_SERVER_IA64;
pub const PRODUCT_ENTERPRISE_SERVER_V = OS_PRODUCT_TYPE.ENTERPRISE_SERVER_V;
pub const PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL = OS_PRODUCT_TYPE.ESSENTIALBUSINESS_SERVER_ADDL;
pub const PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC = OS_PRODUCT_TYPE.ESSENTIALBUSINESS_SERVER_ADDLSVC;
pub const PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT = OS_PRODUCT_TYPE.ESSENTIALBUSINESS_SERVER_MGMT;
pub const PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC = OS_PRODUCT_TYPE.ESSENTIALBUSINESS_SERVER_MGMTSVC;
pub const PRODUCT_HOME_BASIC = OS_PRODUCT_TYPE.HOME_BASIC;
pub const PRODUCT_HOME_BASIC_E = OS_PRODUCT_TYPE.HOME_BASIC_E;
pub const PRODUCT_HOME_BASIC_N = OS_PRODUCT_TYPE.HOME_BASIC_N;
pub const PRODUCT_HOME_PREMIUM = OS_PRODUCT_TYPE.HOME_PREMIUM;
pub const PRODUCT_HOME_PREMIUM_E = OS_PRODUCT_TYPE.HOME_PREMIUM_E;
pub const PRODUCT_HOME_PREMIUM_N = OS_PRODUCT_TYPE.HOME_PREMIUM_N;
pub const PRODUCT_HOME_PREMIUM_SERVER = OS_PRODUCT_TYPE.HOME_PREMIUM_SERVER;
pub const PRODUCT_HOME_SERVER = OS_PRODUCT_TYPE.HOME_SERVER;
pub const PRODUCT_HYPERV = OS_PRODUCT_TYPE.HYPERV;
pub const PRODUCT_IOTUAP = OS_PRODUCT_TYPE.IOTUAP;
pub const PRODUCT_IOTUAPCOMMERCIAL = OS_PRODUCT_TYPE.IOTUAPCOMMERCIAL;
pub const PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT = OS_PRODUCT_TYPE.MEDIUMBUSINESS_SERVER_MANAGEMENT;
pub const PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING = OS_PRODUCT_TYPE.MEDIUMBUSINESS_SERVER_MESSAGING;
pub const PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY = OS_PRODUCT_TYPE.MEDIUMBUSINESS_SERVER_SECURITY;
pub const PRODUCT_MOBILE_CORE = OS_PRODUCT_TYPE.MOBILE_CORE;
pub const PRODUCT_MOBILE_ENTERPRISE = OS_PRODUCT_TYPE.MOBILE_ENTERPRISE;
pub const PRODUCT_MULTIPOINT_PREMIUM_SERVER = OS_PRODUCT_TYPE.MULTIPOINT_PREMIUM_SERVER;
pub const PRODUCT_MULTIPOINT_STANDARD_SERVER = OS_PRODUCT_TYPE.MULTIPOINT_STANDARD_SERVER;
pub const PRODUCT_PRO_WORKSTATION = OS_PRODUCT_TYPE.PRO_WORKSTATION;
pub const PRODUCT_PRO_WORKSTATION_N = OS_PRODUCT_TYPE.PRO_WORKSTATION_N;
pub const PRODUCT_PROFESSIONAL = OS_PRODUCT_TYPE.PROFESSIONAL;
pub const PRODUCT_PROFESSIONAL_E = OS_PRODUCT_TYPE.PROFESSIONAL_E;
pub const PRODUCT_PROFESSIONAL_N = OS_PRODUCT_TYPE.PROFESSIONAL_N;
pub const PRODUCT_PROFESSIONAL_WMC = OS_PRODUCT_TYPE.PROFESSIONAL_WMC;
pub const PRODUCT_SB_SOLUTION_SERVER = OS_PRODUCT_TYPE.SB_SOLUTION_SERVER;
pub const PRODUCT_SB_SOLUTION_SERVER_EM = OS_PRODUCT_TYPE.SB_SOLUTION_SERVER_EM;
pub const PRODUCT_SERVER_FOR_SB_SOLUTIONS = OS_PRODUCT_TYPE.SERVER_FOR_SB_SOLUTIONS;
pub const PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM = OS_PRODUCT_TYPE.SERVER_FOR_SB_SOLUTIONS_EM;
pub const PRODUCT_SERVER_FOR_SMALLBUSINESS = OS_PRODUCT_TYPE.SERVER_FOR_SMALLBUSINESS;
pub const PRODUCT_SERVER_FOR_SMALLBUSINESS_V = OS_PRODUCT_TYPE.SERVER_FOR_SMALLBUSINESS_V;
pub const PRODUCT_SERVER_FOUNDATION = OS_PRODUCT_TYPE.SERVER_FOUNDATION;
pub const PRODUCT_SMALLBUSINESS_SERVER = OS_PRODUCT_TYPE.SMALLBUSINESS_SERVER;
pub const PRODUCT_SMALLBUSINESS_SERVER_PREMIUM = OS_PRODUCT_TYPE.SMALLBUSINESS_SERVER_PREMIUM;
pub const PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE = OS_PRODUCT_TYPE.SMALLBUSINESS_SERVER_PREMIUM_CORE;
pub const PRODUCT_SOLUTION_EMBEDDEDSERVER = OS_PRODUCT_TYPE.SOLUTION_EMBEDDEDSERVER;
pub const PRODUCT_STANDARD_EVALUATION_SERVER = OS_PRODUCT_TYPE.STANDARD_EVALUATION_SERVER;
pub const PRODUCT_STANDARD_SERVER = OS_PRODUCT_TYPE.STANDARD_SERVER;
pub const PRODUCT_STANDARD_SERVER_CORE_ = OS_PRODUCT_TYPE.STANDARD_SERVER_CORE_;
pub const PRODUCT_STANDARD_SERVER_CORE_V = OS_PRODUCT_TYPE.STANDARD_SERVER_CORE_V;
pub const PRODUCT_STANDARD_SERVER_V = OS_PRODUCT_TYPE.STANDARD_SERVER_V;
pub const PRODUCT_STANDARD_SERVER_SOLUTIONS = OS_PRODUCT_TYPE.STANDARD_SERVER_SOLUTIONS;
pub const PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE = OS_PRODUCT_TYPE.STANDARD_SERVER_SOLUTIONS_CORE;
pub const PRODUCT_STARTER = OS_PRODUCT_TYPE.STARTER;
pub const PRODUCT_STARTER_E = OS_PRODUCT_TYPE.STARTER_E;
pub const PRODUCT_STARTER_N = OS_PRODUCT_TYPE.STARTER_N;
pub const PRODUCT_STORAGE_ENTERPRISE_SERVER = OS_PRODUCT_TYPE.STORAGE_ENTERPRISE_SERVER;
pub const PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE = OS_PRODUCT_TYPE.STORAGE_ENTERPRISE_SERVER_CORE;
pub const PRODUCT_STORAGE_EXPRESS_SERVER = OS_PRODUCT_TYPE.STORAGE_EXPRESS_SERVER;
pub const PRODUCT_STORAGE_EXPRESS_SERVER_CORE = OS_PRODUCT_TYPE.STORAGE_EXPRESS_SERVER_CORE;
pub const PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER = OS_PRODUCT_TYPE.STORAGE_STANDARD_EVALUATION_SERVER;
pub const PRODUCT_STORAGE_STANDARD_SERVER = OS_PRODUCT_TYPE.STORAGE_STANDARD_SERVER;
pub const PRODUCT_STORAGE_STANDARD_SERVER_CORE = OS_PRODUCT_TYPE.STORAGE_STANDARD_SERVER_CORE;
pub const PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER = OS_PRODUCT_TYPE.STORAGE_WORKGROUP_EVALUATION_SERVER;
pub const PRODUCT_STORAGE_WORKGROUP_SERVER = OS_PRODUCT_TYPE.STORAGE_WORKGROUP_SERVER;
pub const PRODUCT_STORAGE_WORKGROUP_SERVER_CORE = OS_PRODUCT_TYPE.STORAGE_WORKGROUP_SERVER_CORE;
pub const PRODUCT_ULTIMATE = OS_PRODUCT_TYPE.ULTIMATE;
pub const PRODUCT_ULTIMATE_E = OS_PRODUCT_TYPE.ULTIMATE_E;
pub const PRODUCT_ULTIMATE_N = OS_PRODUCT_TYPE.ULTIMATE_N;
pub const PRODUCT_UNDEFINED = OS_PRODUCT_TYPE.UNDEFINED;
pub const PRODUCT_WEB_SERVER = OS_PRODUCT_TYPE.WEB_SERVER;
pub const PRODUCT_WEB_SERVER_CORE = OS_PRODUCT_TYPE.WEB_SERVER_CORE;

pub const DEVICEFAMILYINFOENUM = enum(u32) {
    UAP = 0,
    WINDOWS_8X = 1,
    WINDOWS_PHONE_8X = 2,
    DESKTOP = 3,
    MOBILE = 4,
    XBOX = 5,
    TEAM = 6,
    IOT = 7,
    IOT_HEADLESS = 8,
    SERVER = 9,
    HOLOGRAPHIC = 10,
    XBOXSRA = 11,
    XBOXERA = 12,
    SERVER_NANO = 13,
    @"8828080" = 14,
    @"7067329" = 15,
    WINDOWS_CORE = 16,
    WINDOWS_CORE_HEADLESS = 17,
    // MAX = 17, this enum value conflicts with WINDOWS_CORE_HEADLESS
};
pub const DEVICEFAMILYINFOENUM_UAP = DEVICEFAMILYINFOENUM.UAP;
pub const DEVICEFAMILYINFOENUM_WINDOWS_8X = DEVICEFAMILYINFOENUM.WINDOWS_8X;
pub const DEVICEFAMILYINFOENUM_WINDOWS_PHONE_8X = DEVICEFAMILYINFOENUM.WINDOWS_PHONE_8X;
pub const DEVICEFAMILYINFOENUM_DESKTOP = DEVICEFAMILYINFOENUM.DESKTOP;
pub const DEVICEFAMILYINFOENUM_MOBILE = DEVICEFAMILYINFOENUM.MOBILE;
pub const DEVICEFAMILYINFOENUM_XBOX = DEVICEFAMILYINFOENUM.XBOX;
pub const DEVICEFAMILYINFOENUM_TEAM = DEVICEFAMILYINFOENUM.TEAM;
pub const DEVICEFAMILYINFOENUM_IOT = DEVICEFAMILYINFOENUM.IOT;
pub const DEVICEFAMILYINFOENUM_IOT_HEADLESS = DEVICEFAMILYINFOENUM.IOT_HEADLESS;
pub const DEVICEFAMILYINFOENUM_SERVER = DEVICEFAMILYINFOENUM.SERVER;
pub const DEVICEFAMILYINFOENUM_HOLOGRAPHIC = DEVICEFAMILYINFOENUM.HOLOGRAPHIC;
pub const DEVICEFAMILYINFOENUM_XBOXSRA = DEVICEFAMILYINFOENUM.XBOXSRA;
pub const DEVICEFAMILYINFOENUM_XBOXERA = DEVICEFAMILYINFOENUM.XBOXERA;
pub const DEVICEFAMILYINFOENUM_SERVER_NANO = DEVICEFAMILYINFOENUM.SERVER_NANO;
pub const DEVICEFAMILYINFOENUM_8828080 = DEVICEFAMILYINFOENUM.@"8828080";
pub const DEVICEFAMILYINFOENUM_7067329 = DEVICEFAMILYINFOENUM.@"7067329";
pub const DEVICEFAMILYINFOENUM_WINDOWS_CORE = DEVICEFAMILYINFOENUM.WINDOWS_CORE;
pub const DEVICEFAMILYINFOENUM_WINDOWS_CORE_HEADLESS = DEVICEFAMILYINFOENUM.WINDOWS_CORE_HEADLESS;
pub const DEVICEFAMILYINFOENUM_MAX = DEVICEFAMILYINFOENUM.WINDOWS_CORE_HEADLESS;

pub const DEVICEFAMILYDEVICEFORM = enum(u32) {
    UNKNOWN = 0,
    PHONE = 1,
    TABLET = 2,
    DESKTOP = 3,
    NOTEBOOK = 4,
    CONVERTIBLE = 5,
    DETACHABLE = 6,
    ALLINONE = 7,
    STICKPC = 8,
    PUCK = 9,
    LARGESCREEN = 10,
    HMD = 11,
    INDUSTRY_HANDHELD = 12,
    INDUSTRY_TABLET = 13,
    BANKING = 14,
    BUILDING_AUTOMATION = 15,
    DIGITAL_SIGNAGE = 16,
    GAMING = 17,
    HOME_AUTOMATION = 18,
    INDUSTRIAL_AUTOMATION = 19,
    KIOSK = 20,
    MAKER_BOARD = 21,
    MEDICAL = 22,
    NETWORKING = 23,
    POINT_OF_SERVICE = 24,
    PRINTING = 25,
    THIN_CLIENT = 26,
    TOY = 27,
    VENDING = 28,
    INDUSTRY_OTHER = 29,
    XBOX_ONE = 30,
    XBOX_ONE_S = 31,
    XBOX_ONE_X = 32,
    XBOX_ONE_X_DEVKIT = 33,
    XBOX_SERIES_X = 34,
    XBOX_SERIES_X_DEVKIT = 35,
    XBOX_RESERVED_00 = 36,
    XBOX_RESERVED_01 = 37,
    XBOX_RESERVED_02 = 38,
    XBOX_RESERVED_03 = 39,
    XBOX_RESERVED_04 = 40,
    XBOX_RESERVED_05 = 41,
    XBOX_RESERVED_06 = 42,
    XBOX_RESERVED_07 = 43,
    XBOX_RESERVED_08 = 44,
    XBOX_RESERVED_09 = 45,
    // MAX = 45, this enum value conflicts with XBOX_RESERVED_09
};
pub const DEVICEFAMILYDEVICEFORM_UNKNOWN = DEVICEFAMILYDEVICEFORM.UNKNOWN;
pub const DEVICEFAMILYDEVICEFORM_PHONE = DEVICEFAMILYDEVICEFORM.PHONE;
pub const DEVICEFAMILYDEVICEFORM_TABLET = DEVICEFAMILYDEVICEFORM.TABLET;
pub const DEVICEFAMILYDEVICEFORM_DESKTOP = DEVICEFAMILYDEVICEFORM.DESKTOP;
pub const DEVICEFAMILYDEVICEFORM_NOTEBOOK = DEVICEFAMILYDEVICEFORM.NOTEBOOK;
pub const DEVICEFAMILYDEVICEFORM_CONVERTIBLE = DEVICEFAMILYDEVICEFORM.CONVERTIBLE;
pub const DEVICEFAMILYDEVICEFORM_DETACHABLE = DEVICEFAMILYDEVICEFORM.DETACHABLE;
pub const DEVICEFAMILYDEVICEFORM_ALLINONE = DEVICEFAMILYDEVICEFORM.ALLINONE;
pub const DEVICEFAMILYDEVICEFORM_STICKPC = DEVICEFAMILYDEVICEFORM.STICKPC;
pub const DEVICEFAMILYDEVICEFORM_PUCK = DEVICEFAMILYDEVICEFORM.PUCK;
pub const DEVICEFAMILYDEVICEFORM_LARGESCREEN = DEVICEFAMILYDEVICEFORM.LARGESCREEN;
pub const DEVICEFAMILYDEVICEFORM_HMD = DEVICEFAMILYDEVICEFORM.HMD;
pub const DEVICEFAMILYDEVICEFORM_INDUSTRY_HANDHELD = DEVICEFAMILYDEVICEFORM.INDUSTRY_HANDHELD;
pub const DEVICEFAMILYDEVICEFORM_INDUSTRY_TABLET = DEVICEFAMILYDEVICEFORM.INDUSTRY_TABLET;
pub const DEVICEFAMILYDEVICEFORM_BANKING = DEVICEFAMILYDEVICEFORM.BANKING;
pub const DEVICEFAMILYDEVICEFORM_BUILDING_AUTOMATION = DEVICEFAMILYDEVICEFORM.BUILDING_AUTOMATION;
pub const DEVICEFAMILYDEVICEFORM_DIGITAL_SIGNAGE = DEVICEFAMILYDEVICEFORM.DIGITAL_SIGNAGE;
pub const DEVICEFAMILYDEVICEFORM_GAMING = DEVICEFAMILYDEVICEFORM.GAMING;
pub const DEVICEFAMILYDEVICEFORM_HOME_AUTOMATION = DEVICEFAMILYDEVICEFORM.HOME_AUTOMATION;
pub const DEVICEFAMILYDEVICEFORM_INDUSTRIAL_AUTOMATION = DEVICEFAMILYDEVICEFORM.INDUSTRIAL_AUTOMATION;
pub const DEVICEFAMILYDEVICEFORM_KIOSK = DEVICEFAMILYDEVICEFORM.KIOSK;
pub const DEVICEFAMILYDEVICEFORM_MAKER_BOARD = DEVICEFAMILYDEVICEFORM.MAKER_BOARD;
pub const DEVICEFAMILYDEVICEFORM_MEDICAL = DEVICEFAMILYDEVICEFORM.MEDICAL;
pub const DEVICEFAMILYDEVICEFORM_NETWORKING = DEVICEFAMILYDEVICEFORM.NETWORKING;
pub const DEVICEFAMILYDEVICEFORM_POINT_OF_SERVICE = DEVICEFAMILYDEVICEFORM.POINT_OF_SERVICE;
pub const DEVICEFAMILYDEVICEFORM_PRINTING = DEVICEFAMILYDEVICEFORM.PRINTING;
pub const DEVICEFAMILYDEVICEFORM_THIN_CLIENT = DEVICEFAMILYDEVICEFORM.THIN_CLIENT;
pub const DEVICEFAMILYDEVICEFORM_TOY = DEVICEFAMILYDEVICEFORM.TOY;
pub const DEVICEFAMILYDEVICEFORM_VENDING = DEVICEFAMILYDEVICEFORM.VENDING;
pub const DEVICEFAMILYDEVICEFORM_INDUSTRY_OTHER = DEVICEFAMILYDEVICEFORM.INDUSTRY_OTHER;
pub const DEVICEFAMILYDEVICEFORM_XBOX_ONE = DEVICEFAMILYDEVICEFORM.XBOX_ONE;
pub const DEVICEFAMILYDEVICEFORM_XBOX_ONE_S = DEVICEFAMILYDEVICEFORM.XBOX_ONE_S;
pub const DEVICEFAMILYDEVICEFORM_XBOX_ONE_X = DEVICEFAMILYDEVICEFORM.XBOX_ONE_X;
pub const DEVICEFAMILYDEVICEFORM_XBOX_ONE_X_DEVKIT = DEVICEFAMILYDEVICEFORM.XBOX_ONE_X_DEVKIT;
pub const DEVICEFAMILYDEVICEFORM_XBOX_SERIES_X = DEVICEFAMILYDEVICEFORM.XBOX_SERIES_X;
pub const DEVICEFAMILYDEVICEFORM_XBOX_SERIES_X_DEVKIT = DEVICEFAMILYDEVICEFORM.XBOX_SERIES_X_DEVKIT;
pub const DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_00 = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_00;
pub const DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_01 = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_01;
pub const DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_02 = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_02;
pub const DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_03 = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_03;
pub const DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_04 = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_04;
pub const DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_05 = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_05;
pub const DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_06 = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_06;
pub const DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_07 = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_07;
pub const DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_08 = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_08;
pub const DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_09 = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_09;
pub const DEVICEFAMILYDEVICEFORM_MAX = DEVICEFAMILYDEVICEFORM.XBOX_RESERVED_09;

pub const FIRMWARE_TABLE_ID = u32;

pub const GROUP_AFFINITY = extern struct {
    Mask: usize,
    Group: u16,
    Reserved: [3]u16,
};

pub const SYSTEM_INFO = extern struct {
    Anonymous: extern union {
        dwOemId: u32,
        Anonymous: extern struct {
            wProcessorArchitecture: PROCESSOR_ARCHITECTURE,
            wReserved: u16,
        },
    },
    dwPageSize: u32,
    lpMinimumApplicationAddress: ?*anyopaque,
    lpMaximumApplicationAddress: ?*anyopaque,
    dwActiveProcessorMask: usize,
    dwNumberOfProcessors: u32,
    dwProcessorType: u32,
    dwAllocationGranularity: u32,
    wProcessorLevel: u16,
    wProcessorRevision: u16,
};

pub const MEMORYSTATUSEX = extern struct {
    dwLength: u32,
    dwMemoryLoad: u32,
    ullTotalPhys: u64,
    ullAvailPhys: u64,
    ullTotalPageFile: u64,
    ullAvailPageFile: u64,
    ullTotalVirtual: u64,
    ullAvailVirtual: u64,
    ullAvailExtendedVirtual: u64,
};

pub const COMPUTER_NAME_FORMAT = enum(i32) {
    NetBIOS = 0,
    DnsHostname = 1,
    DnsDomain = 2,
    DnsFullyQualified = 3,
    PhysicalNetBIOS = 4,
    PhysicalDnsHostname = 5,
    PhysicalDnsDomain = 6,
    PhysicalDnsFullyQualified = 7,
    Max = 8,
};
pub const ComputerNameNetBIOS = COMPUTER_NAME_FORMAT.NetBIOS;
pub const ComputerNameDnsHostname = COMPUTER_NAME_FORMAT.DnsHostname;
pub const ComputerNameDnsDomain = COMPUTER_NAME_FORMAT.DnsDomain;
pub const ComputerNameDnsFullyQualified = COMPUTER_NAME_FORMAT.DnsFullyQualified;
pub const ComputerNamePhysicalNetBIOS = COMPUTER_NAME_FORMAT.PhysicalNetBIOS;
pub const ComputerNamePhysicalDnsHostname = COMPUTER_NAME_FORMAT.PhysicalDnsHostname;
pub const ComputerNamePhysicalDnsDomain = COMPUTER_NAME_FORMAT.PhysicalDnsDomain;
pub const ComputerNamePhysicalDnsFullyQualified = COMPUTER_NAME_FORMAT.PhysicalDnsFullyQualified;
pub const ComputerNameMax = COMPUTER_NAME_FORMAT.Max;

pub const FIRMWARE_TYPE = enum(i32) {
    Unknown = 0,
    Bios = 1,
    Uefi = 2,
    Max = 3,
};
pub const FirmwareTypeUnknown = FIRMWARE_TYPE.Unknown;
pub const FirmwareTypeBios = FIRMWARE_TYPE.Bios;
pub const FirmwareTypeUefi = FIRMWARE_TYPE.Uefi;
pub const FirmwareTypeMax = FIRMWARE_TYPE.Max;

pub const LOGICAL_PROCESSOR_RELATIONSHIP = enum(i32) {
    ProcessorCore = 0,
    NumaNode = 1,
    Cache = 2,
    ProcessorPackage = 3,
    Group = 4,
    ProcessorDie = 5,
    NumaNodeEx = 6,
    ProcessorModule = 7,
    All = 65535,
};
pub const RelationProcessorCore = LOGICAL_PROCESSOR_RELATIONSHIP.ProcessorCore;
pub const RelationNumaNode = LOGICAL_PROCESSOR_RELATIONSHIP.NumaNode;
pub const RelationCache = LOGICAL_PROCESSOR_RELATIONSHIP.Cache;
pub const RelationProcessorPackage = LOGICAL_PROCESSOR_RELATIONSHIP.ProcessorPackage;
pub const RelationGroup = LOGICAL_PROCESSOR_RELATIONSHIP.Group;
pub const RelationProcessorDie = LOGICAL_PROCESSOR_RELATIONSHIP.ProcessorDie;
pub const RelationNumaNodeEx = LOGICAL_PROCESSOR_RELATIONSHIP.NumaNodeEx;
pub const RelationProcessorModule = LOGICAL_PROCESSOR_RELATIONSHIP.ProcessorModule;
pub const RelationAll = LOGICAL_PROCESSOR_RELATIONSHIP.All;

pub const PROCESSOR_CACHE_TYPE = enum(i32) {
    Unified = 0,
    Instruction = 1,
    Data = 2,
    Trace = 3,
};
pub const CacheUnified = PROCESSOR_CACHE_TYPE.Unified;
pub const CacheInstruction = PROCESSOR_CACHE_TYPE.Instruction;
pub const CacheData = PROCESSOR_CACHE_TYPE.Data;
pub const CacheTrace = PROCESSOR_CACHE_TYPE.Trace;

pub const CACHE_DESCRIPTOR = extern struct {
    Level: u8,
    Associativity: u8,
    LineSize: u16,
    Size: u32,
    Type: PROCESSOR_CACHE_TYPE,
};

pub const SYSTEM_LOGICAL_PROCESSOR_INFORMATION = extern struct {
    ProcessorMask: usize,
    Relationship: LOGICAL_PROCESSOR_RELATIONSHIP,
    Anonymous: extern union {
        ProcessorCore: extern struct {
            Flags: u8,
        },
        NumaNode: extern struct {
            NodeNumber: u32,
        },
        Cache: CACHE_DESCRIPTOR,
        Reserved: [2]u64,
    },
};

pub const PROCESSOR_RELATIONSHIP = extern struct {
    Flags: u8,
    EfficiencyClass: u8,
    Reserved: [20]u8,
    GroupCount: u16,
    GroupMask: [1]GROUP_AFFINITY,
};

pub const NUMA_NODE_RELATIONSHIP = extern struct {
    NodeNumber: u32,
    Reserved: [18]u8,
    GroupCount: u16,
    Anonymous: extern union {
        GroupMask: GROUP_AFFINITY,
        GroupMasks: [1]GROUP_AFFINITY,
    },
};

pub const CACHE_RELATIONSHIP = extern struct {
    Level: u8,
    Associativity: u8,
    LineSize: u16,
    CacheSize: u32,
    Type: PROCESSOR_CACHE_TYPE,
    Reserved: [18]u8,
    GroupCount: u16,
    Anonymous: extern union {
        GroupMask: GROUP_AFFINITY,
        GroupMasks: [1]GROUP_AFFINITY,
    },
};

pub const PROCESSOR_GROUP_INFO = extern struct {
    MaximumProcessorCount: u8,
    ActiveProcessorCount: u8,
    Reserved: [38]u8,
    ActiveProcessorMask: usize,
};

pub const GROUP_RELATIONSHIP = extern struct {
    MaximumGroupCount: u16,
    ActiveGroupCount: u16,
    Reserved: [20]u8,
    GroupInfo: [1]PROCESSOR_GROUP_INFO,
};

pub const SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX = extern struct {
    Relationship: LOGICAL_PROCESSOR_RELATIONSHIP,
    Size: u32,
    Anonymous: extern union {
        Processor: PROCESSOR_RELATIONSHIP,
        NumaNode: NUMA_NODE_RELATIONSHIP,
        Cache: CACHE_RELATIONSHIP,
        Group: GROUP_RELATIONSHIP,
    },
};

pub const CPU_SET_INFORMATION_TYPE = enum(i32) {
    n = 0,
};
pub const CpuSetInformation = CPU_SET_INFORMATION_TYPE.n;

pub const SYSTEM_CPU_SET_INFORMATION = extern struct {
    Size: u32,
    Type: CPU_SET_INFORMATION_TYPE,
    Anonymous: extern union {
        CpuSet: extern struct {
            Id: u32,
            Group: u16,
            LogicalProcessorIndex: u8,
            CoreIndex: u8,
            LastLevelCacheIndex: u8,
            NumaNodeIndex: u8,
            EfficiencyClass: u8,
            Anonymous1: extern union {
                AllFlags: u8,
                Anonymous: extern struct {
                    _bitfield: u8,
                },
            },
            Anonymous2: extern union {
                Reserved: u32,
                SchedulingClass: u8,
            },
            AllocationTag: u64,
        },
    },
};

pub const SYSTEM_POOL_ZEROING_INFORMATION = extern struct {
    PoolZeroingSupportPresent: BOOLEAN,
};

pub const SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION = extern struct {
    CycleTime: u64,
};

pub const SYSTEM_SUPPORTED_PROCESSOR_ARCHITECTURES_INFORMATION = extern struct {
    _bitfield: u32,
};

pub const OSVERSIONINFOA = extern struct {
    dwOSVersionInfoSize: u32,
    dwMajorVersion: u32,
    dwMinorVersion: u32,
    dwBuildNumber: u32,
    dwPlatformId: u32,
    szCSDVersion: [128]CHAR,
};

pub const OSVERSIONINFOW = extern struct {
    dwOSVersionInfoSize: u32,
    dwMajorVersion: u32,
    dwMinorVersion: u32,
    dwBuildNumber: u32,
    dwPlatformId: u32,
    szCSDVersion: [128]u16,
};

pub const OSVERSIONINFOEXA = extern struct {
    dwOSVersionInfoSize: u32,
    dwMajorVersion: u32,
    dwMinorVersion: u32,
    dwBuildNumber: u32,
    dwPlatformId: u32,
    szCSDVersion: [128]CHAR,
    wServicePackMajor: u16,
    wServicePackMinor: u16,
    wSuiteMask: u16,
    wProductType: u8,
    wReserved: u8,
};

pub const OSVERSIONINFOEXW = extern struct {
    dwOSVersionInfoSize: u32,
    dwMajorVersion: u32,
    dwMinorVersion: u32,
    dwBuildNumber: u32,
    dwPlatformId: u32,
    szCSDVersion: [128]u16,
    wServicePackMajor: u16,
    wServicePackMinor: u16,
    wSuiteMask: u16,
    wProductType: u8,
    wReserved: u8,
};

pub const OS_DEPLOYEMENT_STATE_VALUES = enum(i32) {
    STANDARD = 1,
    COMPACT = 2,
};
pub const OS_DEPLOYMENT_STANDARD = OS_DEPLOYEMENT_STATE_VALUES.STANDARD;
pub const OS_DEPLOYMENT_COMPACT = OS_DEPLOYEMENT_STATE_VALUES.COMPACT;

pub const RTL_SYSTEM_GLOBAL_DATA_ID = enum(i32) {
    Unknown = 0,
    RngSeedVersion = 1,
    InterruptTime = 2,
    TimeZoneBias = 3,
    ImageNumberLow = 4,
    ImageNumberHigh = 5,
    TimeZoneId = 6,
    NtMajorVersion = 7,
    NtMinorVersion = 8,
    SystemExpirationDate = 9,
    KdDebuggerEnabled = 10,
    CyclesPerYield = 11,
    SafeBootMode = 12,
    LastSystemRITEventTickCount = 13,
};
pub const GlobalDataIdUnknown = RTL_SYSTEM_GLOBAL_DATA_ID.Unknown;
pub const GlobalDataIdRngSeedVersion = RTL_SYSTEM_GLOBAL_DATA_ID.RngSeedVersion;
pub const GlobalDataIdInterruptTime = RTL_SYSTEM_GLOBAL_DATA_ID.InterruptTime;
pub const GlobalDataIdTimeZoneBias = RTL_SYSTEM_GLOBAL_DATA_ID.TimeZoneBias;
pub const GlobalDataIdImageNumberLow = RTL_SYSTEM_GLOBAL_DATA_ID.ImageNumberLow;
pub const GlobalDataIdImageNumberHigh = RTL_SYSTEM_GLOBAL_DATA_ID.ImageNumberHigh;
pub const GlobalDataIdTimeZoneId = RTL_SYSTEM_GLOBAL_DATA_ID.TimeZoneId;
pub const GlobalDataIdNtMajorVersion = RTL_SYSTEM_GLOBAL_DATA_ID.NtMajorVersion;
pub const GlobalDataIdNtMinorVersion = RTL_SYSTEM_GLOBAL_DATA_ID.NtMinorVersion;
pub const GlobalDataIdSystemExpirationDate = RTL_SYSTEM_GLOBAL_DATA_ID.SystemExpirationDate;
pub const GlobalDataIdKdDebuggerEnabled = RTL_SYSTEM_GLOBAL_DATA_ID.KdDebuggerEnabled;
pub const GlobalDataIdCyclesPerYield = RTL_SYSTEM_GLOBAL_DATA_ID.CyclesPerYield;
pub const GlobalDataIdSafeBootMode = RTL_SYSTEM_GLOBAL_DATA_ID.SafeBootMode;
pub const GlobalDataIdLastSystemRITEventTickCount = RTL_SYSTEM_GLOBAL_DATA_ID.LastSystemRITEventTickCount;

pub const MEMORYSTATUS = extern struct {
    dwLength: u32,
    dwMemoryLoad: u32,
    dwTotalPhys: usize,
    dwAvailPhys: usize,
    dwTotalPageFile: usize,
    dwAvailPageFile: usize,
    dwTotalVirtual: usize,
    dwAvailVirtual: usize,
};

pub const DEP_SYSTEM_POLICY_TYPE = enum(i32) {
    PolicyAlwaysOff = 0,
    PolicyAlwaysOn = 1,
    PolicyOptIn = 2,
    PolicyOptOut = 3,
    TotalPolicyCount = 4,
};
pub const DEPPolicyAlwaysOff = DEP_SYSTEM_POLICY_TYPE.PolicyAlwaysOff;
pub const DEPPolicyAlwaysOn = DEP_SYSTEM_POLICY_TYPE.PolicyAlwaysOn;
pub const DEPPolicyOptIn = DEP_SYSTEM_POLICY_TYPE.PolicyOptIn;
pub const DEPPolicyOptOut = DEP_SYSTEM_POLICY_TYPE.PolicyOptOut;
pub const DEPTotalPolicyCount = DEP_SYSTEM_POLICY_TYPE.TotalPolicyCount;

pub const PGET_SYSTEM_WOW64_DIRECTORY_A = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        lpBuffer: ?[*:0]u8,
        uSize: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        lpBuffer: ?[*:0]u8,
        uSize: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PGET_SYSTEM_WOW64_DIRECTORY_W = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        lpBuffer: ?[*:0]u16,
        uSize: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        lpBuffer: ?[*:0]u16,
        uSize: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

//--------------------------------------------------------------------------------
// Section: Functions (62)
//--------------------------------------------------------------------------------
// TODO: this type is limited to platform 'windows5.1.2600'
pub extern "kernel32" fn GlobalMemoryStatusEx(
    lpBuffer: ?*MEMORYSTATUSEX,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetSystemInfo(
    lpSystemInfo: ?*SYSTEM_INFO,
) callconv(@import("std").os.windows.WINAPI) void;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetSystemTime(
    lpSystemTime: ?*SYSTEMTIME,
) callconv(@import("std").os.windows.WINAPI) void;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetSystemTimeAsFileTime(
    lpSystemTimeAsFileTime: ?*FILETIME,
) callconv(@import("std").os.windows.WINAPI) void;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetLocalTime(
    lpSystemTime: ?*SYSTEMTIME,
) callconv(@import("std").os.windows.WINAPI) void;

pub extern "kernel32" fn IsUserCetAvailableInEnvironment(
    UserCetEnvironment: USER_CET_ENVIRONMENT,
) callconv(@import("std").os.windows.WINAPI) BOOL;

pub extern "kernel32" fn GetSystemLeapSecondInformation(
    Enabled: ?*BOOL,
    Flags: ?*u32,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetVersion() callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn SetLocalTime(
    lpSystemTime: ?*const SYSTEMTIME,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetTickCount() callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "kernel32" fn GetTickCount64() callconv(@import("std").os.windows.WINAPI) u64;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetSystemTimeAdjustment(
    lpTimeAdjustment: ?*u32,
    lpTimeIncrement: ?*u32,
    lpTimeAdjustmentDisabled: ?*BOOL,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows10.0.10240'
pub extern "api-ms-win-core-sysinfo-l1-2-4" fn GetSystemTimeAdjustmentPrecise(
    lpTimeAdjustment: ?*u64,
    lpTimeIncrement: ?*u64,
    lpTimeAdjustmentDisabled: ?*BOOL,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetSystemDirectoryA(
    lpBuffer: ?[*:0]u8,
    uSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetSystemDirectoryW(
    lpBuffer: ?[*:0]u16,
    uSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetWindowsDirectoryA(
    lpBuffer: ?[*:0]u8,
    uSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetWindowsDirectoryW(
    lpBuffer: ?[*:0]u16,
    uSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetSystemWindowsDirectoryA(
    lpBuffer: ?[*:0]u8,
    uSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetSystemWindowsDirectoryW(
    lpBuffer: ?[*:0]u16,
    uSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetComputerNameExA(
    NameType: COMPUTER_NAME_FORMAT,
    lpBuffer: ?[*:0]u8,
    nSize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetComputerNameExW(
    NameType: COMPUTER_NAME_FORMAT,
    lpBuffer: ?[*:0]u16,
    nSize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn SetComputerNameExW(
    NameType: COMPUTER_NAME_FORMAT,
    lpBuffer: ?[*:0]const u16,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn SetSystemTime(
    lpSystemTime: ?*const SYSTEMTIME,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetVersionExA(
    lpVersionInformation: ?*OSVERSIONINFOA,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn GetVersionExW(
    lpVersionInformation: ?*OSVERSIONINFOW,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "kernel32" fn GetLogicalProcessorInformation(
    // TODO: what to do with BytesParamIndex 1?
    Buffer: ?*SYSTEM_LOGICAL_PROCESSOR_INFORMATION,
    ReturnedLength: ?*u32,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows6.1'
pub extern "kernel32" fn GetLogicalProcessorInformationEx(
    RelationshipType: LOGICAL_PROCESSOR_RELATIONSHIP,
    // TODO: what to do with BytesParamIndex 2?
    Buffer: ?*SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX,
    ReturnedLength: ?*u32,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.1.2600'
pub extern "kernel32" fn GetNativeSystemInfo(
    lpSystemInfo: ?*SYSTEM_INFO,
) callconv(@import("std").os.windows.WINAPI) void;

// TODO: this type is limited to platform 'windows8.0'
pub extern "kernel32" fn GetSystemTimePreciseAsFileTime(
    lpSystemTimeAsFileTime: ?*FILETIME,
) callconv(@import("std").os.windows.WINAPI) void;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "kernel32" fn GetProductInfo(
    dwOSMajorVersion: u32,
    dwOSMinorVersion: u32,
    dwSpMajorVersion: u32,
    dwSpMinorVersion: u32,
    pdwReturnedProductType: ?*OS_PRODUCT_TYPE,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn VerSetConditionMask(
    ConditionMask: u64,
    TypeMask: VER_FLAGS,
    Condition: u8,
) callconv(@import("std").os.windows.WINAPI) u64;

pub extern "api-ms-win-core-sysinfo-l1-2-0" fn GetOsSafeBootMode(
    Flags: ?*u32,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "kernel32" fn EnumSystemFirmwareTables(
    FirmwareTableProviderSignature: FIRMWARE_TABLE_PROVIDER,
    // TODO: what to do with BytesParamIndex 2?
    pFirmwareTableEnumBuffer: ?*FIRMWARE_TABLE_ID,
    BufferSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "kernel32" fn GetSystemFirmwareTable(
    FirmwareTableProviderSignature: FIRMWARE_TABLE_PROVIDER,
    FirmwareTableID: FIRMWARE_TABLE_ID,
    // TODO: what to do with BytesParamIndex 3?
    pFirmwareTableBuffer: ?*anyopaque,
    BufferSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "kernel32" fn DnsHostnameToComputerNameExW(
    Hostname: ?[*:0]const u16,
    ComputerName: ?[*:0]u16,
    nSize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "kernel32" fn GetPhysicallyInstalledSystemMemory(
    TotalMemoryInKilobytes: ?*u64,
) callconv(@import("std").os.windows.WINAPI) BOOL;

pub extern "kernel32" fn SetComputerNameEx2W(
    NameType: COMPUTER_NAME_FORMAT,
    Flags: u32,
    lpBuffer: ?[*:0]const u16,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn SetSystemTimeAdjustment(
    dwTimeAdjustment: u32,
    bTimeAdjustmentDisabled: BOOL,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows10.0.10240'
pub extern "api-ms-win-core-sysinfo-l1-2-4" fn SetSystemTimeAdjustmentPrecise(
    dwTimeAdjustment: u64,
    bTimeAdjustmentDisabled: BOOL,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows6.1'
pub extern "kernel32" fn GetProcessorSystemCycleTime(
    Group: u16,
    // TODO: what to do with BytesParamIndex 2?
    Buffer: ?*SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION,
    ReturnedLength: ?*u32,
) callconv(@import("std").os.windows.WINAPI) BOOL;

pub extern "api-ms-win-core-sysinfo-l1-2-3" fn GetOsManufacturingMode(
    pbEnabled: ?*BOOL,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows10.0.10240'
pub extern "api-ms-win-core-sysinfo-l1-2-3" fn GetIntegratedDisplaySize(
    sizeInInches: ?*f64,
) callconv(@import("std").os.windows.WINAPI) HRESULT;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn SetComputerNameA(
    lpComputerName: ?[*:0]const u8,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn SetComputerNameW(
    lpComputerName: ?[*:0]const u16,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn SetComputerNameExA(
    NameType: COMPUTER_NAME_FORMAT,
    lpBuffer: ?[*:0]const u8,
) callconv(@import("std").os.windows.WINAPI) BOOL;

pub extern "kernel32" fn GetSystemCpuSetInformation(
    // TODO: what to do with BytesParamIndex 1?
    Information: ?*SYSTEM_CPU_SET_INFORMATION,
    BufferLength: u32,
    ReturnedLength: ?*u32,
    Process: ?HANDLE,
    Flags: u32,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.1.2600'
pub extern "kernel32" fn GetSystemWow64DirectoryA(
    lpBuffer: ?[*:0]u8,
    uSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.1.2600'
pub extern "kernel32" fn GetSystemWow64DirectoryW(
    lpBuffer: ?[*:0]u16,
    uSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows10.0.10586'
pub extern "api-ms-win-core-wow64-l1-1-1" fn GetSystemWow64Directory2A(
    lpBuffer: ?[*:0]u8,
    uSize: u32,
    ImageFileMachineType: u16,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows10.0.10586'
pub extern "api-ms-win-core-wow64-l1-1-1" fn GetSystemWow64Directory2W(
    lpBuffer: ?[*:0]u16,
    uSize: u32,
    ImageFileMachineType: u16,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows10.0.16299'
pub extern "kernel32" fn IsWow64GuestMachineSupported(
    WowGuestMachine: u16,
    MachineIsSupported: ?*BOOL,
) callconv(@import("std").os.windows.WINAPI) HRESULT;

pub extern "ntdll" fn RtlGetProductInfo(
    OSMajorVersion: u32,
    OSMinorVersion: u32,
    SpMajorVersion: u32,
    SpMinorVersion: u32,
    ReturnedProductType: ?*u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "ntdll" fn RtlOsDeploymentState(
    Flags: u32,
) callconv(@import("std").os.windows.WINAPI) OS_DEPLOYEMENT_STATE_VALUES;

pub extern "ntdllk" fn RtlGetSystemGlobalData(
    DataId: RTL_SYSTEM_GLOBAL_DATA_ID,
    Buffer: ?*anyopaque,
    Size: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "ntdll" fn RtlGetDeviceFamilyInfoEnum(
    pullUAPInfo: ?*u64,
    pulDeviceFamily: ?*DEVICEFAMILYINFOENUM,
    pulDeviceForm: ?*DEVICEFAMILYDEVICEFORM,
) callconv(@import("std").os.windows.WINAPI) void;

pub extern "ntdll" fn RtlConvertDeviceFamilyInfoToString(
    pulDeviceFamilyBufferSize: ?*u32,
    pulDeviceFormBufferSize: ?*u32,
    // TODO: what to do with BytesParamIndex 0?
    DeviceFamily: ?PWSTR,
    // TODO: what to do with BytesParamIndex 1?
    DeviceForm: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "ntdll" fn RtlSwitchedVVI(
    VersionInfo: ?*OSVERSIONINFOEXW,
    TypeMask: u32,
    ConditionMask: u64,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.1.2600'
pub extern "kernel32" fn GlobalMemoryStatus(
    lpBuffer: ?*MEMORYSTATUS,
) callconv(@import("std").os.windows.WINAPI) void;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "kernel32" fn GetSystemDEPPolicy() callconv(@import("std").os.windows.WINAPI) DEP_SYSTEM_POLICY_TYPE;

// TODO: this type is limited to platform 'windows8.0'
pub extern "kernel32" fn GetFirmwareType(
    FirmwareType: ?*FIRMWARE_TYPE,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn VerifyVersionInfoA(
    lpVersionInformation: ?*OSVERSIONINFOEXA,
    dwTypeMask: VER_FLAGS,
    dwlConditionMask: u64,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "kernel32" fn VerifyVersionInfoW(
    lpVersionInformation: ?*OSVERSIONINFOEXW,
    dwTypeMask: VER_FLAGS,
    dwlConditionMask: u64,
) callconv(@import("std").os.windows.WINAPI) BOOL;

//--------------------------------------------------------------------------------
// Section: Unicode Aliases (13)
//--------------------------------------------------------------------------------
const thismodule = @This();
pub usingnamespace switch (@import("../zig.zig").unicode_mode) {
    .ansi => struct {
        pub const OSVERSIONINFO = thismodule.OSVERSIONINFOA;
        pub const OSVERSIONINFOEX = thismodule.OSVERSIONINFOEXA;
        pub const PGET_SYSTEM_WOW64_DIRECTORY_ = thismodule.PGET_SYSTEM_WOW64_DIRECTORY_A;
        pub const GetSystemDirectory = thismodule.GetSystemDirectoryA;
        pub const GetWindowsDirectory = thismodule.GetWindowsDirectoryA;
        pub const GetSystemWindowsDirectory = thismodule.GetSystemWindowsDirectoryA;
        pub const GetComputerNameEx = thismodule.GetComputerNameExA;
        pub const SetComputerNameEx = thismodule.SetComputerNameExA;
        pub const GetVersionEx = thismodule.GetVersionExA;
        pub const SetComputerName = thismodule.SetComputerNameA;
        pub const GetSystemWow64Directory = thismodule.GetSystemWow64DirectoryA;
        pub const GetSystemWow64Directory2 = thismodule.GetSystemWow64Directory2A;
        pub const VerifyVersionInfo = thismodule.VerifyVersionInfoA;
    },
    .wide => struct {
        pub const OSVERSIONINFO = thismodule.OSVERSIONINFOW;
        pub const OSVERSIONINFOEX = thismodule.OSVERSIONINFOEXW;
        pub const PGET_SYSTEM_WOW64_DIRECTORY_ = thismodule.PGET_SYSTEM_WOW64_DIRECTORY_W;
        pub const GetSystemDirectory = thismodule.GetSystemDirectoryW;
        pub const GetWindowsDirectory = thismodule.GetWindowsDirectoryW;
        pub const GetSystemWindowsDirectory = thismodule.GetSystemWindowsDirectoryW;
        pub const GetComputerNameEx = thismodule.GetComputerNameExW;
        pub const SetComputerNameEx = thismodule.SetComputerNameExW;
        pub const GetVersionEx = thismodule.GetVersionExW;
        pub const SetComputerName = thismodule.SetComputerNameW;
        pub const GetSystemWow64Directory = thismodule.GetSystemWow64DirectoryW;
        pub const GetSystemWow64Directory2 = thismodule.GetSystemWow64Directory2W;
        pub const VerifyVersionInfo = thismodule.VerifyVersionInfoW;
    },
    .unspecified => if (@import("builtin").is_test) struct {
        pub const OSVERSIONINFO = *opaque {};
        pub const OSVERSIONINFOEX = *opaque {};
        pub const PGET_SYSTEM_WOW64_DIRECTORY_ = *opaque {};
        pub const GetSystemDirectory = *opaque {};
        pub const GetWindowsDirectory = *opaque {};
        pub const GetSystemWindowsDirectory = *opaque {};
        pub const GetComputerNameEx = *opaque {};
        pub const SetComputerNameEx = *opaque {};
        pub const GetVersionEx = *opaque {};
        pub const SetComputerName = *opaque {};
        pub const GetSystemWow64Directory = *opaque {};
        pub const GetSystemWow64Directory2 = *opaque {};
        pub const VerifyVersionInfo = *opaque {};
    } else struct {
        pub const OSVERSIONINFO = @compileError("'OSVERSIONINFO' requires that UNICODE be set to true or false in the root module");
        pub const OSVERSIONINFOEX = @compileError("'OSVERSIONINFOEX' requires that UNICODE be set to true or false in the root module");
        pub const PGET_SYSTEM_WOW64_DIRECTORY_ = @compileError("'PGET_SYSTEM_WOW64_DIRECTORY_' requires that UNICODE be set to true or false in the root module");
        pub const GetSystemDirectory = @compileError("'GetSystemDirectory' requires that UNICODE be set to true or false in the root module");
        pub const GetWindowsDirectory = @compileError("'GetWindowsDirectory' requires that UNICODE be set to true or false in the root module");
        pub const GetSystemWindowsDirectory = @compileError("'GetSystemWindowsDirectory' requires that UNICODE be set to true or false in the root module");
        pub const GetComputerNameEx = @compileError("'GetComputerNameEx' requires that UNICODE be set to true or false in the root module");
        pub const SetComputerNameEx = @compileError("'SetComputerNameEx' requires that UNICODE be set to true or false in the root module");
        pub const GetVersionEx = @compileError("'GetVersionEx' requires that UNICODE be set to true or false in the root module");
        pub const SetComputerName = @compileError("'SetComputerName' requires that UNICODE be set to true or false in the root module");
        pub const GetSystemWow64Directory = @compileError("'GetSystemWow64Directory' requires that UNICODE be set to true or false in the root module");
        pub const GetSystemWow64Directory2 = @compileError("'GetSystemWow64Directory2' requires that UNICODE be set to true or false in the root module");
        pub const VerifyVersionInfo = @compileError("'VerifyVersionInfo' requires that UNICODE be set to true or false in the root module");
    },
};
//--------------------------------------------------------------------------------
// Section: Imports (10)
//--------------------------------------------------------------------------------
const BOOL = @import("../foundation.zig").BOOL;
const BOOLEAN = @import("../foundation.zig").BOOLEAN;
const CHAR = @import("../foundation.zig").CHAR;
const FILETIME = @import("../foundation.zig").FILETIME;
const HANDLE = @import("../foundation.zig").HANDLE;
const HRESULT = @import("../foundation.zig").HRESULT;
const PROCESSOR_ARCHITECTURE = @import("../system/diagnostics/debug.zig").PROCESSOR_ARCHITECTURE;
const PSTR = @import("../foundation.zig").PSTR;
const PWSTR = @import("../foundation.zig").PWSTR;
const SYSTEMTIME = @import("../foundation.zig").SYSTEMTIME;

test {
    // The following '_ = <FuncPtrType>' lines are a workaround for https://github.com/ziglang/zig/issues/4476
    if (@hasDecl(@This(), "PGET_SYSTEM_WOW64_DIRECTORY_A")) {
        _ = PGET_SYSTEM_WOW64_DIRECTORY_A;
    }
    if (@hasDecl(@This(), "PGET_SYSTEM_WOW64_DIRECTORY_W")) {
        _ = PGET_SYSTEM_WOW64_DIRECTORY_W;
    }

    @setEvalBranchQuota(comptime @import("std").meta.declarations(@This()).len * 3);

    // reference all the pub declarations
    if (!@import("builtin").is_test) return;
    inline for (comptime @import("std").meta.declarations(@This())) |decl| {
        if (decl.is_pub) {
            _ = @field(@This(), decl.name);
        }
    }
}
