//! NOTE: this file is autogenerated, DO NOT MODIFY
//--------------------------------------------------------------------------------
// Section: Constants (691)
//--------------------------------------------------------------------------------
pub const RASNAP_ProbationTime = @as(u32, 1);
pub const RASTUNNELENDPOINT_UNKNOWN = @as(u32, 0);
pub const RASTUNNELENDPOINT_IPv4 = @as(u32, 1);
pub const RASTUNNELENDPOINT_IPv6 = @as(u32, 2);
pub const RAS_MaxDeviceType = @as(u32, 16);
pub const RAS_MaxPhoneNumber = @as(u32, 128);
pub const RAS_MaxIpAddress = @as(u32, 15);
pub const RAS_MaxIpxAddress = @as(u32, 21);
pub const RAS_MaxEntryName = @as(u32, 256);
pub const RAS_MaxDeviceName = @as(u32, 128);
pub const RAS_MaxCallbackNumber = @as(u32, 128);
pub const RAS_MaxAreaCode = @as(u32, 10);
pub const RAS_MaxPadType = @as(u32, 32);
pub const RAS_MaxX25Address = @as(u32, 200);
pub const RAS_MaxFacilities = @as(u32, 200);
pub const RAS_MaxUserData = @as(u32, 200);
pub const RAS_MaxReplyMessage = @as(u32, 1024);
pub const RAS_MaxDnsSuffix = @as(u32, 256);
pub const RASCF_AllUsers = @as(u32, 1);
pub const RASCF_GlobalCreds = @as(u32, 2);
pub const RASCF_OwnerKnown = @as(u32, 4);
pub const RASCF_OwnerMatch = @as(u32, 8);
pub const RAS_MaxIDSize = @as(u32, 256);
pub const RASCS_PAUSED = @as(u32, 4096);
pub const RASCS_DONE = @as(u32, 8192);
pub const RASCSS_DONE = @as(u32, 8192);
pub const RDEOPT_UsePrefixSuffix = @as(u32, 1);
pub const RDEOPT_PausedStates = @as(u32, 2);
pub const RDEOPT_IgnoreModemSpeaker = @as(u32, 4);
pub const RDEOPT_SetModemSpeaker = @as(u32, 8);
pub const RDEOPT_IgnoreSoftwareCompression = @as(u32, 16);
pub const RDEOPT_SetSoftwareCompression = @as(u32, 32);
pub const RDEOPT_DisableConnectedUI = @as(u32, 64);
pub const RDEOPT_DisableReconnectUI = @as(u32, 128);
pub const RDEOPT_DisableReconnect = @as(u32, 256);
pub const RDEOPT_NoUser = @as(u32, 512);
pub const RDEOPT_PauseOnScript = @as(u32, 1024);
pub const RDEOPT_Router = @as(u32, 2048);
pub const RDEOPT_CustomDial = @as(u32, 4096);
pub const RDEOPT_UseCustomScripting = @as(u32, 8192);
pub const RDEOPT_InvokeAutoTriggerCredentialUI = @as(u32, 16384);
pub const RDEOPT_EapInfoCryptInCapable = @as(u32, 32768);
pub const REN_User = @as(u32, 0);
pub const REN_AllUsers = @as(u32, 1);
pub const RASIPO_VJ = @as(u32, 1);
pub const RASLCPO_PFC = @as(u32, 1);
pub const RASLCPO_ACFC = @as(u32, 2);
pub const RASLCPO_SSHF = @as(u32, 4);
pub const RASLCPO_DES_56 = @as(u32, 8);
pub const RASLCPO_3_DES = @as(u32, 16);
pub const RASLCPO_AES_128 = @as(u32, 32);
pub const RASLCPO_AES_256 = @as(u32, 64);
pub const RASLCPO_AES_192 = @as(u32, 128);
pub const RASLCPO_GCM_AES_128 = @as(u32, 256);
pub const RASLCPO_GCM_AES_192 = @as(u32, 512);
pub const RASLCPO_GCM_AES_256 = @as(u32, 1024);
pub const RASCCPCA_MPPC = @as(u32, 6);
pub const RASCCPCA_STAC = @as(u32, 5);
pub const RASCCPO_Compression = @as(u32, 1);
pub const RASCCPO_HistoryLess = @as(u32, 2);
pub const RASCCPO_Encryption56bit = @as(u32, 16);
pub const RASCCPO_Encryption40bit = @as(u32, 32);
pub const RASCCPO_Encryption128bit = @as(u32, 64);
pub const RASIKEv2_AUTH_MACHINECERTIFICATES = @as(u32, 1);
pub const RASIKEv2_AUTH_EAP = @as(u32, 2);
pub const RASIKEv2_AUTH_PSK = @as(u32, 3);
pub const WM_RASDIALEVENT = @as(u32, 52429);
pub const ET_None = @as(u32, 0);
pub const ET_Require = @as(u32, 1);
pub const ET_RequireMax = @as(u32, 2);
pub const ET_Optional = @as(u32, 3);
pub const VS_Default = @as(u32, 0);
pub const VS_PptpOnly = @as(u32, 1);
pub const VS_PptpFirst = @as(u32, 2);
pub const VS_L2tpOnly = @as(u32, 3);
pub const VS_L2tpFirst = @as(u32, 4);
pub const VS_SstpOnly = @as(u32, 5);
pub const VS_SstpFirst = @as(u32, 6);
pub const VS_Ikev2Only = @as(u32, 7);
pub const VS_Ikev2First = @as(u32, 8);
pub const VS_GREOnly = @as(u32, 9);
pub const VS_PptpSstp = @as(u32, 12);
pub const VS_L2tpSstp = @as(u32, 13);
pub const VS_Ikev2Sstp = @as(u32, 14);
pub const VS_ProtocolList = @as(u32, 15);
pub const RASEO_UseCountryAndAreaCodes = @as(u32, 1);
pub const RASEO_SpecificIpAddr = @as(u32, 2);
pub const RASEO_SpecificNameServers = @as(u32, 4);
pub const RASEO_IpHeaderCompression = @as(u32, 8);
pub const RASEO_RemoteDefaultGateway = @as(u32, 16);
pub const RASEO_DisableLcpExtensions = @as(u32, 32);
pub const RASEO_TerminalBeforeDial = @as(u32, 64);
pub const RASEO_TerminalAfterDial = @as(u32, 128);
pub const RASEO_ModemLights = @as(u32, 256);
pub const RASEO_SwCompression = @as(u32, 512);
pub const RASEO_RequireEncryptedPw = @as(u32, 1024);
pub const RASEO_RequireMsEncryptedPw = @as(u32, 2048);
pub const RASEO_RequireDataEncryption = @as(u32, 4096);
pub const RASEO_NetworkLogon = @as(u32, 8192);
pub const RASEO_UseLogonCredentials = @as(u32, 16384);
pub const RASEO_PromoteAlternates = @as(u32, 32768);
pub const RASEO_SecureLocalFiles = @as(u32, 65536);
pub const RASEO_RequireEAP = @as(u32, 131072);
pub const RASEO_RequirePAP = @as(u32, 262144);
pub const RASEO_RequireSPAP = @as(u32, 524288);
pub const RASEO_Custom = @as(u32, 1048576);
pub const RASEO_PreviewPhoneNumber = @as(u32, 2097152);
pub const RASEO_SharedPhoneNumbers = @as(u32, 8388608);
pub const RASEO_PreviewUserPw = @as(u32, 16777216);
pub const RASEO_PreviewDomain = @as(u32, 33554432);
pub const RASEO_ShowDialingProgress = @as(u32, 67108864);
pub const RASEO_RequireCHAP = @as(u32, 134217728);
pub const RASEO_RequireMsCHAP = @as(u32, 268435456);
pub const RASEO_RequireMsCHAP2 = @as(u32, 536870912);
pub const RASEO_RequireW95MSCHAP = @as(u32, 1073741824);
pub const RASEO_CustomScript = @as(u32, 2147483648);
pub const RASEO2_SecureFileAndPrint = @as(u32, 1);
pub const RASEO2_SecureClientForMSNet = @as(u32, 2);
pub const RASEO2_DontNegotiateMultilink = @as(u32, 4);
pub const RASEO2_DontUseRasCredentials = @as(u32, 8);
pub const RASEO2_UsePreSharedKey = @as(u32, 16);
pub const RASEO2_Internet = @as(u32, 32);
pub const RASEO2_DisableNbtOverIP = @as(u32, 64);
pub const RASEO2_UseGlobalDeviceSettings = @as(u32, 128);
pub const RASEO2_ReconnectIfDropped = @as(u32, 256);
pub const RASEO2_SharePhoneNumbers = @as(u32, 512);
pub const RASEO2_SecureRoutingCompartment = @as(u32, 1024);
pub const RASEO2_UseTypicalSettings = @as(u32, 2048);
pub const RASEO2_IPv6SpecificNameServers = @as(u32, 4096);
pub const RASEO2_IPv6RemoteDefaultGateway = @as(u32, 8192);
pub const RASEO2_RegisterIpWithDNS = @as(u32, 16384);
pub const RASEO2_UseDNSSuffixForRegistration = @as(u32, 32768);
pub const RASEO2_IPv4ExplicitMetric = @as(u32, 65536);
pub const RASEO2_IPv6ExplicitMetric = @as(u32, 131072);
pub const RASEO2_DisableIKENameEkuCheck = @as(u32, 262144);
pub const RASEO2_DisableClassBasedStaticRoute = @as(u32, 524288);
pub const RASEO2_SpecificIPv6Addr = @as(u32, 1048576);
pub const RASEO2_DisableMobility = @as(u32, 2097152);
pub const RASEO2_RequireMachineCertificates = @as(u32, 4194304);
pub const RASEO2_UsePreSharedKeyForIkev2Initiator = @as(u32, 8388608);
pub const RASEO2_UsePreSharedKeyForIkev2Responder = @as(u32, 16777216);
pub const RASEO2_CacheCredentials = @as(u32, 33554432);
pub const RASEO2_AutoTriggerCapable = @as(u32, 67108864);
pub const RASEO2_IsThirdPartyProfile = @as(u32, 134217728);
pub const RASEO2_AuthTypeIsOtp = @as(u32, 268435456);
pub const RASEO2_IsAlwaysOn = @as(u32, 536870912);
pub const RASEO2_IsPrivateNetwork = @as(u32, 1073741824);
pub const RASEO2_PlumbIKEv2TSAsRoutes = @as(u32, 2147483648);
pub const RASNP_NetBEUI = @as(u32, 1);
pub const RASNP_Ipx = @as(u32, 2);
pub const RASNP_Ip = @as(u32, 4);
pub const RASNP_Ipv6 = @as(u32, 8);
pub const RASFP_Ppp = @as(u32, 1);
pub const RASFP_Slip = @as(u32, 2);
pub const RASFP_Ras = @as(u32, 4);
pub const RASET_Phone = @as(u32, 1);
pub const RASET_Vpn = @as(u32, 2);
pub const RASET_Direct = @as(u32, 3);
pub const RASET_Internet = @as(u32, 4);
pub const RASET_Broadband = @as(u32, 5);
pub const RASCN_Connection = @as(u32, 1);
pub const RASCN_Disconnection = @as(u32, 2);
pub const RASCN_BandwidthAdded = @as(u32, 4);
pub const RASCN_BandwidthRemoved = @as(u32, 8);
pub const RASCN_Dormant = @as(u32, 16);
pub const RASCN_ReConnection = @as(u32, 32);
pub const RASCN_EPDGPacketArrival = @as(u32, 64);
pub const RASIDS_Disabled = @as(u32, 4294967295);
pub const RASIDS_UseGlobalValue = @as(u32, 0);
pub const RASADFLG_PositionDlg = @as(u32, 1);
pub const RASCM_UserName = @as(u32, 1);
pub const RASCM_Password = @as(u32, 2);
pub const RASCM_Domain = @as(u32, 4);
pub const RASCM_DefaultCreds = @as(u32, 8);
pub const RASCM_PreSharedKey = @as(u32, 16);
pub const RASCM_ServerPreSharedKey = @as(u32, 32);
pub const RASCM_DDMPreSharedKey = @as(u32, 64);
pub const RASADP_DisableConnectionQuery = @as(u32, 0);
pub const RASADP_LoginSessionDisable = @as(u32, 1);
pub const RASADP_SavedAddressesLimit = @as(u32, 2);
pub const RASADP_FailedConnectionTimeout = @as(u32, 3);
pub const RASADP_ConnectionQueryTimeout = @as(u32, 4);
pub const RASEAPF_NonInteractive = @as(u32, 2);
pub const RASEAPF_Logon = @as(u32, 4);
pub const RASEAPF_Preview = @as(u32, 8);
pub const RCD_SingleUser = @as(u32, 0);
pub const RCD_AllUsers = @as(u32, 1);
pub const RCD_Eap = @as(u32, 2);
pub const RCD_Logon = @as(u32, 4);
pub const RASPBDEVENT_AddEntry = @as(u32, 1);
pub const RASPBDEVENT_EditEntry = @as(u32, 2);
pub const RASPBDEVENT_RemoveEntry = @as(u32, 3);
pub const RASPBDEVENT_DialEntry = @as(u32, 4);
pub const RASPBDEVENT_EditGlobals = @as(u32, 5);
pub const RASPBDEVENT_NoUser = @as(u32, 6);
pub const RASPBDEVENT_NoUserEdit = @as(u32, 7);
pub const RASNOUSER_SmartCard = @as(u32, 1);
pub const RASPBDFLAG_PositionDlg = @as(u32, 1);
pub const RASPBDFLAG_ForceCloseOnDial = @as(u32, 2);
pub const RASPBDFLAG_NoUser = @as(u32, 16);
pub const RASPBDFLAG_UpdateDefaults = @as(u32, 2147483648);
pub const RASEDFLAG_PositionDlg = @as(u32, 1);
pub const RASEDFLAG_NewEntry = @as(u32, 2);
pub const RASEDFLAG_CloneEntry = @as(u32, 4);
pub const RASEDFLAG_NoRename = @as(u32, 8);
pub const RASEDFLAG_ShellOwned = @as(u32, 1073741824);
pub const RASEDFLAG_NewPhoneEntry = @as(u32, 16);
pub const RASEDFLAG_NewTunnelEntry = @as(u32, 32);
pub const RASEDFLAG_NewDirectEntry = @as(u32, 64);
pub const RASEDFLAG_NewBroadbandEntry = @as(u32, 128);
pub const RASEDFLAG_InternetEntry = @as(u32, 256);
pub const RASEDFLAG_NAT = @as(u32, 512);
pub const RASEDFLAG_IncomingConnection = @as(u32, 1024);
pub const RASDDFLAG_PositionDlg = @as(u32, 1);
pub const RASDDFLAG_NoPrompt = @as(u32, 2);
pub const RASDDFLAG_AoacRedial = @as(u32, 4);
pub const RASDDFLAG_LinkFailure = @as(u32, 2147483648);
pub const PID_IPX = @as(u32, 43);
pub const PID_IP = @as(u32, 33);
pub const PID_IPV6 = @as(u32, 87);
pub const PID_NBF = @as(u32, 63);
pub const PID_ATALK = @as(u32, 41);
pub const MPR_INTERFACE_OUT_OF_RESOURCES = @as(u32, 1);
pub const MPR_INTERFACE_ADMIN_DISABLED = @as(u32, 2);
pub const MPR_INTERFACE_CONNECTION_FAILURE = @as(u32, 4);
pub const MPR_INTERFACE_SERVICE_PAUSED = @as(u32, 8);
pub const MPR_INTERFACE_DIALOUT_HOURS_RESTRICTION = @as(u32, 16);
pub const MPR_INTERFACE_NO_MEDIA_SENSE = @as(u32, 32);
pub const MPR_INTERFACE_NO_DEVICE = @as(u32, 64);
pub const MPR_MaxDeviceType = @as(u32, 16);
pub const MPR_MaxPhoneNumber = @as(u32, 128);
pub const MPR_MaxIpAddress = @as(u32, 15);
pub const MPR_MaxIpxAddress = @as(u32, 21);
pub const MPR_MaxEntryName = @as(u32, 256);
pub const MPR_MaxDeviceName = @as(u32, 128);
pub const MPR_MaxCallbackNumber = @as(u32, 128);
pub const MPR_MaxAreaCode = @as(u32, 10);
pub const MPR_MaxPadType = @as(u32, 32);
pub const MPR_MaxX25Address = @as(u32, 200);
pub const MPR_MaxFacilities = @as(u32, 200);
pub const MPR_MaxUserData = @as(u32, 200);
pub const MPRIO_SpecificIpAddr = @as(u32, 2);
pub const MPRIO_SpecificNameServers = @as(u32, 4);
pub const MPRIO_IpHeaderCompression = @as(u32, 8);
pub const MPRIO_RemoteDefaultGateway = @as(u32, 16);
pub const MPRIO_DisableLcpExtensions = @as(u32, 32);
pub const MPRIO_SwCompression = @as(u32, 512);
pub const MPRIO_RequireEncryptedPw = @as(u32, 1024);
pub const MPRIO_RequireMsEncryptedPw = @as(u32, 2048);
pub const MPRIO_RequireDataEncryption = @as(u32, 4096);
pub const MPRIO_NetworkLogon = @as(u32, 8192);
pub const MPRIO_PromoteAlternates = @as(u32, 32768);
pub const MPRIO_SecureLocalFiles = @as(u32, 65536);
pub const MPRIO_RequireEAP = @as(u32, 131072);
pub const MPRIO_RequirePAP = @as(u32, 262144);
pub const MPRIO_RequireSPAP = @as(u32, 524288);
pub const MPRIO_SharedPhoneNumbers = @as(u32, 8388608);
pub const MPRIO_RequireCHAP = @as(u32, 134217728);
pub const MPRIO_RequireMsCHAP = @as(u32, 268435456);
pub const MPRIO_RequireMsCHAP2 = @as(u32, 536870912);
pub const MPRIO_IpSecPreSharedKey = @as(u32, 2147483648);
pub const MPRIO_RequireMachineCertificates = @as(u32, 16777216);
pub const MPRIO_UsePreSharedKeyForIkev2Initiator = @as(u32, 33554432);
pub const MPRIO_UsePreSharedKeyForIkev2Responder = @as(u32, 67108864);
pub const MPRNP_Ipx = @as(u32, 2);
pub const MPRNP_Ip = @as(u32, 4);
pub const MPRNP_Ipv6 = @as(u32, 8);
pub const MPRET_Phone = @as(u32, 1);
pub const MPRET_Vpn = @as(u32, 2);
pub const MPRET_Direct = @as(u32, 3);
pub const MPRIDS_Disabled = @as(u32, 4294967295);
pub const MPRIDS_UseGlobalValue = @as(u32, 0);
pub const MPR_VS_Ikev2Only = @as(u32, 7);
pub const MPR_VS_Ikev2First = @as(u32, 8);
pub const MPR_ENABLE_RAS_ON_DEVICE = @as(u32, 1);
pub const MPR_ENABLE_ROUTING_ON_DEVICE = @as(u32, 2);
pub const IPADDRESSLEN = @as(u32, 15);
pub const IPXADDRESSLEN = @as(u32, 22);
pub const ATADDRESSLEN = @as(u32, 32);
pub const MAXIPADRESSLEN = @as(u32, 64);
pub const PPP_IPCP_VJ = @as(u32, 1);
pub const PPP_CCP_COMPRESSION = @as(u32, 1);
pub const PPP_CCP_ENCRYPTION40BITOLD = @as(u32, 16);
pub const PPP_CCP_ENCRYPTION40BIT = @as(u32, 32);
pub const PPP_CCP_ENCRYPTION128BIT = @as(u32, 64);
pub const PPP_CCP_ENCRYPTION56BIT = @as(u32, 128);
pub const PPP_CCP_HISTORYLESS = @as(u32, 16777216);
pub const PPP_LCP_MULTILINK_FRAMING = @as(u32, 1);
pub const PPP_LCP_PFC = @as(u32, 2);
pub const PPP_LCP_ACFC = @as(u32, 4);
pub const PPP_LCP_SSHF = @as(u32, 8);
pub const PPP_LCP_DES_56 = @as(u32, 16);
pub const PPP_LCP_3_DES = @as(u32, 32);
pub const PPP_LCP_AES_128 = @as(u32, 64);
pub const PPP_LCP_AES_256 = @as(u32, 128);
pub const PPP_LCP_AES_192 = @as(u32, 256);
pub const PPP_LCP_GCM_AES_128 = @as(u32, 512);
pub const PPP_LCP_GCM_AES_192 = @as(u32, 1024);
pub const PPP_LCP_GCM_AES_256 = @as(u32, 2048);
pub const RAS_FLAGS_RAS_CONNECTION = @as(u32, 4);
pub const RASPRIV_NoCallback = @as(u32, 1);
pub const RASPRIV_AdminSetCallback = @as(u32, 2);
pub const RASPRIV_CallerSetCallback = @as(u32, 4);
pub const RASPRIV_DialinPrivilege = @as(u32, 8);
pub const RASPRIV2_DialinPolicy = @as(u32, 1);
pub const MPRAPI_IKEV2_AUTH_USING_CERT = @as(u32, 1);
pub const MPRAPI_IKEV2_AUTH_USING_EAP = @as(u32, 2);
pub const MPRAPI_PPP_PROJECTION_INFO_TYPE = @as(u32, 1);
pub const MPRAPI_IKEV2_PROJECTION_INFO_TYPE = @as(u32, 2);
pub const MPRAPI_RAS_CONNECTION_OBJECT_REVISION_1 = @as(u32, 1);
pub const MPRAPI_MPR_IF_CUSTOM_CONFIG_OBJECT_REVISION_1 = @as(u32, 1);
pub const MPRAPI_IF_CUSTOM_CONFIG_FOR_IKEV2 = @as(u32, 1);
pub const MPRAPI_MPR_IF_CUSTOM_CONFIG_OBJECT_REVISION_3 = @as(u32, 3);
pub const MPRAPI_MPR_IF_CUSTOM_CONFIG_OBJECT_REVISION_2 = @as(u32, 2);
pub const MPRAPI_IKEV2_SET_TUNNEL_CONFIG_PARAMS = @as(u32, 1);
pub const MPRAPI_L2TP_SET_TUNNEL_CONFIG_PARAMS = @as(u32, 1);
pub const MAX_SSTP_HASH_SIZE = @as(u32, 32);
pub const MPRAPI_MPR_SERVER_OBJECT_REVISION_1 = @as(u32, 1);
pub const MPRAPI_MPR_SERVER_OBJECT_REVISION_2 = @as(u32, 2);
pub const MPRAPI_MPR_SERVER_OBJECT_REVISION_3 = @as(u32, 3);
pub const MPRAPI_MPR_SERVER_OBJECT_REVISION_4 = @as(u32, 4);
pub const MPRAPI_MPR_SERVER_OBJECT_REVISION_5 = @as(u32, 5);
pub const MPRAPI_MPR_SERVER_SET_CONFIG_OBJECT_REVISION_1 = @as(u32, 1);
pub const MPRAPI_MPR_SERVER_SET_CONFIG_OBJECT_REVISION_2 = @as(u32, 2);
pub const MPRAPI_MPR_SERVER_SET_CONFIG_OBJECT_REVISION_3 = @as(u32, 3);
pub const MPRAPI_MPR_SERVER_SET_CONFIG_OBJECT_REVISION_4 = @as(u32, 4);
pub const MPRAPI_MPR_SERVER_SET_CONFIG_OBJECT_REVISION_5 = @as(u32, 5);
pub const MPRAPI_SET_CONFIG_PROTOCOL_FOR_PPTP = @as(u32, 1);
pub const MPRAPI_SET_CONFIG_PROTOCOL_FOR_L2TP = @as(u32, 2);
pub const MPRAPI_SET_CONFIG_PROTOCOL_FOR_SSTP = @as(u32, 4);
pub const MPRAPI_SET_CONFIG_PROTOCOL_FOR_IKEV2 = @as(u32, 8);
pub const MPRAPI_SET_CONFIG_PROTOCOL_FOR_GRE = @as(u32, 16);
pub const ALLOW_NO_AUTH = @as(u32, 1);
pub const DO_NOT_ALLOW_NO_AUTH = @as(u32, 0);
pub const MPRAPI_RAS_UPDATE_CONNECTION_OBJECT_REVISION_1 = @as(u32, 1);
pub const MPRAPI_ADMIN_DLL_VERSION_1 = @as(u32, 1);
pub const MPRAPI_ADMIN_DLL_VERSION_2 = @as(u32, 2);
pub const MGM_JOIN_STATE_FLAG = @as(u32, 1);
pub const MGM_FORWARD_STATE_FLAG = @as(u32, 2);
pub const MGM_MFE_STATS_0 = @as(u32, 1);
pub const MGM_MFE_STATS_1 = @as(u32, 2);
pub const RTM_MAX_ADDRESS_SIZE = @as(u32, 16);
pub const RTM_MAX_VIEWS = @as(u32, 32);
pub const RTM_VIEW_ID_UCAST = @as(u32, 0);
pub const RTM_VIEW_ID_MCAST = @as(u32, 1);
pub const RTM_VIEW_MASK_SIZE = @as(u32, 32);
pub const RTM_VIEW_MASK_NONE = @as(u32, 0);
pub const RTM_VIEW_MASK_ANY = @as(u32, 0);
pub const RTM_VIEW_MASK_UCAST = @as(u32, 1);
pub const RTM_VIEW_MASK_MCAST = @as(u32, 2);
pub const RTM_VIEW_MASK_ALL = @as(u32, 4294967295);
pub const IPV6_ADDRESS_LEN_IN_BYTES = @as(u32, 16);
pub const RTM_DEST_FLAG_NATURAL_NET = @as(u32, 1);
pub const RTM_DEST_FLAG_FWD_ENGIN_ADD = @as(u32, 2);
pub const RTM_DEST_FLAG_DONT_FORWARD = @as(u32, 4);
pub const RTM_ROUTE_STATE_CREATED = @as(u32, 0);
pub const RTM_ROUTE_STATE_DELETING = @as(u32, 1);
pub const RTM_ROUTE_STATE_DELETED = @as(u32, 2);
pub const RTM_ROUTE_FLAGS_MARTIAN = @as(u32, 1);
pub const RTM_ROUTE_FLAGS_BLACKHOLE = @as(u32, 2);
pub const RTM_ROUTE_FLAGS_DISCARD = @as(u32, 4);
pub const RTM_ROUTE_FLAGS_INACTIVE = @as(u32, 8);
pub const RTM_ROUTE_FLAGS_LOCAL = @as(u32, 16);
pub const RTM_ROUTE_FLAGS_REMOTE = @as(u32, 32);
pub const RTM_ROUTE_FLAGS_MYSELF = @as(u32, 64);
pub const RTM_ROUTE_FLAGS_LOOPBACK = @as(u32, 128);
pub const RTM_ROUTE_FLAGS_MCAST = @as(u32, 256);
pub const RTM_ROUTE_FLAGS_LOCAL_MCAST = @as(u32, 512);
pub const RTM_ROUTE_FLAGS_LIMITED_BC = @as(u32, 1024);
pub const RTM_ROUTE_FLAGS_ZEROS_NETBC = @as(u32, 4096);
pub const RTM_ROUTE_FLAGS_ZEROS_SUBNETBC = @as(u32, 8192);
pub const RTM_ROUTE_FLAGS_ONES_NETBC = @as(u32, 16384);
pub const RTM_ROUTE_FLAGS_ONES_SUBNETBC = @as(u32, 32768);
pub const RTM_NEXTHOP_STATE_CREATED = @as(u32, 0);
pub const RTM_NEXTHOP_STATE_DELETED = @as(u32, 1);
pub const RTM_NEXTHOP_FLAGS_REMOTE = @as(u32, 1);
pub const RTM_NEXTHOP_FLAGS_DOWN = @as(u32, 2);
pub const METHOD_TYPE_ALL_METHODS = @as(u32, 4294967295);
pub const METHOD_RIP2_NEIGHBOUR_ADDR = @as(u32, 1);
pub const METHOD_RIP2_OUTBOUND_INTF = @as(u32, 2);
pub const METHOD_RIP2_ROUTE_TAG = @as(u32, 4);
pub const METHOD_RIP2_ROUTE_TIMESTAMP = @as(u32, 8);
pub const METHOD_BGP4_AS_PATH = @as(u32, 1);
pub const METHOD_BGP4_PEER_ID = @as(u32, 2);
pub const METHOD_BGP4_PA_ORIGIN = @as(u32, 4);
pub const METHOD_BGP4_NEXTHOP_ATTR = @as(u32, 8);
pub const RTM_RESUME_METHODS = @as(u32, 0);
pub const RTM_BLOCK_METHODS = @as(u32, 1);
pub const RTM_ROUTE_CHANGE_FIRST = @as(u32, 1);
pub const RTM_ROUTE_CHANGE_NEW = @as(u32, 2);
pub const RTM_ROUTE_CHANGE_BEST = @as(u32, 65536);
pub const RTM_NEXTHOP_CHANGE_NEW = @as(u32, 1);
pub const RTM_MATCH_NONE = @as(u32, 0);
pub const RTM_MATCH_OWNER = @as(u32, 1);
pub const RTM_MATCH_NEIGHBOUR = @as(u32, 2);
pub const RTM_MATCH_PREF = @as(u32, 4);
pub const RTM_MATCH_NEXTHOP = @as(u32, 8);
pub const RTM_MATCH_INTERFACE = @as(u32, 16);
pub const RTM_MATCH_FULL = @as(u32, 65535);
pub const RTM_ENUM_START = @as(u32, 0);
pub const RTM_ENUM_NEXT = @as(u32, 1);
pub const RTM_ENUM_RANGE = @as(u32, 2);
pub const RTM_ENUM_ALL_DESTS = @as(u32, 0);
pub const RTM_ENUM_OWN_DESTS = @as(u32, 16777216);
pub const RTM_ENUM_ALL_ROUTES = @as(u32, 0);
pub const RTM_ENUM_OWN_ROUTES = @as(u32, 65536);
pub const RTM_NUM_CHANGE_TYPES = @as(u32, 3);
pub const RTM_CHANGE_TYPE_ALL = @as(u32, 1);
pub const RTM_CHANGE_TYPE_BEST = @as(u32, 2);
pub const RTM_CHANGE_TYPE_FORWARDING = @as(u32, 4);
pub const RTM_NOTIFY_ONLY_MARKED_DESTS = @as(u32, 65536);
pub const RASBASE = @as(u32, 600);
pub const PENDING = @as(u32, 600);
pub const ERROR_INVALID_PORT_HANDLE = @as(u32, 601);
pub const ERROR_PORT_ALREADY_OPEN = @as(u32, 602);
pub const ERROR_BUFFER_TOO_SMALL = @as(u32, 603);
pub const ERROR_WRONG_INFO_SPECIFIED = @as(u32, 604);
pub const ERROR_CANNOT_SET_PORT_INFO = @as(u32, 605);
pub const ERROR_PORT_NOT_CONNECTED = @as(u32, 606);
pub const ERROR_EVENT_INVALID = @as(u32, 607);
pub const ERROR_DEVICE_DOES_NOT_EXIST = @as(u32, 608);
pub const ERROR_DEVICETYPE_DOES_NOT_EXIST = @as(u32, 609);
pub const ERROR_BUFFER_INVALID = @as(u32, 610);
pub const ERROR_ROUTE_NOT_AVAILABLE = @as(u32, 611);
pub const ERROR_ROUTE_NOT_ALLOCATED = @as(u32, 612);
pub const ERROR_INVALID_COMPRESSION_SPECIFIED = @as(u32, 613);
pub const ERROR_OUT_OF_BUFFERS = @as(u32, 614);
pub const ERROR_PORT_NOT_FOUND = @as(u32, 615);
pub const ERROR_ASYNC_REQUEST_PENDING = @as(u32, 616);
pub const ERROR_ALREADY_DISCONNECTING = @as(u32, 617);
pub const ERROR_PORT_NOT_OPEN = @as(u32, 618);
pub const ERROR_PORT_DISCONNECTED = @as(u32, 619);
pub const ERROR_NO_ENDPOINTS = @as(u32, 620);
pub const ERROR_CANNOT_OPEN_PHONEBOOK = @as(u32, 621);
pub const ERROR_CANNOT_LOAD_PHONEBOOK = @as(u32, 622);
pub const ERROR_CANNOT_FIND_PHONEBOOK_ENTRY = @as(u32, 623);
pub const ERROR_CANNOT_WRITE_PHONEBOOK = @as(u32, 624);
pub const ERROR_CORRUPT_PHONEBOOK = @as(u32, 625);
pub const ERROR_CANNOT_LOAD_STRING = @as(u32, 626);
pub const ERROR_KEY_NOT_FOUND = @as(u32, 627);
pub const ERROR_DISCONNECTION = @as(u32, 628);
pub const ERROR_REMOTE_DISCONNECTION = @as(u32, 629);
pub const ERROR_HARDWARE_FAILURE = @as(u32, 630);
pub const ERROR_USER_DISCONNECTION = @as(u32, 631);
pub const ERROR_INVALID_SIZE = @as(u32, 632);
pub const ERROR_PORT_NOT_AVAILABLE = @as(u32, 633);
pub const ERROR_CANNOT_PROJECT_CLIENT = @as(u32, 634);
pub const ERROR_UNKNOWN = @as(u32, 635);
pub const ERROR_WRONG_DEVICE_ATTACHED = @as(u32, 636);
pub const ERROR_BAD_STRING = @as(u32, 637);
pub const ERROR_REQUEST_TIMEOUT = @as(u32, 638);
pub const ERROR_CANNOT_GET_LANA = @as(u32, 639);
pub const ERROR_NETBIOS_ERROR = @as(u32, 640);
pub const ERROR_SERVER_OUT_OF_RESOURCES = @as(u32, 641);
pub const ERROR_NAME_EXISTS_ON_NET = @as(u32, 642);
pub const ERROR_SERVER_GENERAL_NET_FAILURE = @as(u32, 643);
pub const WARNING_MSG_ALIAS_NOT_ADDED = @as(u32, 644);
pub const ERROR_AUTH_INTERNAL = @as(u32, 645);
pub const ERROR_RESTRICTED_LOGON_HOURS = @as(u32, 646);
pub const ERROR_ACCT_DISABLED = @as(u32, 647);
pub const ERROR_PASSWD_EXPIRED = @as(u32, 648);
pub const ERROR_NO_DIALIN_PERMISSION = @as(u32, 649);
pub const ERROR_SERVER_NOT_RESPONDING = @as(u32, 650);
pub const ERROR_FROM_DEVICE = @as(u32, 651);
pub const ERROR_UNRECOGNIZED_RESPONSE = @as(u32, 652);
pub const ERROR_MACRO_NOT_FOUND = @as(u32, 653);
pub const ERROR_MACRO_NOT_DEFINED = @as(u32, 654);
pub const ERROR_MESSAGE_MACRO_NOT_FOUND = @as(u32, 655);
pub const ERROR_DEFAULTOFF_MACRO_NOT_FOUND = @as(u32, 656);
pub const ERROR_FILE_COULD_NOT_BE_OPENED = @as(u32, 657);
pub const ERROR_DEVICENAME_TOO_LONG = @as(u32, 658);
pub const ERROR_DEVICENAME_NOT_FOUND = @as(u32, 659);
pub const ERROR_NO_RESPONSES = @as(u32, 660);
pub const ERROR_NO_COMMAND_FOUND = @as(u32, 661);
pub const ERROR_WRONG_KEY_SPECIFIED = @as(u32, 662);
pub const ERROR_UNKNOWN_DEVICE_TYPE = @as(u32, 663);
pub const ERROR_ALLOCATING_MEMORY = @as(u32, 664);
pub const ERROR_PORT_NOT_CONFIGURED = @as(u32, 665);
pub const ERROR_DEVICE_NOT_READY = @as(u32, 666);
pub const ERROR_READING_INI_FILE = @as(u32, 667);
pub const ERROR_NO_CONNECTION = @as(u32, 668);
pub const ERROR_BAD_USAGE_IN_INI_FILE = @as(u32, 669);
pub const ERROR_READING_SECTIONNAME = @as(u32, 670);
pub const ERROR_READING_DEVICETYPE = @as(u32, 671);
pub const ERROR_READING_DEVICENAME = @as(u32, 672);
pub const ERROR_READING_USAGE = @as(u32, 673);
pub const ERROR_READING_MAXCONNECTBPS = @as(u32, 674);
pub const ERROR_READING_MAXCARRIERBPS = @as(u32, 675);
pub const ERROR_LINE_BUSY = @as(u32, 676);
pub const ERROR_VOICE_ANSWER = @as(u32, 677);
pub const ERROR_NO_ANSWER = @as(u32, 678);
pub const ERROR_NO_CARRIER = @as(u32, 679);
pub const ERROR_NO_DIALTONE = @as(u32, 680);
pub const ERROR_IN_COMMAND = @as(u32, 681);
pub const ERROR_WRITING_SECTIONNAME = @as(u32, 682);
pub const ERROR_WRITING_DEVICETYPE = @as(u32, 683);
pub const ERROR_WRITING_DEVICENAME = @as(u32, 684);
pub const ERROR_WRITING_MAXCONNECTBPS = @as(u32, 685);
pub const ERROR_WRITING_MAXCARRIERBPS = @as(u32, 686);
pub const ERROR_WRITING_USAGE = @as(u32, 687);
pub const ERROR_WRITING_DEFAULTOFF = @as(u32, 688);
pub const ERROR_READING_DEFAULTOFF = @as(u32, 689);
pub const ERROR_EMPTY_INI_FILE = @as(u32, 690);
pub const ERROR_AUTHENTICATION_FAILURE = @as(u32, 691);
pub const ERROR_PORT_OR_DEVICE = @as(u32, 692);
pub const ERROR_NOT_BINARY_MACRO = @as(u32, 693);
pub const ERROR_DCB_NOT_FOUND = @as(u32, 694);
pub const ERROR_STATE_MACHINES_NOT_STARTED = @as(u32, 695);
pub const ERROR_STATE_MACHINES_ALREADY_STARTED = @as(u32, 696);
pub const ERROR_PARTIAL_RESPONSE_LOOPING = @as(u32, 697);
pub const ERROR_UNKNOWN_RESPONSE_KEY = @as(u32, 698);
pub const ERROR_RECV_BUF_FULL = @as(u32, 699);
pub const ERROR_CMD_TOO_LONG = @as(u32, 700);
pub const ERROR_UNSUPPORTED_BPS = @as(u32, 701);
pub const ERROR_UNEXPECTED_RESPONSE = @as(u32, 702);
pub const ERROR_INTERACTIVE_MODE = @as(u32, 703);
pub const ERROR_BAD_CALLBACK_NUMBER = @as(u32, 704);
pub const ERROR_INVALID_AUTH_STATE = @as(u32, 705);
pub const ERROR_WRITING_INITBPS = @as(u32, 706);
pub const ERROR_X25_DIAGNOSTIC = @as(u32, 707);
pub const ERROR_ACCT_EXPIRED = @as(u32, 708);
pub const ERROR_CHANGING_PASSWORD = @as(u32, 709);
pub const ERROR_OVERRUN = @as(u32, 710);
pub const ERROR_RASMAN_CANNOT_INITIALIZE = @as(u32, 711);
pub const ERROR_BIPLEX_PORT_NOT_AVAILABLE = @as(u32, 712);
pub const ERROR_NO_ACTIVE_ISDN_LINES = @as(u32, 713);
pub const ERROR_NO_ISDN_CHANNELS_AVAILABLE = @as(u32, 714);
pub const ERROR_TOO_MANY_LINE_ERRORS = @as(u32, 715);
pub const ERROR_IP_CONFIGURATION = @as(u32, 716);
pub const ERROR_NO_IP_ADDRESSES = @as(u32, 717);
pub const ERROR_PPP_TIMEOUT = @as(u32, 718);
pub const ERROR_PPP_REMOTE_TERMINATED = @as(u32, 719);
pub const ERROR_PPP_NO_PROTOCOLS_CONFIGURED = @as(u32, 720);
pub const ERROR_PPP_NO_RESPONSE = @as(u32, 721);
pub const ERROR_PPP_INVALID_PACKET = @as(u32, 722);
pub const ERROR_PHONE_NUMBER_TOO_LONG = @as(u32, 723);
pub const ERROR_IPXCP_NO_DIALOUT_CONFIGURED = @as(u32, 724);
pub const ERROR_IPXCP_NO_DIALIN_CONFIGURED = @as(u32, 725);
pub const ERROR_IPXCP_DIALOUT_ALREADY_ACTIVE = @as(u32, 726);
pub const ERROR_ACCESSING_TCPCFGDLL = @as(u32, 727);
pub const ERROR_NO_IP_RAS_ADAPTER = @as(u32, 728);
pub const ERROR_SLIP_REQUIRES_IP = @as(u32, 729);
pub const ERROR_PROJECTION_NOT_COMPLETE = @as(u32, 730);
pub const ERROR_PROTOCOL_NOT_CONFIGURED = @as(u32, 731);
pub const ERROR_PPP_NOT_CONVERGING = @as(u32, 732);
pub const ERROR_PPP_CP_REJECTED = @as(u32, 733);
pub const ERROR_PPP_LCP_TERMINATED = @as(u32, 734);
pub const ERROR_PPP_REQUIRED_ADDRESS_REJECTED = @as(u32, 735);
pub const ERROR_PPP_NCP_TERMINATED = @as(u32, 736);
pub const ERROR_PPP_LOOPBACK_DETECTED = @as(u32, 737);
pub const ERROR_PPP_NO_ADDRESS_ASSIGNED = @as(u32, 738);
pub const ERROR_CANNOT_USE_LOGON_CREDENTIALS = @as(u32, 739);
pub const ERROR_TAPI_CONFIGURATION = @as(u32, 740);
pub const ERROR_NO_LOCAL_ENCRYPTION = @as(u32, 741);
pub const ERROR_NO_REMOTE_ENCRYPTION = @as(u32, 742);
pub const ERROR_REMOTE_REQUIRES_ENCRYPTION = @as(u32, 743);
pub const ERROR_IPXCP_NET_NUMBER_CONFLICT = @as(u32, 744);
pub const ERROR_INVALID_SMM = @as(u32, 745);
pub const ERROR_SMM_UNINITIALIZED = @as(u32, 746);
pub const ERROR_NO_MAC_FOR_PORT = @as(u32, 747);
pub const ERROR_SMM_TIMEOUT = @as(u32, 748);
pub const ERROR_BAD_PHONE_NUMBER = @as(u32, 749);
pub const ERROR_WRONG_MODULE = @as(u32, 750);
pub const ERROR_INVALID_CALLBACK_NUMBER = @as(u32, 751);
pub const ERROR_SCRIPT_SYNTAX = @as(u32, 752);
pub const ERROR_HANGUP_FAILED = @as(u32, 753);
pub const ERROR_BUNDLE_NOT_FOUND = @as(u32, 754);
pub const ERROR_CANNOT_DO_CUSTOMDIAL = @as(u32, 755);
pub const ERROR_DIAL_ALREADY_IN_PROGRESS = @as(u32, 756);
pub const ERROR_RASAUTO_CANNOT_INITIALIZE = @as(u32, 757);
pub const ERROR_CONNECTION_ALREADY_SHARED = @as(u32, 758);
pub const ERROR_SHARING_CHANGE_FAILED = @as(u32, 759);
pub const ERROR_SHARING_ROUTER_INSTALL = @as(u32, 760);
pub const ERROR_SHARE_CONNECTION_FAILED = @as(u32, 761);
pub const ERROR_SHARING_PRIVATE_INSTALL = @as(u32, 762);
pub const ERROR_CANNOT_SHARE_CONNECTION = @as(u32, 763);
pub const ERROR_NO_SMART_CARD_READER = @as(u32, 764);
pub const ERROR_SHARING_ADDRESS_EXISTS = @as(u32, 765);
pub const ERROR_NO_CERTIFICATE = @as(u32, 766);
pub const ERROR_SHARING_MULTIPLE_ADDRESSES = @as(u32, 767);
pub const ERROR_FAILED_TO_ENCRYPT = @as(u32, 768);
pub const ERROR_BAD_ADDRESS_SPECIFIED = @as(u32, 769);
pub const ERROR_CONNECTION_REJECT = @as(u32, 770);
pub const ERROR_CONGESTION = @as(u32, 771);
pub const ERROR_INCOMPATIBLE = @as(u32, 772);
pub const ERROR_NUMBERCHANGED = @as(u32, 773);
pub const ERROR_TEMPFAILURE = @as(u32, 774);
pub const ERROR_BLOCKED = @as(u32, 775);
pub const ERROR_DONOTDISTURB = @as(u32, 776);
pub const ERROR_OUTOFORDER = @as(u32, 777);
pub const ERROR_UNABLE_TO_AUTHENTICATE_SERVER = @as(u32, 778);
pub const ERROR_SMART_CARD_REQUIRED = @as(u32, 779);
pub const ERROR_INVALID_FUNCTION_FOR_ENTRY = @as(u32, 780);
pub const ERROR_CERT_FOR_ENCRYPTION_NOT_FOUND = @as(u32, 781);
pub const ERROR_SHARING_RRAS_CONFLICT = @as(u32, 782);
pub const ERROR_SHARING_NO_PRIVATE_LAN = @as(u32, 783);
pub const ERROR_NO_DIFF_USER_AT_LOGON = @as(u32, 784);
pub const ERROR_NO_REG_CERT_AT_LOGON = @as(u32, 785);
pub const ERROR_OAKLEY_NO_CERT = @as(u32, 786);
pub const ERROR_OAKLEY_AUTH_FAIL = @as(u32, 787);
pub const ERROR_OAKLEY_ATTRIB_FAIL = @as(u32, 788);
pub const ERROR_OAKLEY_GENERAL_PROCESSING = @as(u32, 789);
pub const ERROR_OAKLEY_NO_PEER_CERT = @as(u32, 790);
pub const ERROR_OAKLEY_NO_POLICY = @as(u32, 791);
pub const ERROR_OAKLEY_TIMED_OUT = @as(u32, 792);
pub const ERROR_OAKLEY_ERROR = @as(u32, 793);
pub const ERROR_UNKNOWN_FRAMED_PROTOCOL = @as(u32, 794);
pub const ERROR_WRONG_TUNNEL_TYPE = @as(u32, 795);
pub const ERROR_UNKNOWN_SERVICE_TYPE = @as(u32, 796);
pub const ERROR_CONNECTING_DEVICE_NOT_FOUND = @as(u32, 797);
pub const ERROR_NO_EAPTLS_CERTIFICATE = @as(u32, 798);
pub const ERROR_SHARING_HOST_ADDRESS_CONFLICT = @as(u32, 799);
pub const ERROR_AUTOMATIC_VPN_FAILED = @as(u32, 800);
pub const ERROR_VALIDATING_SERVER_CERT = @as(u32, 801);
pub const ERROR_READING_SCARD = @as(u32, 802);
pub const ERROR_INVALID_PEAP_COOKIE_CONFIG = @as(u32, 803);
pub const ERROR_INVALID_PEAP_COOKIE_USER = @as(u32, 804);
pub const ERROR_INVALID_MSCHAPV2_CONFIG = @as(u32, 805);
pub const ERROR_VPN_GRE_BLOCKED = @as(u32, 806);
pub const ERROR_VPN_DISCONNECT = @as(u32, 807);
pub const ERROR_VPN_REFUSED = @as(u32, 808);
pub const ERROR_VPN_TIMEOUT = @as(u32, 809);
pub const ERROR_VPN_BAD_CERT = @as(u32, 810);
pub const ERROR_VPN_BAD_PSK = @as(u32, 811);
pub const ERROR_SERVER_POLICY = @as(u32, 812);
pub const ERROR_BROADBAND_ACTIVE = @as(u32, 813);
pub const ERROR_BROADBAND_NO_NIC = @as(u32, 814);
pub const ERROR_BROADBAND_TIMEOUT = @as(u32, 815);
pub const ERROR_FEATURE_DEPRECATED = @as(u32, 816);
pub const ERROR_CANNOT_DELETE = @as(u32, 817);
pub const ERROR_RASQEC_RESOURCE_CREATION_FAILED = @as(u32, 818);
pub const ERROR_RASQEC_NAPAGENT_NOT_ENABLED = @as(u32, 819);
pub const ERROR_RASQEC_NAPAGENT_NOT_CONNECTED = @as(u32, 820);
pub const ERROR_RASQEC_CONN_DOESNOTEXIST = @as(u32, 821);
pub const ERROR_RASQEC_TIMEOUT = @as(u32, 822);
pub const ERROR_PEAP_CRYPTOBINDING_INVALID = @as(u32, 823);
pub const ERROR_PEAP_CRYPTOBINDING_NOTRECEIVED = @as(u32, 824);
pub const ERROR_INVALID_VPNSTRATEGY = @as(u32, 825);
pub const ERROR_EAPTLS_CACHE_CREDENTIALS_INVALID = @as(u32, 826);
pub const ERROR_IPSEC_SERVICE_STOPPED = @as(u32, 827);
pub const ERROR_IDLE_TIMEOUT = @as(u32, 828);
pub const ERROR_LINK_FAILURE = @as(u32, 829);
pub const ERROR_USER_LOGOFF = @as(u32, 830);
pub const ERROR_FAST_USER_SWITCH = @as(u32, 831);
pub const ERROR_HIBERNATION = @as(u32, 832);
pub const ERROR_SYSTEM_SUSPENDED = @as(u32, 833);
pub const ERROR_RASMAN_SERVICE_STOPPED = @as(u32, 834);
pub const ERROR_INVALID_SERVER_CERT = @as(u32, 835);
pub const ERROR_NOT_NAP_CAPABLE = @as(u32, 836);
pub const ERROR_INVALID_TUNNELID = @as(u32, 837);
pub const ERROR_UPDATECONNECTION_REQUEST_IN_PROCESS = @as(u32, 838);
pub const ERROR_PROTOCOL_ENGINE_DISABLED = @as(u32, 839);
pub const ERROR_INTERNAL_ADDRESS_FAILURE = @as(u32, 840);
pub const ERROR_FAILED_CP_REQUIRED = @as(u32, 841);
pub const ERROR_TS_UNACCEPTABLE = @as(u32, 842);
pub const ERROR_MOBIKE_DISABLED = @as(u32, 843);
pub const ERROR_CANNOT_INITIATE_MOBIKE_UPDATE = @as(u32, 844);
pub const ERROR_PEAP_SERVER_REJECTED_CLIENT_TLV = @as(u32, 845);
pub const ERROR_INVALID_PREFERENCES = @as(u32, 846);
pub const ERROR_EAPTLS_SCARD_CACHE_CREDENTIALS_INVALID = @as(u32, 847);
pub const ERROR_SSTP_COOKIE_SET_FAILURE = @as(u32, 848);
pub const ERROR_INVALID_PEAP_COOKIE_ATTRIBUTES = @as(u32, 849);
pub const ERROR_EAP_METHOD_NOT_INSTALLED = @as(u32, 850);
pub const ERROR_EAP_METHOD_DOES_NOT_SUPPORT_SSO = @as(u32, 851);
pub const ERROR_EAP_METHOD_OPERATION_NOT_SUPPORTED = @as(u32, 852);
pub const ERROR_EAP_USER_CERT_INVALID = @as(u32, 853);
pub const ERROR_EAP_USER_CERT_EXPIRED = @as(u32, 854);
pub const ERROR_EAP_USER_CERT_REVOKED = @as(u32, 855);
pub const ERROR_EAP_USER_CERT_OTHER_ERROR = @as(u32, 856);
pub const ERROR_EAP_SERVER_CERT_INVALID = @as(u32, 857);
pub const ERROR_EAP_SERVER_CERT_EXPIRED = @as(u32, 858);
pub const ERROR_EAP_SERVER_CERT_REVOKED = @as(u32, 859);
pub const ERROR_EAP_SERVER_CERT_OTHER_ERROR = @as(u32, 860);
pub const ERROR_EAP_USER_ROOT_CERT_NOT_FOUND = @as(u32, 861);
pub const ERROR_EAP_USER_ROOT_CERT_INVALID = @as(u32, 862);
pub const ERROR_EAP_USER_ROOT_CERT_EXPIRED = @as(u32, 863);
pub const ERROR_EAP_SERVER_ROOT_CERT_NOT_FOUND = @as(u32, 864);
pub const ERROR_EAP_SERVER_ROOT_CERT_INVALID = @as(u32, 865);
pub const ERROR_EAP_SERVER_ROOT_CERT_NAME_REQUIRED = @as(u32, 866);
pub const ERROR_PEAP_IDENTITY_MISMATCH = @as(u32, 867);
pub const ERROR_DNSNAME_NOT_RESOLVABLE = @as(u32, 868);
pub const ERROR_EAPTLS_PASSWD_INVALID = @as(u32, 869);
pub const ERROR_IKEV2_PSK_INTERFACE_ALREADY_EXISTS = @as(u32, 870);
pub const ERROR_INVALID_DESTINATION_IP = @as(u32, 871);
pub const ERROR_INVALID_INTERFACE_CONFIG = @as(u32, 872);
pub const ERROR_VPN_PLUGIN_GENERIC = @as(u32, 873);
pub const ERROR_SSO_CERT_MISSING = @as(u32, 874);
pub const ERROR_DEVICE_COMPLIANCE = @as(u32, 875);
pub const ERROR_PLUGIN_NOT_INSTALLED = @as(u32, 876);
pub const ERROR_ACTION_REQUIRED = @as(u32, 877);
pub const RASBASEEND = @as(u32, 877);

//--------------------------------------------------------------------------------
// Section: Types (224)
//--------------------------------------------------------------------------------
pub const MPR_INTERFACE_DIAL_MODE = enum(u32) {
    First = 0,
    All = 1,
    AsNeeded = 2,
};
pub const MPRDM_DialFirst = MPR_INTERFACE_DIAL_MODE.First;
pub const MPRDM_DialAll = MPR_INTERFACE_DIAL_MODE.All;
pub const MPRDM_DialAsNeeded = MPR_INTERFACE_DIAL_MODE.AsNeeded;

pub const RASENTRY_DIAL_MODE = enum(u32) {
    ll = 1,
    sNeeded = 2,
};
pub const RASEDM_DialAll = RASENTRY_DIAL_MODE.ll;
pub const RASEDM_DialAsNeeded = RASENTRY_DIAL_MODE.sNeeded;

pub const RAS_FLAGS = enum(u32) {
    PPP_CONNECTION = 1,
    MESSENGER_PRESENT = 2,
    QUARANTINE_PRESENT = 8,
    ARAP_CONNECTION = 16,
    // IKEV2_CONNECTION = 16, this enum value conflicts with ARAP_CONNECTION
    DORMANT = 32,
};
pub const RAS_FLAGS_PPP_CONNECTION = RAS_FLAGS.PPP_CONNECTION;
pub const RAS_FLAGS_MESSENGER_PRESENT = RAS_FLAGS.MESSENGER_PRESENT;
pub const RAS_FLAGS_QUARANTINE_PRESENT = RAS_FLAGS.QUARANTINE_PRESENT;
pub const RAS_FLAGS_ARAP_CONNECTION = RAS_FLAGS.ARAP_CONNECTION;
pub const RAS_FLAGS_IKEV2_CONNECTION = RAS_FLAGS.ARAP_CONNECTION;
pub const RAS_FLAGS_DORMANT = RAS_FLAGS.DORMANT;

pub const MPR_ET = enum(u32) {
    None = 0,
    Require = 1,
    RequireMax = 2,
    Optional = 3,
};
pub const MPR_ET_None = MPR_ET.None;
pub const MPR_ET_Require = MPR_ET.Require;
pub const MPR_ET_RequireMax = MPR_ET.RequireMax;
pub const MPR_ET_Optional = MPR_ET.Optional;

pub const RASPPP_PROJECTION_INFO_SERVER_AUTH_DATA = enum(u32) {
    D5 = 5,
    S = 128,
    SV2 = 129,
};
pub const RASLCPAD_CHAP_MD5 = RASPPP_PROJECTION_INFO_SERVER_AUTH_DATA.D5;
pub const RASLCPAD_CHAP_MS = RASPPP_PROJECTION_INFO_SERVER_AUTH_DATA.S;
pub const RASLCPAD_CHAP_MSV2 = RASPPP_PROJECTION_INFO_SERVER_AUTH_DATA.SV2;

pub const PPP_LCP = enum(u32) {
    PAP = 49187,
    CHAP = 49699,
    EAP = 49703,
    SPAP = 49191,
};
pub const PPP_LCP_PAP = PPP_LCP.PAP;
pub const PPP_LCP_CHAP = PPP_LCP.CHAP;
pub const PPP_LCP_EAP = PPP_LCP.EAP;
pub const PPP_LCP_SPAP = PPP_LCP.SPAP;

pub const RASPPP_PROJECTION_INFO_SERVER_AUTH_PROTOCOL = enum(u32) {
    PAP = 49187,
    SPAP = 49191,
    CHAP = 49699,
    EAP = 49703,
};
pub const RASLCPAP_PAP = RASPPP_PROJECTION_INFO_SERVER_AUTH_PROTOCOL.PAP;
pub const RASLCPAP_SPAP = RASPPP_PROJECTION_INFO_SERVER_AUTH_PROTOCOL.SPAP;
pub const RASLCPAP_CHAP = RASPPP_PROJECTION_INFO_SERVER_AUTH_PROTOCOL.CHAP;
pub const RASLCPAP_EAP = RASPPP_PROJECTION_INFO_SERVER_AUTH_PROTOCOL.EAP;

pub const PPP_LCP_INFO_AUTH_DATA = enum(u32) {
    D5 = 5,
    S = 128,
    SV2 = 129,
};
pub const PPP_LCP_CHAP_MD5 = PPP_LCP_INFO_AUTH_DATA.D5;
pub const PPP_LCP_CHAP_MS = PPP_LCP_INFO_AUTH_DATA.S;
pub const PPP_LCP_CHAP_MSV2 = PPP_LCP_INFO_AUTH_DATA.SV2;

pub const RASIKEV_PROJECTION_INFO_FLAGS = enum(u32) {
    MOBIKESUPPORTED = 1,
    BEHIND_NAT = 2,
    SERVERBEHIND_NAT = 4,
    _,
    pub fn initFlags(o: struct {
        MOBIKESUPPORTED: u1 = 0,
        BEHIND_NAT: u1 = 0,
        SERVERBEHIND_NAT: u1 = 0,
    }) RASIKEV_PROJECTION_INFO_FLAGS {
        return @as(RASIKEV_PROJECTION_INFO_FLAGS, @enumFromInt((if (o.MOBIKESUPPORTED == 1) @intFromEnum(RASIKEV_PROJECTION_INFO_FLAGS.MOBIKESUPPORTED) else 0) | (if (o.BEHIND_NAT == 1) @intFromEnum(RASIKEV_PROJECTION_INFO_FLAGS.BEHIND_NAT) else 0) | (if (o.SERVERBEHIND_NAT == 1) @intFromEnum(RASIKEV_PROJECTION_INFO_FLAGS.SERVERBEHIND_NAT) else 0)));
    }
};
pub const RASIKEv2_FLAGS_MOBIKESUPPORTED = RASIKEV_PROJECTION_INFO_FLAGS.MOBIKESUPPORTED;
pub const RASIKEv2_FLAGS_BEHIND_NAT = RASIKEV_PROJECTION_INFO_FLAGS.BEHIND_NAT;
pub const RASIKEv2_FLAGS_SERVERBEHIND_NAT = RASIKEV_PROJECTION_INFO_FLAGS.SERVERBEHIND_NAT;

pub const MPR_VS = enum(u32) {
    Default = 0,
    PptpOnly = 1,
    PptpFirst = 2,
    L2tpOnly = 3,
    L2tpFirst = 4,
};
pub const MPR_VS_Default = MPR_VS.Default;
pub const MPR_VS_PptpOnly = MPR_VS.PptpOnly;
pub const MPR_VS_PptpFirst = MPR_VS.PptpFirst;
pub const MPR_VS_L2tpOnly = MPR_VS.L2tpOnly;
pub const MPR_VS_L2tpFirst = MPR_VS.L2tpFirst;

pub const SECURITY_MESSAGE_MSG_ID = enum(u32) {
    SUCCESS = 1,
    FAILURE = 2,
    ERROR = 3,
};
pub const SECURITYMSG_SUCCESS = SECURITY_MESSAGE_MSG_ID.SUCCESS;
pub const SECURITYMSG_FAILURE = SECURITY_MESSAGE_MSG_ID.FAILURE;
pub const SECURITYMSG_ERROR = SECURITY_MESSAGE_MSG_ID.ERROR;

pub const HRASCONN = *opaque {};

pub const RASAPIVERSION = enum(i32) {
    @"500" = 1,
    @"501" = 2,
    @"600" = 3,
    @"601" = 4,
};
pub const RASAPIVERSION_500 = RASAPIVERSION.@"500";
pub const RASAPIVERSION_501 = RASAPIVERSION.@"501";
pub const RASAPIVERSION_600 = RASAPIVERSION.@"600";
pub const RASAPIVERSION_601 = RASAPIVERSION.@"601";

pub const RASIPADDR = extern struct {
    a: u8,
    b: u8,
    c: u8,
    d: u8,
};

pub const RASTUNNELENDPOINT = extern struct {
    dwType: u32,
    Anonymous: extern union {
        ipv4: IN_ADDR,
        ipv6: IN6_ADDR,
    },
};

pub const RASCONNW = extern struct {
    dwSize: u32 align(4),
    hrasconn: ?HRASCONN align(4),
    szEntryName: [257]u16 align(4),
    szDeviceType: [17]u16 align(4),
    szDeviceName: [129]u16 align(4),
    szPhonebook: [260]u16 align(4),
    dwSubEntry: u32 align(4),
    guidEntry: Guid align(4),
    dwFlags: u32 align(4),
    luid: LUID align(4),
    guidCorrelationId: Guid align(4),
};

pub const RASCONNA = extern struct {
    dwSize: u32 align(4),
    hrasconn: ?HRASCONN align(4),
    szEntryName: [257]CHAR align(4),
    szDeviceType: [17]CHAR align(4),
    szDeviceName: [129]CHAR align(4),
    szPhonebook: [260]CHAR align(4),
    dwSubEntry: u32 align(4),
    guidEntry: Guid align(4),
    dwFlags: u32 align(4),
    luid: LUID align(4),
    guidCorrelationId: Guid align(4),
};

pub const RASCONNSTATE = enum(i32) {
    OpenPort = 0,
    PortOpened = 1,
    ConnectDevice = 2,
    DeviceConnected = 3,
    AllDevicesConnected = 4,
    Authenticate = 5,
    AuthNotify = 6,
    AuthRetry = 7,
    AuthCallback = 8,
    AuthChangePassword = 9,
    AuthProject = 10,
    AuthLinkSpeed = 11,
    AuthAck = 12,
    ReAuthenticate = 13,
    Authenticated = 14,
    PrepareForCallback = 15,
    WaitForModemReset = 16,
    WaitForCallback = 17,
    Projected = 18,
    StartAuthentication = 19,
    CallbackComplete = 20,
    LogonNetwork = 21,
    SubEntryConnected = 22,
    SubEntryDisconnected = 23,
    ApplySettings = 24,
    Interactive = 4096,
    RetryAuthentication = 4097,
    CallbackSetByCaller = 4098,
    PasswordExpired = 4099,
    InvokeEapUI = 4100,
    Connected = 8192,
    Disconnected = 8193,
};
pub const RASCS_OpenPort = RASCONNSTATE.OpenPort;
pub const RASCS_PortOpened = RASCONNSTATE.PortOpened;
pub const RASCS_ConnectDevice = RASCONNSTATE.ConnectDevice;
pub const RASCS_DeviceConnected = RASCONNSTATE.DeviceConnected;
pub const RASCS_AllDevicesConnected = RASCONNSTATE.AllDevicesConnected;
pub const RASCS_Authenticate = RASCONNSTATE.Authenticate;
pub const RASCS_AuthNotify = RASCONNSTATE.AuthNotify;
pub const RASCS_AuthRetry = RASCONNSTATE.AuthRetry;
pub const RASCS_AuthCallback = RASCONNSTATE.AuthCallback;
pub const RASCS_AuthChangePassword = RASCONNSTATE.AuthChangePassword;
pub const RASCS_AuthProject = RASCONNSTATE.AuthProject;
pub const RASCS_AuthLinkSpeed = RASCONNSTATE.AuthLinkSpeed;
pub const RASCS_AuthAck = RASCONNSTATE.AuthAck;
pub const RASCS_ReAuthenticate = RASCONNSTATE.ReAuthenticate;
pub const RASCS_Authenticated = RASCONNSTATE.Authenticated;
pub const RASCS_PrepareForCallback = RASCONNSTATE.PrepareForCallback;
pub const RASCS_WaitForModemReset = RASCONNSTATE.WaitForModemReset;
pub const RASCS_WaitForCallback = RASCONNSTATE.WaitForCallback;
pub const RASCS_Projected = RASCONNSTATE.Projected;
pub const RASCS_StartAuthentication = RASCONNSTATE.StartAuthentication;
pub const RASCS_CallbackComplete = RASCONNSTATE.CallbackComplete;
pub const RASCS_LogonNetwork = RASCONNSTATE.LogonNetwork;
pub const RASCS_SubEntryConnected = RASCONNSTATE.SubEntryConnected;
pub const RASCS_SubEntryDisconnected = RASCONNSTATE.SubEntryDisconnected;
pub const RASCS_ApplySettings = RASCONNSTATE.ApplySettings;
pub const RASCS_Interactive = RASCONNSTATE.Interactive;
pub const RASCS_RetryAuthentication = RASCONNSTATE.RetryAuthentication;
pub const RASCS_CallbackSetByCaller = RASCONNSTATE.CallbackSetByCaller;
pub const RASCS_PasswordExpired = RASCONNSTATE.PasswordExpired;
pub const RASCS_InvokeEapUI = RASCONNSTATE.InvokeEapUI;
pub const RASCS_Connected = RASCONNSTATE.Connected;
pub const RASCS_Disconnected = RASCONNSTATE.Disconnected;

pub const RASCONNSUBSTATE = enum(i32) {
    None = 0,
    Dormant = 1,
    Reconnecting = 2,
    Reconnected = 8192,
};
pub const RASCSS_None = RASCONNSUBSTATE.None;
pub const RASCSS_Dormant = RASCONNSUBSTATE.Dormant;
pub const RASCSS_Reconnecting = RASCONNSUBSTATE.Reconnecting;
pub const RASCSS_Reconnected = RASCONNSUBSTATE.Reconnected;

pub const RASCONNSTATUSW = extern struct {
    dwSize: u32,
    rasconnstate: RASCONNSTATE,
    dwError: u32,
    szDeviceType: [17]u16,
    szDeviceName: [129]u16,
    szPhoneNumber: [129]u16,
    localEndPoint: RASTUNNELENDPOINT,
    remoteEndPoint: RASTUNNELENDPOINT,
    rasconnsubstate: RASCONNSUBSTATE,
};

pub const RASCONNSTATUSA = extern struct {
    dwSize: u32,
    rasconnstate: RASCONNSTATE,
    dwError: u32,
    szDeviceType: [17]CHAR,
    szDeviceName: [129]CHAR,
    szPhoneNumber: [129]CHAR,
    localEndPoint: RASTUNNELENDPOINT,
    remoteEndPoint: RASTUNNELENDPOINT,
    rasconnsubstate: RASCONNSUBSTATE,
};

pub const RASDIALPARAMSW = extern struct {
    dwSize: u32 align(4),
    szEntryName: [257]u16 align(4),
    szPhoneNumber: [129]u16 align(4),
    szCallbackNumber: [129]u16 align(4),
    szUserName: [257]u16 align(4),
    szPassword: [257]u16 align(4),
    szDomain: [16]u16 align(4),
    dwSubEntry: u32 align(4),
    dwCallbackId: usize align(4),
    dwIfIndex: u32 align(4),
    szEncPassword: ?PWSTR align(4),
};

pub const RASDIALPARAMSA = extern struct {
    dwSize: u32 align(4),
    szEntryName: [257]CHAR align(4),
    szPhoneNumber: [129]CHAR align(4),
    szCallbackNumber: [129]CHAR align(4),
    szUserName: [257]CHAR align(4),
    szPassword: [257]CHAR align(4),
    szDomain: [16]CHAR align(4),
    dwSubEntry: u32 align(4),
    dwCallbackId: usize align(4),
    dwIfIndex: u32 align(4),
    szEncPassword: ?PSTR align(4),
};

pub const RASEAPINFO = extern struct {
    dwSizeofEapInfo: u32 align(4),
    pbEapInfo: ?*u8 align(4),
};

pub const RASDEVSPECIFICINFO = extern struct {
    dwSize: u32 align(4),
    pbDevSpecificInfo: ?*u8 align(4),
};

pub const RASDIALEXTENSIONS = extern struct {
    dwSize: u32 align(4),
    dwfOptions: u32 align(4),
    hwndParent: ?HWND align(4),
    reserved: usize align(4),
    reserved1: usize align(4),
    RasEapInfo: RASEAPINFO align(4),
    fSkipPppAuth: BOOL align(4),
    RasDevSpecificInfo: RASDEVSPECIFICINFO align(4),
};

pub const RASENTRYNAMEW = extern struct {
    dwSize: u32,
    szEntryName: [257]u16,
    dwFlags: u32,
    szPhonebookPath: [261]u16,
};

pub const RASENTRYNAMEA = extern struct {
    dwSize: u32,
    szEntryName: [257]CHAR,
    dwFlags: u32,
    szPhonebookPath: [261]CHAR,
};

pub const RASPROJECTION = enum(i32) {
    Amb = 65536,
    PppNbf = 32831,
    PppIpx = 32811,
    PppIp = 32801,
    PppCcp = 33021,
    PppLcp = 49185,
    PppIpv6 = 32855,
};
pub const RASP_Amb = RASPROJECTION.Amb;
pub const RASP_PppNbf = RASPROJECTION.PppNbf;
pub const RASP_PppIpx = RASPROJECTION.PppIpx;
pub const RASP_PppIp = RASPROJECTION.PppIp;
pub const RASP_PppCcp = RASPROJECTION.PppCcp;
pub const RASP_PppLcp = RASPROJECTION.PppLcp;
pub const RASP_PppIpv6 = RASPROJECTION.PppIpv6;

pub const RASAMBW = extern struct {
    dwSize: u32,
    dwError: u32,
    szNetBiosError: [17]u16,
    bLana: u8,
};

pub const RASAMBA = extern struct {
    dwSize: u32,
    dwError: u32,
    szNetBiosError: [17]CHAR,
    bLana: u8,
};

pub const RASPPPNBFW = extern struct {
    dwSize: u32,
    dwError: u32,
    dwNetBiosError: u32,
    szNetBiosError: [17]u16,
    szWorkstationName: [17]u16,
    bLana: u8,
};

pub const RASPPPNBFA = extern struct {
    dwSize: u32,
    dwError: u32,
    dwNetBiosError: u32,
    szNetBiosError: [17]CHAR,
    szWorkstationName: [17]CHAR,
    bLana: u8,
};

pub const RASIPXW = extern struct {
    dwSize: u32,
    dwError: u32,
    szIpxAddress: [22]u16,
};

pub const RASPPPIPXA = extern struct {
    dwSize: u32,
    dwError: u32,
    szIpxAddress: [22]CHAR,
};

pub const RASPPPIPW = extern struct {
    dwSize: u32,
    dwError: u32,
    szIpAddress: [16]u16,
    szServerIpAddress: [16]u16,
    dwOptions: u32,
    dwServerOptions: u32,
};

pub const RASPPPIPA = extern struct {
    dwSize: u32,
    dwError: u32,
    szIpAddress: [16]CHAR,
    szServerIpAddress: [16]CHAR,
    dwOptions: u32,
    dwServerOptions: u32,
};

pub const RASPPPIPV6 = extern struct {
    dwSize: u32,
    dwError: u32,
    bLocalInterfaceIdentifier: [8]u8,
    bPeerInterfaceIdentifier: [8]u8,
    bLocalCompressionProtocol: [2]u8,
    bPeerCompressionProtocol: [2]u8,
};

pub const RASPPPLCPW = extern struct {
    dwSize: u32,
    fBundled: BOOL,
    dwError: u32,
    dwAuthenticationProtocol: u32,
    dwAuthenticationData: u32,
    dwEapTypeId: u32,
    dwServerAuthenticationProtocol: u32,
    dwServerAuthenticationData: u32,
    dwServerEapTypeId: u32,
    fMultilink: BOOL,
    dwTerminateReason: u32,
    dwServerTerminateReason: u32,
    szReplyMessage: [1024]u16,
    dwOptions: u32,
    dwServerOptions: u32,
};

pub const RASPPPLCPA = extern struct {
    dwSize: u32,
    fBundled: BOOL,
    dwError: u32,
    dwAuthenticationProtocol: u32,
    dwAuthenticationData: u32,
    dwEapTypeId: u32,
    dwServerAuthenticationProtocol: u32,
    dwServerAuthenticationData: u32,
    dwServerEapTypeId: u32,
    fMultilink: BOOL,
    dwTerminateReason: u32,
    dwServerTerminateReason: u32,
    szReplyMessage: [1024]CHAR,
    dwOptions: u32,
    dwServerOptions: u32,
};

pub const RASPPPCCP = extern struct {
    dwSize: u32,
    dwError: u32,
    dwCompressionAlgorithm: u32,
    dwOptions: u32,
    dwServerCompressionAlgorithm: u32,
    dwServerOptions: u32,
};

pub const RASPPP_PROJECTION_INFO = extern struct {
    dwIPv4NegotiationError: u32,
    ipv4Address: IN_ADDR,
    ipv4ServerAddress: IN_ADDR,
    dwIPv4Options: u32,
    dwIPv4ServerOptions: u32,
    dwIPv6NegotiationError: u32,
    bInterfaceIdentifier: [8]u8,
    bServerInterfaceIdentifier: [8]u8,
    fBundled: BOOL,
    fMultilink: BOOL,
    dwAuthenticationProtocol: RASPPP_PROJECTION_INFO_SERVER_AUTH_PROTOCOL,
    dwAuthenticationData: RASPPP_PROJECTION_INFO_SERVER_AUTH_DATA,
    dwServerAuthenticationProtocol: RASPPP_PROJECTION_INFO_SERVER_AUTH_PROTOCOL,
    dwServerAuthenticationData: RASPPP_PROJECTION_INFO_SERVER_AUTH_DATA,
    dwEapTypeId: u32,
    dwServerEapTypeId: u32,
    dwLcpOptions: u32,
    dwLcpServerOptions: u32,
    dwCcpError: u32,
    dwCcpCompressionAlgorithm: u32,
    dwCcpServerCompressionAlgorithm: u32,
    dwCcpOptions: u32,
    dwCcpServerOptions: u32,
};

pub const RASIKEV2_PROJECTION_INFO = extern struct {
    dwIPv4NegotiationError: u32 align(4),
    ipv4Address: IN_ADDR align(4),
    ipv4ServerAddress: IN_ADDR align(4),
    dwIPv6NegotiationError: u32 align(4),
    ipv6Address: IN6_ADDR align(4),
    ipv6ServerAddress: IN6_ADDR align(4),
    dwPrefixLength: u32 align(4),
    dwAuthenticationProtocol: u32 align(4),
    dwEapTypeId: u32 align(4),
    dwFlags: RASIKEV_PROJECTION_INFO_FLAGS align(4),
    dwEncryptionMethod: u32 align(4),
    numIPv4ServerAddresses: u32 align(4),
    ipv4ServerAddresses: ?*IN_ADDR align(4),
    numIPv6ServerAddresses: u32 align(4),
    ipv6ServerAddresses: ?*IN6_ADDR align(4),
};

pub const RASPROJECTION_INFO_TYPE = enum(i32) {
    PPP = 1,
    IKEv2 = 2,
};
pub const PROJECTION_INFO_TYPE_PPP = RASPROJECTION_INFO_TYPE.PPP;
pub const PROJECTION_INFO_TYPE_IKEv2 = RASPROJECTION_INFO_TYPE.IKEv2;

pub const IKEV2_ID_PAYLOAD_TYPE = enum(i32) {
    INVALID = 0,
    IPV4_ADDR = 1,
    FQDN = 2,
    RFC822_ADDR = 3,
    RESERVED1 = 4,
    ID_IPV6_ADDR = 5,
    RESERVED2 = 6,
    RESERVED3 = 7,
    RESERVED4 = 8,
    DER_ASN1_DN = 9,
    DER_ASN1_GN = 10,
    KEY_ID = 11,
    MAX = 12,
};
pub const IKEV2_ID_PAYLOAD_TYPE_INVALID = IKEV2_ID_PAYLOAD_TYPE.INVALID;
pub const IKEV2_ID_PAYLOAD_TYPE_IPV4_ADDR = IKEV2_ID_PAYLOAD_TYPE.IPV4_ADDR;
pub const IKEV2_ID_PAYLOAD_TYPE_FQDN = IKEV2_ID_PAYLOAD_TYPE.FQDN;
pub const IKEV2_ID_PAYLOAD_TYPE_RFC822_ADDR = IKEV2_ID_PAYLOAD_TYPE.RFC822_ADDR;
pub const IKEV2_ID_PAYLOAD_TYPE_RESERVED1 = IKEV2_ID_PAYLOAD_TYPE.RESERVED1;
pub const IKEV2_ID_PAYLOAD_TYPE_ID_IPV6_ADDR = IKEV2_ID_PAYLOAD_TYPE.ID_IPV6_ADDR;
pub const IKEV2_ID_PAYLOAD_TYPE_RESERVED2 = IKEV2_ID_PAYLOAD_TYPE.RESERVED2;
pub const IKEV2_ID_PAYLOAD_TYPE_RESERVED3 = IKEV2_ID_PAYLOAD_TYPE.RESERVED3;
pub const IKEV2_ID_PAYLOAD_TYPE_RESERVED4 = IKEV2_ID_PAYLOAD_TYPE.RESERVED4;
pub const IKEV2_ID_PAYLOAD_TYPE_DER_ASN1_DN = IKEV2_ID_PAYLOAD_TYPE.DER_ASN1_DN;
pub const IKEV2_ID_PAYLOAD_TYPE_DER_ASN1_GN = IKEV2_ID_PAYLOAD_TYPE.DER_ASN1_GN;
pub const IKEV2_ID_PAYLOAD_TYPE_KEY_ID = IKEV2_ID_PAYLOAD_TYPE.KEY_ID;
pub const IKEV2_ID_PAYLOAD_TYPE_MAX = IKEV2_ID_PAYLOAD_TYPE.MAX;

pub const RAS_PROJECTION_INFO = extern struct {
    version: RASAPIVERSION,
    type: RASPROJECTION_INFO_TYPE,
    Anonymous: extern union {
        ppp: RASPPP_PROJECTION_INFO,
        ikev2: RASIKEV2_PROJECTION_INFO,
    },
};

pub const RASDIALFUNC = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: u32,
        param1: RASCONNSTATE,
        param2: u32,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: u32,
        param1: RASCONNSTATE,
        param2: u32,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const RASDIALFUNC1 = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?HRASCONN,
        param1: u32,
        param2: RASCONNSTATE,
        param3: u32,
        param4: u32,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: ?HRASCONN,
        param1: u32,
        param2: RASCONNSTATE,
        param3: u32,
        param4: u32,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const RASDIALFUNC2 = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: usize,
        param1: u32,
        param2: ?HRASCONN,
        param3: u32,
        param4: RASCONNSTATE,
        param5: u32,
        param6: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        param0: usize,
        param1: u32,
        param2: ?HRASCONN,
        param3: u32,
        param4: RASCONNSTATE,
        param5: u32,
        param6: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const RASDEVINFOW = extern struct {
    dwSize: u32,
    szDeviceType: [17]u16,
    szDeviceName: [129]u16,
};

pub const RASDEVINFOA = extern struct {
    dwSize: u32,
    szDeviceType: [17]CHAR,
    szDeviceName: [129]CHAR,
};

pub const RASCTRYINFO = extern struct {
    dwSize: u32,
    dwCountryID: u32,
    dwNextCountryID: u32,
    dwCountryCode: u32,
    dwCountryNameOffset: u32,
};

pub const RASENTRYA = extern struct {
    dwSize: u32,
    dwfOptions: u32,
    dwCountryID: u32,
    dwCountryCode: u32,
    szAreaCode: [11]CHAR,
    szLocalPhoneNumber: [129]CHAR,
    dwAlternateOffset: u32,
    ipaddr: RASIPADDR,
    ipaddrDns: RASIPADDR,
    ipaddrDnsAlt: RASIPADDR,
    ipaddrWins: RASIPADDR,
    ipaddrWinsAlt: RASIPADDR,
    dwFrameSize: u32,
    dwfNetProtocols: u32,
    dwFramingProtocol: u32,
    szScript: [260]CHAR,
    szAutodialDll: [260]CHAR,
    szAutodialFunc: [260]CHAR,
    szDeviceType: [17]CHAR,
    szDeviceName: [129]CHAR,
    szX25PadType: [33]CHAR,
    szX25Address: [201]CHAR,
    szX25Facilities: [201]CHAR,
    szX25UserData: [201]CHAR,
    dwChannels: u32,
    dwReserved1: u32,
    dwReserved2: u32,
    dwSubEntries: u32,
    dwDialMode: RASENTRY_DIAL_MODE,
    dwDialExtraPercent: u32,
    dwDialExtraSampleSeconds: u32,
    dwHangUpExtraPercent: u32,
    dwHangUpExtraSampleSeconds: u32,
    dwIdleDisconnectSeconds: u32,
    dwType: u32,
    dwEncryptionType: u32,
    dwCustomAuthKey: u32,
    guidId: Guid,
    szCustomDialDll: [260]CHAR,
    dwVpnStrategy: u32,
    dwfOptions2: u32,
    dwfOptions3: u32,
    szDnsSuffix: [256]CHAR,
    dwTcpWindowSize: u32,
    szPrerequisitePbk: [260]CHAR,
    szPrerequisiteEntry: [257]CHAR,
    dwRedialCount: u32,
    dwRedialPause: u32,
    ipv6addrDns: IN6_ADDR,
    ipv6addrDnsAlt: IN6_ADDR,
    dwIPv4InterfaceMetric: u32,
    dwIPv6InterfaceMetric: u32,
    ipv6addr: IN6_ADDR,
    dwIPv6PrefixLength: u32,
    dwNetworkOutageTime: u32,
    szIDi: [257]CHAR,
    szIDr: [257]CHAR,
    fIsImsConfig: BOOL,
    IdiType: IKEV2_ID_PAYLOAD_TYPE,
    IdrType: IKEV2_ID_PAYLOAD_TYPE,
    fDisableIKEv2Fragmentation: BOOL,
};

pub const RASENTRYW = extern struct {
    dwSize: u32,
    dwfOptions: u32,
    dwCountryID: u32,
    dwCountryCode: u32,
    szAreaCode: [11]u16,
    szLocalPhoneNumber: [129]u16,
    dwAlternateOffset: u32,
    ipaddr: RASIPADDR,
    ipaddrDns: RASIPADDR,
    ipaddrDnsAlt: RASIPADDR,
    ipaddrWins: RASIPADDR,
    ipaddrWinsAlt: RASIPADDR,
    dwFrameSize: u32,
    dwfNetProtocols: u32,
    dwFramingProtocol: u32,
    szScript: [260]u16,
    szAutodialDll: [260]u16,
    szAutodialFunc: [260]u16,
    szDeviceType: [17]u16,
    szDeviceName: [129]u16,
    szX25PadType: [33]u16,
    szX25Address: [201]u16,
    szX25Facilities: [201]u16,
    szX25UserData: [201]u16,
    dwChannels: u32,
    dwReserved1: u32,
    dwReserved2: u32,
    dwSubEntries: u32,
    dwDialMode: RASENTRY_DIAL_MODE,
    dwDialExtraPercent: u32,
    dwDialExtraSampleSeconds: u32,
    dwHangUpExtraPercent: u32,
    dwHangUpExtraSampleSeconds: u32,
    dwIdleDisconnectSeconds: u32,
    dwType: u32,
    dwEncryptionType: u32,
    dwCustomAuthKey: u32,
    guidId: Guid,
    szCustomDialDll: [260]u16,
    dwVpnStrategy: u32,
    dwfOptions2: u32,
    dwfOptions3: u32,
    szDnsSuffix: [256]u16,
    dwTcpWindowSize: u32,
    szPrerequisitePbk: [260]u16,
    szPrerequisiteEntry: [257]u16,
    dwRedialCount: u32,
    dwRedialPause: u32,
    ipv6addrDns: IN6_ADDR,
    ipv6addrDnsAlt: IN6_ADDR,
    dwIPv4InterfaceMetric: u32,
    dwIPv6InterfaceMetric: u32,
    ipv6addr: IN6_ADDR,
    dwIPv6PrefixLength: u32,
    dwNetworkOutageTime: u32,
    szIDi: [257]u16,
    szIDr: [257]u16,
    fIsImsConfig: BOOL,
    IdiType: IKEV2_ID_PAYLOAD_TYPE,
    IdrType: IKEV2_ID_PAYLOAD_TYPE,
    fDisableIKEv2Fragmentation: BOOL,
};

pub const ORASADFUNC = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?HWND,
        param1: ?PSTR,
        param2: u32,
        param3: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?HWND,
        param1: ?PSTR,
        param2: u32,
        param3: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const RASADPARAMS = extern struct {
    dwSize: u32 align(4),
    hwndOwner: ?HWND align(4),
    dwFlags: u32 align(4),
    xDlg: i32 align(4),
    yDlg: i32 align(4),
};

pub const RASADFUNCA = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?PSTR,
        param1: ?PSTR,
        param2: ?*RASADPARAMS,
        param3: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?PSTR,
        param1: ?PSTR,
        param2: ?*RASADPARAMS,
        param3: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const RASADFUNCW = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?PWSTR,
        param1: ?PWSTR,
        param2: ?*RASADPARAMS,
        param3: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?PWSTR,
        param1: ?PWSTR,
        param2: ?*RASADPARAMS,
        param3: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const RASSUBENTRYA = extern struct {
    dwSize: u32,
    dwfFlags: u32,
    szDeviceType: [17]CHAR,
    szDeviceName: [129]CHAR,
    szLocalPhoneNumber: [129]CHAR,
    dwAlternateOffset: u32,
};

pub const RASSUBENTRYW = extern struct {
    dwSize: u32,
    dwfFlags: u32,
    szDeviceType: [17]u16,
    szDeviceName: [129]u16,
    szLocalPhoneNumber: [129]u16,
    dwAlternateOffset: u32,
};

pub const RASCREDENTIALSA = extern struct {
    dwSize: u32,
    dwMask: u32,
    szUserName: [257]CHAR,
    szPassword: [257]CHAR,
    szDomain: [16]CHAR,
};

pub const RASCREDENTIALSW = extern struct {
    dwSize: u32,
    dwMask: u32,
    szUserName: [257]u16,
    szPassword: [257]u16,
    szDomain: [16]u16,
};

pub const RASAUTODIALENTRYA = extern struct {
    dwSize: u32,
    dwFlags: u32,
    dwDialingLocation: u32,
    szEntry: [257]CHAR,
};

pub const RASAUTODIALENTRYW = extern struct {
    dwSize: u32,
    dwFlags: u32,
    dwDialingLocation: u32,
    szEntry: [257]u16,
};

pub const RASEAPUSERIDENTITYA = extern struct {
    szUserName: [257]CHAR,
    dwSizeofEapInfo: u32,
    pbEapInfo: [1]u8,
};

pub const RASEAPUSERIDENTITYW = extern struct {
    szUserName: [257]u16,
    dwSizeofEapInfo: u32,
    pbEapInfo: [1]u8,
};

pub const PFNRASGETBUFFER = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        ppBuffer: ?*?*u8,
        pdwSize: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        ppBuffer: ?*?*u8,
        pdwSize: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PFNRASFREEBUFFER = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        pBufer: ?*u8,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        pBufer: ?*u8,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PFNRASSENDBUFFER = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hPort: ?HANDLE,
        pBuffer: ?*u8,
        dwSize: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        hPort: ?HANDLE,
        pBuffer: ?*u8,
        dwSize: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PFNRASRECEIVEBUFFER = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hPort: ?HANDLE,
        pBuffer: ?*u8,
        pdwSize: ?*u32,
        dwTimeOut: u32,
        hEvent: ?HANDLE,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        hPort: ?HANDLE,
        pBuffer: ?*u8,
        pdwSize: ?*u32,
        dwTimeOut: u32,
        hEvent: ?HANDLE,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PFNRASRETRIEVEBUFFER = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hPort: ?HANDLE,
        pBuffer: ?*u8,
        pdwSize: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        hPort: ?HANDLE,
        pBuffer: ?*u8,
        pdwSize: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const RasCustomScriptExecuteFn = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hPort: ?HANDLE,
        lpszPhonebook: ?[*:0]const u16,
        lpszEntryName: ?[*:0]const u16,
        pfnRasGetBuffer: ?PFNRASGETBUFFER,
        pfnRasFreeBuffer: ?PFNRASFREEBUFFER,
        pfnRasSendBuffer: ?PFNRASSENDBUFFER,
        pfnRasReceiveBuffer: ?PFNRASRECEIVEBUFFER,
        pfnRasRetrieveBuffer: ?PFNRASRETRIEVEBUFFER,
        hWnd: ?HWND,
        pRasDialParams: ?*RASDIALPARAMSA,
        pvReserved: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        hPort: ?HANDLE,
        lpszPhonebook: ?[*:0]const u16,
        lpszEntryName: ?[*:0]const u16,
        pfnRasGetBuffer: ?PFNRASGETBUFFER,
        pfnRasFreeBuffer: ?PFNRASFREEBUFFER,
        pfnRasSendBuffer: ?PFNRASSENDBUFFER,
        pfnRasReceiveBuffer: ?PFNRASRECEIVEBUFFER,
        pfnRasRetrieveBuffer: ?PFNRASRETRIEVEBUFFER,
        hWnd: ?HWND,
        pRasDialParams: ?*RASDIALPARAMSA,
        pvReserved: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const RASCOMMSETTINGS = extern struct {
    dwSize: u32,
    bParity: u8,
    bStop: u8,
    bByteSize: u8,
    bAlign: u8,
};

pub const PFNRASSETCOMMSETTINGS = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hPort: ?HANDLE,
        pRasCommSettings: ?*RASCOMMSETTINGS,
        pvReserved: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        hPort: ?HANDLE,
        pRasCommSettings: ?*RASCOMMSETTINGS,
        pvReserved: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const RASCUSTOMSCRIPTEXTENSIONS = extern struct {
    dwSize: u32 align(4),
    pfnRasSetCommSettings: ?PFNRASSETCOMMSETTINGS align(4),
};

pub const RAS_STATS = extern struct {
    dwSize: u32,
    dwBytesXmited: u32,
    dwBytesRcved: u32,
    dwFramesXmited: u32,
    dwFramesRcved: u32,
    dwCrcErr: u32,
    dwTimeoutErr: u32,
    dwAlignmentErr: u32,
    dwHardwareOverrunErr: u32,
    dwFramingErr: u32,
    dwBufferOverrunErr: u32,
    dwCompressionRatioIn: u32,
    dwCompressionRatioOut: u32,
    dwBps: u32,
    dwConnectDuration: u32,
};

pub const RasCustomHangUpFn = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hRasConn: ?HRASCONN,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        hRasConn: ?HRASCONN,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const RasCustomDialFn = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hInstDll: ?HINSTANCE,
        lpRasDialExtensions: ?*RASDIALEXTENSIONS,
        lpszPhonebook: ?[*:0]const u16,
        lpRasDialParams: ?*RASDIALPARAMSA,
        dwNotifierType: u32,
        lpvNotifier: ?*anyopaque,
        lphRasConn: ?*?HRASCONN,
        dwFlags: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        hInstDll: ?HINSTANCE,
        lpRasDialExtensions: ?*RASDIALEXTENSIONS,
        lpszPhonebook: ?[*:0]const u16,
        lpRasDialParams: ?*RASDIALPARAMSA,
        dwNotifierType: u32,
        lpvNotifier: ?*anyopaque,
        lphRasConn: ?*?HRASCONN,
        dwFlags: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

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

pub const RASUPDATECONN = extern struct {
    version: RASAPIVERSION,
    dwSize: u32,
    dwFlags: u32,
    dwIfIndex: u32,
    localEndPoint: RASTUNNELENDPOINT,
    remoteEndPoint: RASTUNNELENDPOINT,
};

pub const RASPBDLGFUNCW = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: usize,
        param1: u32,
        param2: ?PWSTR,
        param3: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: usize,
        param1: u32,
        param2: ?PWSTR,
        param3: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const RASPBDLGFUNCA = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: usize,
        param1: u32,
        param2: ?PSTR,
        param3: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: usize,
        param1: u32,
        param2: ?PSTR,
        param3: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const RASNOUSERW = extern struct {
    dwSize: u32,
    dwFlags: u32,
    dwTimeoutMs: u32,
    szUserName: [257]u16,
    szPassword: [257]u16,
    szDomain: [16]u16,
};

pub const RASNOUSERA = extern struct {
    dwSize: u32,
    dwFlags: u32,
    dwTimeoutMs: u32,
    szUserName: [257]CHAR,
    szPassword: [257]CHAR,
    szDomain: [16]CHAR,
};

pub const RASPBDLGW = extern struct {
    dwSize: u32 align(4),
    hwndOwner: ?HWND align(4),
    dwFlags: u32 align(4),
    xDlg: i32 align(4),
    yDlg: i32 align(4),
    dwCallbackId: usize align(4),
    pCallback: ?RASPBDLGFUNCW align(4),
    dwError: u32 align(4),
    reserved: usize align(4),
    reserved2: usize align(4),
};

pub const RASPBDLGA = extern struct {
    dwSize: u32 align(4),
    hwndOwner: ?HWND align(4),
    dwFlags: u32 align(4),
    xDlg: i32 align(4),
    yDlg: i32 align(4),
    dwCallbackId: usize align(4),
    pCallback: ?RASPBDLGFUNCA align(4),
    dwError: u32 align(4),
    reserved: usize align(4),
    reserved2: usize align(4),
};

pub const RASENTRYDLGW = extern struct {
    dwSize: u32 align(4),
    hwndOwner: ?HWND align(4),
    dwFlags: u32 align(4),
    xDlg: i32 align(4),
    yDlg: i32 align(4),
    szEntry: [257]u16 align(4),
    dwError: u32 align(4),
    reserved: usize align(4),
    reserved2: usize align(4),
};

pub const RASENTRYDLGA = extern struct {
    dwSize: u32 align(4),
    hwndOwner: ?HWND align(4),
    dwFlags: u32 align(4),
    xDlg: i32 align(4),
    yDlg: i32 align(4),
    szEntry: [257]CHAR align(4),
    dwError: u32 align(4),
    reserved: usize align(4),
    reserved2: usize align(4),
};

pub const RASDIALDLG = extern struct {
    dwSize: u32 align(4),
    hwndOwner: ?HWND align(4),
    dwFlags: u32 align(4),
    xDlg: i32 align(4),
    yDlg: i32 align(4),
    dwSubEntry: u32 align(4),
    dwError: u32 align(4),
    reserved: usize align(4),
    reserved2: usize align(4),
};

pub const RasCustomDialDlgFn = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hInstDll: ?HINSTANCE,
        dwFlags: u32,
        lpszPhonebook: ?PWSTR,
        lpszEntry: ?PWSTR,
        lpszPhoneNumber: ?PWSTR,
        lpInfo: ?*RASDIALDLG,
        pvInfo: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        hInstDll: ?HINSTANCE,
        dwFlags: u32,
        lpszPhonebook: ?PWSTR,
        lpszEntry: ?PWSTR,
        lpszPhoneNumber: ?PWSTR,
        lpInfo: ?*RASDIALDLG,
        pvInfo: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const RasCustomEntryDlgFn = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hInstDll: ?HINSTANCE,
        lpszPhonebook: ?PWSTR,
        lpszEntry: ?PWSTR,
        lpInfo: ?*RASENTRYDLGA,
        dwFlags: u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        hInstDll: ?HINSTANCE,
        lpszPhonebook: ?PWSTR,
        lpszEntry: ?PWSTR,
        lpInfo: ?*RASENTRYDLGA,
        dwFlags: u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const ROUTER_INTERFACE_TYPE = enum(i32) {
    CLIENT = 0,
    HOME_ROUTER = 1,
    FULL_ROUTER = 2,
    DEDICATED = 3,
    INTERNAL = 4,
    LOOPBACK = 5,
    TUNNEL1 = 6,
    DIALOUT = 7,
    MAX = 8,
};
pub const ROUTER_IF_TYPE_CLIENT = ROUTER_INTERFACE_TYPE.CLIENT;
pub const ROUTER_IF_TYPE_HOME_ROUTER = ROUTER_INTERFACE_TYPE.HOME_ROUTER;
pub const ROUTER_IF_TYPE_FULL_ROUTER = ROUTER_INTERFACE_TYPE.FULL_ROUTER;
pub const ROUTER_IF_TYPE_DEDICATED = ROUTER_INTERFACE_TYPE.DEDICATED;
pub const ROUTER_IF_TYPE_INTERNAL = ROUTER_INTERFACE_TYPE.INTERNAL;
pub const ROUTER_IF_TYPE_LOOPBACK = ROUTER_INTERFACE_TYPE.LOOPBACK;
pub const ROUTER_IF_TYPE_TUNNEL1 = ROUTER_INTERFACE_TYPE.TUNNEL1;
pub const ROUTER_IF_TYPE_DIALOUT = ROUTER_INTERFACE_TYPE.DIALOUT;
pub const ROUTER_IF_TYPE_MAX = ROUTER_INTERFACE_TYPE.MAX;

pub const ROUTER_CONNECTION_STATE = enum(i32) {
    UNREACHABLE = 0,
    DISCONNECTED = 1,
    CONNECTING = 2,
    CONNECTED = 3,
};
pub const ROUTER_IF_STATE_UNREACHABLE = ROUTER_CONNECTION_STATE.UNREACHABLE;
pub const ROUTER_IF_STATE_DISCONNECTED = ROUTER_CONNECTION_STATE.DISCONNECTED;
pub const ROUTER_IF_STATE_CONNECTING = ROUTER_CONNECTION_STATE.CONNECTING;
pub const ROUTER_IF_STATE_CONNECTED = ROUTER_CONNECTION_STATE.CONNECTED;

pub const MPR_INTERFACE_0 = extern struct {
    wszInterfaceName: [257]u16,
    hInterface: ?HANDLE,
    fEnabled: BOOL,
    dwIfType: ROUTER_INTERFACE_TYPE,
    dwConnectionState: ROUTER_CONNECTION_STATE,
    fUnReachabilityReasons: u32,
    dwLastError: u32,
};

pub const MPR_IPINIP_INTERFACE_0 = extern struct {
    wszFriendlyName: [257]u16,
    Guid: Guid,
};

pub const MPR_INTERFACE_1 = extern struct {
    wszInterfaceName: [257]u16,
    hInterface: ?HANDLE,
    fEnabled: BOOL,
    dwIfType: ROUTER_INTERFACE_TYPE,
    dwConnectionState: ROUTER_CONNECTION_STATE,
    fUnReachabilityReasons: u32,
    dwLastError: u32,
    lpwsDialoutHoursRestriction: ?PWSTR,
};

pub const MPR_INTERFACE_2 = extern struct {
    wszInterfaceName: [257]u16,
    hInterface: ?HANDLE,
    fEnabled: BOOL,
    dwIfType: ROUTER_INTERFACE_TYPE,
    dwConnectionState: ROUTER_CONNECTION_STATE,
    fUnReachabilityReasons: u32,
    dwLastError: u32,
    dwfOptions: u32,
    szLocalPhoneNumber: [129]u16,
    szAlternates: ?[*]u16,
    ipaddr: u32,
    ipaddrDns: u32,
    ipaddrDnsAlt: u32,
    ipaddrWins: u32,
    ipaddrWinsAlt: u32,
    dwfNetProtocols: u32,
    szDeviceType: [17]u16,
    szDeviceName: [129]u16,
    szX25PadType: [33]u16,
    szX25Address: [201]u16,
    szX25Facilities: [201]u16,
    szX25UserData: [201]u16,
    dwChannels: u32,
    dwSubEntries: u32,
    dwDialMode: MPR_INTERFACE_DIAL_MODE,
    dwDialExtraPercent: u32,
    dwDialExtraSampleSeconds: u32,
    dwHangUpExtraPercent: u32,
    dwHangUpExtraSampleSeconds: u32,
    dwIdleDisconnectSeconds: u32,
    dwType: u32,
    dwEncryptionType: MPR_ET,
    dwCustomAuthKey: u32,
    dwCustomAuthDataSize: u32,
    lpbCustomAuthData: ?*u8,
    guidId: Guid,
    dwVpnStrategy: MPR_VS,
};

pub const MPR_INTERFACE_3 = extern struct {
    wszInterfaceName: [257]u16,
    hInterface: ?HANDLE,
    fEnabled: BOOL,
    dwIfType: ROUTER_INTERFACE_TYPE,
    dwConnectionState: ROUTER_CONNECTION_STATE,
    fUnReachabilityReasons: u32,
    dwLastError: u32,
    dwfOptions: u32,
    szLocalPhoneNumber: [129]u16,
    szAlternates: ?[*]u16,
    ipaddr: u32,
    ipaddrDns: u32,
    ipaddrDnsAlt: u32,
    ipaddrWins: u32,
    ipaddrWinsAlt: u32,
    dwfNetProtocols: u32,
    szDeviceType: [17]u16,
    szDeviceName: [129]u16,
    szX25PadType: [33]u16,
    szX25Address: [201]u16,
    szX25Facilities: [201]u16,
    szX25UserData: [201]u16,
    dwChannels: u32,
    dwSubEntries: u32,
    dwDialMode: MPR_INTERFACE_DIAL_MODE,
    dwDialExtraPercent: u32,
    dwDialExtraSampleSeconds: u32,
    dwHangUpExtraPercent: u32,
    dwHangUpExtraSampleSeconds: u32,
    dwIdleDisconnectSeconds: u32,
    dwType: u32,
    dwEncryptionType: MPR_ET,
    dwCustomAuthKey: u32,
    dwCustomAuthDataSize: u32,
    lpbCustomAuthData: ?*u8,
    guidId: Guid,
    dwVpnStrategy: MPR_VS,
    AddressCount: u32,
    ipv6addrDns: IN6_ADDR,
    ipv6addrDnsAlt: IN6_ADDR,
    ipv6addr: ?*IN6_ADDR,
};

pub const MPR_DEVICE_0 = extern struct {
    szDeviceType: [17]u16,
    szDeviceName: [129]u16,
};

pub const MPR_DEVICE_1 = extern struct {
    szDeviceType: [17]u16,
    szDeviceName: [129]u16,
    szLocalPhoneNumber: [129]u16,
    szAlternates: ?[*]u16,
};

pub const MPR_CREDENTIALSEX_0 = extern struct {
    dwSize: u32,
    lpbCredentialsInfo: ?*u8,
};

pub const MPR_CREDENTIALSEX_1 = extern struct {
    dwSize: u32,
    lpbCredentialsInfo: ?*u8,
};

pub const MPR_TRANSPORT_0 = extern struct {
    dwTransportId: u32,
    hTransport: ?HANDLE,
    wszTransportName: [41]u16,
};

pub const MPR_IFTRANSPORT_0 = extern struct {
    dwTransportId: u32,
    hIfTransport: ?HANDLE,
    wszIfTransportName: [41]u16,
};

pub const MPR_SERVER_0 = extern struct {
    fLanOnlyMode: BOOL,
    dwUpTime: u32,
    dwTotalPorts: u32,
    dwPortsInUse: u32,
};

pub const MPR_SERVER_1 = extern struct {
    dwNumPptpPorts: u32,
    dwPptpPortFlags: u32,
    dwNumL2tpPorts: u32,
    dwL2tpPortFlags: u32,
};

pub const MPR_SERVER_2 = extern struct {
    dwNumPptpPorts: u32,
    dwPptpPortFlags: u32,
    dwNumL2tpPorts: u32,
    dwL2tpPortFlags: u32,
    dwNumSstpPorts: u32,
    dwSstpPortFlags: u32,
};

pub const RAS_PORT_CONDITION = enum(i32) {
    NON_OPERATIONAL = 0,
    DISCONNECTED = 1,
    CALLING_BACK = 2,
    LISTENING = 3,
    AUTHENTICATING = 4,
    AUTHENTICATED = 5,
    INITIALIZING = 6,
};
pub const RAS_PORT_NON_OPERATIONAL = RAS_PORT_CONDITION.NON_OPERATIONAL;
pub const RAS_PORT_DISCONNECTED = RAS_PORT_CONDITION.DISCONNECTED;
pub const RAS_PORT_CALLING_BACK = RAS_PORT_CONDITION.CALLING_BACK;
pub const RAS_PORT_LISTENING = RAS_PORT_CONDITION.LISTENING;
pub const RAS_PORT_AUTHENTICATING = RAS_PORT_CONDITION.AUTHENTICATING;
pub const RAS_PORT_AUTHENTICATED = RAS_PORT_CONDITION.AUTHENTICATED;
pub const RAS_PORT_INITIALIZING = RAS_PORT_CONDITION.INITIALIZING;

pub const RAS_HARDWARE_CONDITION = enum(i32) {
    OPERATIONAL = 0,
    FAILURE = 1,
};
pub const RAS_HARDWARE_OPERATIONAL = RAS_HARDWARE_CONDITION.OPERATIONAL;
pub const RAS_HARDWARE_FAILURE = RAS_HARDWARE_CONDITION.FAILURE;

pub const RAS_PORT_0 = extern struct {
    hPort: ?HANDLE,
    hConnection: ?HANDLE,
    dwPortCondition: RAS_PORT_CONDITION,
    dwTotalNumberOfCalls: u32,
    dwConnectDuration: u32,
    wszPortName: [17]u16,
    wszMediaName: [17]u16,
    wszDeviceName: [129]u16,
    wszDeviceType: [17]u16,
};

pub const RAS_PORT_1 = extern struct {
    hPort: ?HANDLE,
    hConnection: ?HANDLE,
    dwHardwareCondition: RAS_HARDWARE_CONDITION,
    dwLineSpeed: u32,
    dwBytesXmited: u32,
    dwBytesRcved: u32,
    dwFramesXmited: u32,
    dwFramesRcved: u32,
    dwCrcErr: u32,
    dwTimeoutErr: u32,
    dwAlignmentErr: u32,
    dwHardwareOverrunErr: u32,
    dwFramingErr: u32,
    dwBufferOverrunErr: u32,
    dwCompressionRatioIn: u32,
    dwCompressionRatioOut: u32,
};

pub const RAS_PORT_2 = extern struct {
    hPort: ?HANDLE,
    hConnection: ?HANDLE,
    dwConn_State: u32,
    wszPortName: [17]u16,
    wszMediaName: [17]u16,
    wszDeviceName: [129]u16,
    wszDeviceType: [17]u16,
    dwHardwareCondition: RAS_HARDWARE_CONDITION,
    dwLineSpeed: u32,
    dwCrcErr: u32,
    dwSerialOverRunErrs: u32,
    dwTimeoutErr: u32,
    dwAlignmentErr: u32,
    dwHardwareOverrunErr: u32,
    dwFramingErr: u32,
    dwBufferOverrunErr: u32,
    dwCompressionRatioIn: u32,
    dwCompressionRatioOut: u32,
    dwTotalErrors: u32,
    ullBytesXmited: u64,
    ullBytesRcved: u64,
    ullFramesXmited: u64,
    ullFramesRcved: u64,
    ullBytesTxUncompressed: u64,
    ullBytesTxCompressed: u64,
    ullBytesRcvUncompressed: u64,
    ullBytesRcvCompressed: u64,
};

pub const PPP_NBFCP_INFO = extern struct {
    dwError: u32,
    wszWksta: [17]u16,
};

pub const PPP_IPCP_INFO = extern struct {
    dwError: u32,
    wszAddress: [16]u16,
    wszRemoteAddress: [16]u16,
};

pub const PPP_IPCP_INFO2 = extern struct {
    dwError: u32,
    wszAddress: [16]u16,
    wszRemoteAddress: [16]u16,
    dwOptions: u32,
    dwRemoteOptions: u32,
};

pub const PPP_IPXCP_INFO = extern struct {
    dwError: u32,
    wszAddress: [23]u16,
};

pub const PPP_ATCP_INFO = extern struct {
    dwError: u32,
    wszAddress: [33]u16,
};

pub const PPP_IPV6_CP_INFO = extern struct {
    dwVersion: u32,
    dwSize: u32,
    dwError: u32,
    bInterfaceIdentifier: [8]u8,
    bRemoteInterfaceIdentifier: [8]u8,
    dwOptions: u32,
    dwRemoteOptions: u32,
    bPrefix: [8]u8,
    dwPrefixLength: u32,
};

pub const PPP_INFO = extern struct {
    nbf: PPP_NBFCP_INFO,
    ip: PPP_IPCP_INFO,
    ipx: PPP_IPXCP_INFO,
    at: PPP_ATCP_INFO,
};

pub const PPP_CCP_INFO = extern struct {
    dwError: u32,
    dwCompressionAlgorithm: u32,
    dwOptions: u32,
    dwRemoteCompressionAlgorithm: u32,
    dwRemoteOptions: u32,
};

pub const PPP_LCP_INFO = extern struct {
    dwError: u32,
    dwAuthenticationProtocol: PPP_LCP,
    dwAuthenticationData: PPP_LCP_INFO_AUTH_DATA,
    dwRemoteAuthenticationProtocol: u32,
    dwRemoteAuthenticationData: u32,
    dwTerminateReason: u32,
    dwRemoteTerminateReason: u32,
    dwOptions: u32,
    dwRemoteOptions: u32,
    dwEapTypeId: u32,
    dwRemoteEapTypeId: u32,
};

pub const PPP_INFO_2 = extern struct {
    nbf: PPP_NBFCP_INFO,
    ip: PPP_IPCP_INFO2,
    ipx: PPP_IPXCP_INFO,
    at: PPP_ATCP_INFO,
    ccp: PPP_CCP_INFO,
    lcp: PPP_LCP_INFO,
};

pub const PPP_INFO_3 = extern struct {
    nbf: PPP_NBFCP_INFO,
    ip: PPP_IPCP_INFO2,
    ipv6: PPP_IPV6_CP_INFO,
    ccp: PPP_CCP_INFO,
    lcp: PPP_LCP_INFO,
};

pub const RAS_CONNECTION_0 = extern struct {
    hConnection: ?HANDLE,
    hInterface: ?HANDLE,
    dwConnectDuration: u32,
    dwInterfaceType: ROUTER_INTERFACE_TYPE,
    dwConnectionFlags: RAS_FLAGS,
    wszInterfaceName: [257]u16,
    wszUserName: [257]u16,
    wszLogonDomain: [16]u16,
    wszRemoteComputer: [17]u16,
};

pub const RAS_CONNECTION_1 = extern struct {
    hConnection: ?HANDLE,
    hInterface: ?HANDLE,
    PppInfo: PPP_INFO,
    dwBytesXmited: u32,
    dwBytesRcved: u32,
    dwFramesXmited: u32,
    dwFramesRcved: u32,
    dwCrcErr: u32,
    dwTimeoutErr: u32,
    dwAlignmentErr: u32,
    dwHardwareOverrunErr: u32,
    dwFramingErr: u32,
    dwBufferOverrunErr: u32,
    dwCompressionRatioIn: u32,
    dwCompressionRatioOut: u32,
};

pub const RAS_CONNECTION_2 = extern struct {
    hConnection: ?HANDLE,
    wszUserName: [257]u16,
    dwInterfaceType: ROUTER_INTERFACE_TYPE,
    guid: Guid,
    PppInfo2: PPP_INFO_2,
};

pub const RAS_QUARANTINE_STATE = enum(i32) {
    NORMAL = 0,
    QUARANTINE = 1,
    PROBATION = 2,
    NOT_CAPABLE = 3,
};
pub const RAS_QUAR_STATE_NORMAL = RAS_QUARANTINE_STATE.NORMAL;
pub const RAS_QUAR_STATE_QUARANTINE = RAS_QUARANTINE_STATE.QUARANTINE;
pub const RAS_QUAR_STATE_PROBATION = RAS_QUARANTINE_STATE.PROBATION;
pub const RAS_QUAR_STATE_NOT_CAPABLE = RAS_QUARANTINE_STATE.NOT_CAPABLE;

pub const RAS_CONNECTION_3 = extern struct {
    dwVersion: u32,
    dwSize: u32,
    hConnection: ?HANDLE,
    wszUserName: [257]u16,
    dwInterfaceType: ROUTER_INTERFACE_TYPE,
    guid: Guid,
    PppInfo3: PPP_INFO_3,
    rasQuarState: RAS_QUARANTINE_STATE,
    timer: FILETIME,
};

pub const RAS_USER_0 = extern struct {
    bfPrivilege: u8,
    wszPhoneNumber: [129]u16,
};

pub const RAS_USER_1 = extern struct {
    bfPrivilege: u8,
    wszPhoneNumber: [129]u16,
    bfPrivilege2: u8,
};

pub const MPR_FILTER_0 = extern struct {
    fEnable: BOOL,
};

pub const MPRAPI_OBJECT_HEADER = extern struct {
    revision: u8,
    type: u8,
    size: u16,
};

pub const MPRAPI_OBJECT_TYPE = enum(i32) {
    RAS_CONNECTION_OBJECT = 1,
    MPR_SERVER_OBJECT = 2,
    MPR_SERVER_SET_CONFIG_OBJECT = 3,
    AUTH_VALIDATION_OBJECT = 4,
    UPDATE_CONNECTION_OBJECT = 5,
    IF_CUSTOM_CONFIG_OBJECT = 6,
};
pub const MPRAPI_OBJECT_TYPE_RAS_CONNECTION_OBJECT = MPRAPI_OBJECT_TYPE.RAS_CONNECTION_OBJECT;
pub const MPRAPI_OBJECT_TYPE_MPR_SERVER_OBJECT = MPRAPI_OBJECT_TYPE.MPR_SERVER_OBJECT;
pub const MPRAPI_OBJECT_TYPE_MPR_SERVER_SET_CONFIG_OBJECT = MPRAPI_OBJECT_TYPE.MPR_SERVER_SET_CONFIG_OBJECT;
pub const MPRAPI_OBJECT_TYPE_AUTH_VALIDATION_OBJECT = MPRAPI_OBJECT_TYPE.AUTH_VALIDATION_OBJECT;
pub const MPRAPI_OBJECT_TYPE_UPDATE_CONNECTION_OBJECT = MPRAPI_OBJECT_TYPE.UPDATE_CONNECTION_OBJECT;
pub const MPRAPI_OBJECT_TYPE_IF_CUSTOM_CONFIG_OBJECT = MPRAPI_OBJECT_TYPE.IF_CUSTOM_CONFIG_OBJECT;

pub const PPP_PROJECTION_INFO = extern struct {
    dwIPv4NegotiationError: u32,
    wszAddress: [16]u16,
    wszRemoteAddress: [16]u16,
    dwIPv4Options: u32,
    dwIPv4RemoteOptions: u32,
    IPv4SubInterfaceIndex: u64,
    dwIPv6NegotiationError: u32,
    bInterfaceIdentifier: [8]u8,
    bRemoteInterfaceIdentifier: [8]u8,
    bPrefix: [8]u8,
    dwPrefixLength: u32,
    IPv6SubInterfaceIndex: u64,
    dwLcpError: u32,
    dwAuthenticationProtocol: PPP_LCP,
    dwAuthenticationData: PPP_LCP_INFO_AUTH_DATA,
    dwRemoteAuthenticationProtocol: PPP_LCP,
    dwRemoteAuthenticationData: PPP_LCP_INFO_AUTH_DATA,
    dwLcpTerminateReason: u32,
    dwLcpRemoteTerminateReason: u32,
    dwLcpOptions: u32,
    dwLcpRemoteOptions: u32,
    dwEapTypeId: u32,
    dwRemoteEapTypeId: u32,
    dwCcpError: u32,
    dwCompressionAlgorithm: u32,
    dwCcpOptions: u32,
    dwRemoteCompressionAlgorithm: u32,
    dwCcpRemoteOptions: u32,
};

pub const PPP_PROJECTION_INFO2 = extern struct {
    dwIPv4NegotiationError: u32,
    wszAddress: [16]u16,
    wszRemoteAddress: [16]u16,
    dwIPv4Options: u32,
    dwIPv4RemoteOptions: u32,
    IPv4SubInterfaceIndex: u64,
    dwIPv6NegotiationError: u32,
    bInterfaceIdentifier: [8]u8,
    bRemoteInterfaceIdentifier: [8]u8,
    bPrefix: [8]u8,
    dwPrefixLength: u32,
    IPv6SubInterfaceIndex: u64,
    dwLcpError: u32,
    dwAuthenticationProtocol: PPP_LCP,
    dwAuthenticationData: PPP_LCP_INFO_AUTH_DATA,
    dwRemoteAuthenticationProtocol: PPP_LCP,
    dwRemoteAuthenticationData: PPP_LCP_INFO_AUTH_DATA,
    dwLcpTerminateReason: u32,
    dwLcpRemoteTerminateReason: u32,
    dwLcpOptions: u32,
    dwLcpRemoteOptions: u32,
    dwEapTypeId: u32,
    dwEmbeddedEAPTypeId: u32,
    dwRemoteEapTypeId: u32,
    dwCcpError: u32,
    dwCompressionAlgorithm: u32,
    dwCcpOptions: u32,
    dwRemoteCompressionAlgorithm: u32,
    dwCcpRemoteOptions: u32,
};

pub const IKEV2_PROJECTION_INFO = extern struct {
    dwIPv4NegotiationError: u32,
    wszAddress: [16]u16,
    wszRemoteAddress: [16]u16,
    IPv4SubInterfaceIndex: u64,
    dwIPv6NegotiationError: u32,
    bInterfaceIdentifier: [8]u8,
    bRemoteInterfaceIdentifier: [8]u8,
    bPrefix: [8]u8,
    dwPrefixLength: u32,
    IPv6SubInterfaceIndex: u64,
    dwOptions: u32,
    dwAuthenticationProtocol: u32,
    dwEapTypeId: u32,
    dwCompressionAlgorithm: u32,
    dwEncryptionMethod: u32,
};

pub const IKEV2_PROJECTION_INFO2 = extern struct {
    dwIPv4NegotiationError: u32,
    wszAddress: [16]u16,
    wszRemoteAddress: [16]u16,
    IPv4SubInterfaceIndex: u64,
    dwIPv6NegotiationError: u32,
    bInterfaceIdentifier: [8]u8,
    bRemoteInterfaceIdentifier: [8]u8,
    bPrefix: [8]u8,
    dwPrefixLength: u32,
    IPv6SubInterfaceIndex: u64,
    dwOptions: u32,
    dwAuthenticationProtocol: u32,
    dwEapTypeId: u32,
    dwEmbeddedEAPTypeId: u32,
    dwCompressionAlgorithm: u32,
    dwEncryptionMethod: u32,
};

pub const PROJECTION_INFO = extern struct {
    projectionInfoType: u8,
    Anonymous: extern union {
        PppProjectionInfo: PPP_PROJECTION_INFO,
        Ikev2ProjectionInfo: IKEV2_PROJECTION_INFO,
    },
};

pub const PROJECTION_INFO2 = extern struct {
    projectionInfoType: u8,
    Anonymous: extern union {
        PppProjectionInfo: PPP_PROJECTION_INFO2,
        Ikev2ProjectionInfo: IKEV2_PROJECTION_INFO2,
    },
};

pub const RAS_CONNECTION_EX = extern struct {
    Header: MPRAPI_OBJECT_HEADER,
    dwConnectDuration: u32,
    dwInterfaceType: ROUTER_INTERFACE_TYPE,
    dwConnectionFlags: RAS_FLAGS,
    wszInterfaceName: [257]u16,
    wszUserName: [257]u16,
    wszLogonDomain: [16]u16,
    wszRemoteComputer: [17]u16,
    guid: Guid,
    rasQuarState: RAS_QUARANTINE_STATE,
    probationTime: FILETIME,
    dwBytesXmited: u32,
    dwBytesRcved: u32,
    dwFramesXmited: u32,
    dwFramesRcved: u32,
    dwCrcErr: u32,
    dwTimeoutErr: u32,
    dwAlignmentErr: u32,
    dwHardwareOverrunErr: u32,
    dwFramingErr: u32,
    dwBufferOverrunErr: u32,
    dwCompressionRatioIn: u32,
    dwCompressionRatioOut: u32,
    dwNumSwitchOvers: u32,
    wszRemoteEndpointAddress: [65]u16,
    wszLocalEndpointAddress: [65]u16,
    ProjectionInfo: PROJECTION_INFO,
    hConnection: ?HANDLE,
    hInterface: ?HANDLE,
};

pub const RAS_CONNECTION_4 = extern struct {
    dwConnectDuration: u32,
    dwInterfaceType: ROUTER_INTERFACE_TYPE,
    dwConnectionFlags: RAS_FLAGS,
    wszInterfaceName: [257]u16,
    wszUserName: [257]u16,
    wszLogonDomain: [16]u16,
    wszRemoteComputer: [17]u16,
    guid: Guid,
    rasQuarState: RAS_QUARANTINE_STATE,
    probationTime: FILETIME,
    connectionStartTime: FILETIME,
    ullBytesXmited: u64,
    ullBytesRcved: u64,
    dwFramesXmited: u32,
    dwFramesRcved: u32,
    dwCrcErr: u32,
    dwTimeoutErr: u32,
    dwAlignmentErr: u32,
    dwHardwareOverrunErr: u32,
    dwFramingErr: u32,
    dwBufferOverrunErr: u32,
    dwCompressionRatioIn: u32,
    dwCompressionRatioOut: u32,
    dwNumSwitchOvers: u32,
    wszRemoteEndpointAddress: [65]u16,
    wszLocalEndpointAddress: [65]u16,
    ProjectionInfo: PROJECTION_INFO2,
    hConnection: ?HANDLE,
    hInterface: ?HANDLE,
    dwDeviceType: u32,
};

pub const ROUTER_CUSTOM_IKEv2_POLICY0 = extern struct {
    dwIntegrityMethod: u32,
    dwEncryptionMethod: u32,
    dwCipherTransformConstant: u32,
    dwAuthTransformConstant: u32,
    dwPfsGroup: u32,
    dwDhGroup: u32,
};

pub const ROUTER_IKEv2_IF_CUSTOM_CONFIG0 = extern struct {
    dwSaLifeTime: u32,
    dwSaDataSize: u32,
    certificateName: CRYPTOAPI_BLOB,
    customPolicy: ?*ROUTER_CUSTOM_IKEv2_POLICY0,
};

pub const MPR_IF_CUSTOMINFOEX0 = extern struct {
    Header: MPRAPI_OBJECT_HEADER,
    dwFlags: u32,
    customIkev2Config: ROUTER_IKEv2_IF_CUSTOM_CONFIG0,
};

pub const MPR_CERT_EKU = extern struct {
    dwSize: u32,
    IsEKUOID: BOOL,
    pwszEKU: ?PWSTR,
};

pub const VPN_TS_IP_ADDRESS = extern struct {
    Type: u16,
    Anonymous: extern union {
        v4: IN_ADDR,
        v6: IN6_ADDR,
    },
};

pub const MPR_VPN_TS_TYPE = enum(i32) {
    @"4_ADDR_RANGE" = 7,
    @"6_ADDR_RANGE" = 8,
};
pub const MPR_VPN_TS_IPv4_ADDR_RANGE = MPR_VPN_TS_TYPE.@"4_ADDR_RANGE";
pub const MPR_VPN_TS_IPv6_ADDR_RANGE = MPR_VPN_TS_TYPE.@"6_ADDR_RANGE";

pub const _MPR_VPN_SELECTOR = extern struct {
    type: MPR_VPN_TS_TYPE,
    protocolId: u8,
    portStart: u16,
    portEnd: u16,
    tsPayloadId: u16,
    addrStart: VPN_TS_IP_ADDRESS,
    addrEnd: VPN_TS_IP_ADDRESS,
};

pub const MPR_VPN_TRAFFIC_SELECTORS = extern struct {
    numTsi: u32,
    numTsr: u32,
    tsI: ?*_MPR_VPN_SELECTOR,
    tsR: ?*_MPR_VPN_SELECTOR,
};

pub const ROUTER_IKEv2_IF_CUSTOM_CONFIG2 = extern struct {
    dwSaLifeTime: u32,
    dwSaDataSize: u32,
    certificateName: CRYPTOAPI_BLOB,
    customPolicy: ?*ROUTER_CUSTOM_IKEv2_POLICY0,
    certificateHash: CRYPTOAPI_BLOB,
    dwMmSaLifeTime: u32,
    vpnTrafficSelectors: MPR_VPN_TRAFFIC_SELECTORS,
};

pub const MPR_IF_CUSTOMINFOEX2 = extern struct {
    Header: MPRAPI_OBJECT_HEADER,
    dwFlags: u32,
    customIkev2Config: ROUTER_IKEv2_IF_CUSTOM_CONFIG2,
};

pub const IKEV2_TUNNEL_CONFIG_PARAMS4 = extern struct {
    dwIdleTimeout: u32,
    dwNetworkBlackoutTime: u32,
    dwSaLifeTime: u32,
    dwSaDataSizeForRenegotiation: u32,
    dwConfigOptions: u32,
    dwTotalCertificates: u32,
    certificateNames: ?*CRYPTOAPI_BLOB,
    machineCertificateName: CRYPTOAPI_BLOB,
    dwEncryptionType: u32,
    customPolicy: ?*ROUTER_CUSTOM_IKEv2_POLICY0,
    dwTotalEkus: u32,
    certificateEKUs: ?*MPR_CERT_EKU,
    machineCertificateHash: CRYPTOAPI_BLOB,
    dwMmSaLifeTime: u32,
};

pub const ROUTER_IKEv2_IF_CUSTOM_CONFIG1 = extern struct {
    dwSaLifeTime: u32,
    dwSaDataSize: u32,
    certificateName: CRYPTOAPI_BLOB,
    customPolicy: ?*ROUTER_CUSTOM_IKEv2_POLICY0,
    certificateHash: CRYPTOAPI_BLOB,
};

pub const MPR_IF_CUSTOMINFOEX1 = extern struct {
    Header: MPRAPI_OBJECT_HEADER,
    dwFlags: u32,
    customIkev2Config: ROUTER_IKEv2_IF_CUSTOM_CONFIG1,
};

pub const IKEV2_TUNNEL_CONFIG_PARAMS3 = extern struct {
    dwIdleTimeout: u32,
    dwNetworkBlackoutTime: u32,
    dwSaLifeTime: u32,
    dwSaDataSizeForRenegotiation: u32,
    dwConfigOptions: u32,
    dwTotalCertificates: u32,
    certificateNames: ?*CRYPTOAPI_BLOB,
    machineCertificateName: CRYPTOAPI_BLOB,
    dwEncryptionType: u32,
    customPolicy: ?*ROUTER_CUSTOM_IKEv2_POLICY0,
    dwTotalEkus: u32,
    certificateEKUs: ?*MPR_CERT_EKU,
    machineCertificateHash: CRYPTOAPI_BLOB,
};

pub const IKEV2_TUNNEL_CONFIG_PARAMS2 = extern struct {
    dwIdleTimeout: u32,
    dwNetworkBlackoutTime: u32,
    dwSaLifeTime: u32,
    dwSaDataSizeForRenegotiation: u32,
    dwConfigOptions: u32,
    dwTotalCertificates: u32,
    certificateNames: ?*CRYPTOAPI_BLOB,
    machineCertificateName: CRYPTOAPI_BLOB,
    dwEncryptionType: u32,
    customPolicy: ?*ROUTER_CUSTOM_IKEv2_POLICY0,
};

pub const L2TP_TUNNEL_CONFIG_PARAMS2 = extern struct {
    dwIdleTimeout: u32,
    dwEncryptionType: u32,
    dwSaLifeTime: u32,
    dwSaDataSizeForRenegotiation: u32,
    customPolicy: ?*ROUTER_CUSTOM_IKEv2_POLICY0,
    dwMmSaLifeTime: u32,
};

pub const L2TP_TUNNEL_CONFIG_PARAMS1 = extern struct {
    dwIdleTimeout: u32,
    dwEncryptionType: u32,
    dwSaLifeTime: u32,
    dwSaDataSizeForRenegotiation: u32,
    customPolicy: ?*ROUTER_CUSTOM_IKEv2_POLICY0,
};

pub const IKEV2_CONFIG_PARAMS = extern struct {
    dwNumPorts: u32,
    dwPortFlags: u32,
    dwTunnelConfigParamFlags: u32,
    TunnelConfigParams: IKEV2_TUNNEL_CONFIG_PARAMS4,
};

pub const PPTP_CONFIG_PARAMS = extern struct {
    dwNumPorts: u32,
    dwPortFlags: u32,
};

pub const L2TP_CONFIG_PARAMS1 = extern struct {
    dwNumPorts: u32,
    dwPortFlags: u32,
    dwTunnelConfigParamFlags: u32,
    TunnelConfigParams: L2TP_TUNNEL_CONFIG_PARAMS2,
};

pub const GRE_CONFIG_PARAMS0 = extern struct {
    dwNumPorts: u32,
    dwPortFlags: u32,
};

pub const L2TP_CONFIG_PARAMS0 = extern struct {
    dwNumPorts: u32,
    dwPortFlags: u32,
};

pub const SSTP_CERT_INFO = extern struct {
    isDefault: BOOL,
    certBlob: CRYPTOAPI_BLOB,
};

pub const SSTP_CONFIG_PARAMS = extern struct {
    dwNumPorts: u32,
    dwPortFlags: u32,
    isUseHttps: BOOL,
    certAlgorithm: u32,
    sstpCertDetails: SSTP_CERT_INFO,
};

pub const MPRAPI_TUNNEL_CONFIG_PARAMS0 = extern struct {
    IkeConfigParams: IKEV2_CONFIG_PARAMS,
    PptpConfigParams: PPTP_CONFIG_PARAMS,
    L2tpConfigParams: L2TP_CONFIG_PARAMS1,
    SstpConfigParams: SSTP_CONFIG_PARAMS,
};

pub const MPRAPI_TUNNEL_CONFIG_PARAMS1 = extern struct {
    IkeConfigParams: IKEV2_CONFIG_PARAMS,
    PptpConfigParams: PPTP_CONFIG_PARAMS,
    L2tpConfigParams: L2TP_CONFIG_PARAMS1,
    SstpConfigParams: SSTP_CONFIG_PARAMS,
    GREConfigParams: GRE_CONFIG_PARAMS0,
};

pub const MPR_SERVER_EX0 = extern struct {
    Header: MPRAPI_OBJECT_HEADER,
    fLanOnlyMode: u32,
    dwUpTime: u32,
    dwTotalPorts: u32,
    dwPortsInUse: u32,
    Reserved: u32,
    ConfigParams: MPRAPI_TUNNEL_CONFIG_PARAMS0,
};

pub const MPR_SERVER_EX1 = extern struct {
    Header: MPRAPI_OBJECT_HEADER,
    fLanOnlyMode: u32,
    dwUpTime: u32,
    dwTotalPorts: u32,
    dwPortsInUse: u32,
    Reserved: u32,
    ConfigParams: MPRAPI_TUNNEL_CONFIG_PARAMS1,
};

pub const MPR_SERVER_SET_CONFIG_EX0 = extern struct {
    Header: MPRAPI_OBJECT_HEADER,
    setConfigForProtocols: u32,
    ConfigParams: MPRAPI_TUNNEL_CONFIG_PARAMS0,
};

pub const MPR_SERVER_SET_CONFIG_EX1 = extern struct {
    Header: MPRAPI_OBJECT_HEADER,
    setConfigForProtocols: u32,
    ConfigParams: MPRAPI_TUNNEL_CONFIG_PARAMS1,
};

pub const AUTH_VALIDATION_EX = extern struct {
    Header: MPRAPI_OBJECT_HEADER,
    hRasConnection: ?HANDLE,
    wszUserName: [257]u16,
    wszLogonDomain: [16]u16,
    AuthInfoSize: u32,
    AuthInfo: [1]u8,
};

pub const RAS_UPDATE_CONNECTION = extern struct {
    Header: MPRAPI_OBJECT_HEADER,
    dwIfIndex: u32,
    wszLocalEndpointAddress: [65]u16,
    wszRemoteEndpointAddress: [65]u16,
};

pub const PMPRADMINGETIPADDRESSFORUSER = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?PWSTR,
        param1: ?PWSTR,
        param2: ?*u32,
        param3: ?*BOOL,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        param0: ?PWSTR,
        param1: ?PWSTR,
        param2: ?*u32,
        param3: ?*BOOL,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMPRADMINRELEASEIPADRESS = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?PWSTR,
        param1: ?PWSTR,
        param2: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: ?PWSTR,
        param1: ?PWSTR,
        param2: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const PMPRADMINGETIPV6ADDRESSFORUSER = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?PWSTR,
        param1: ?PWSTR,
        param2: ?*IN6_ADDR,
        param3: ?*BOOL,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        param0: ?PWSTR,
        param1: ?PWSTR,
        param2: ?*IN6_ADDR,
        param3: ?*BOOL,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMPRADMINRELEASEIPV6ADDRESSFORUSER = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?PWSTR,
        param1: ?PWSTR,
        param2: ?*IN6_ADDR,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: ?PWSTR,
        param1: ?PWSTR,
        param2: ?*IN6_ADDR,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const PMPRADMINACCEPTNEWCONNECTION = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const PMPRADMINACCEPTNEWCONNECTION2 = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
        param2: ?*RAS_CONNECTION_2,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
        param2: ?*RAS_CONNECTION_2,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const PMPRADMINACCEPTNEWCONNECTION3 = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
        param2: ?*RAS_CONNECTION_2,
        param3: ?*RAS_CONNECTION_3,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
        param2: ?*RAS_CONNECTION_2,
        param3: ?*RAS_CONNECTION_3,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const PMPRADMINACCEPTNEWLINK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_PORT_0,
        param1: ?*RAS_PORT_1,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*RAS_PORT_0,
        param1: ?*RAS_PORT_1,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const PMPRADMINCONNECTIONHANGUPNOTIFICATION = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const PMPRADMINCONNECTIONHANGUPNOTIFICATION2 = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
        param2: ?*RAS_CONNECTION_2,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
        param2: ?*RAS_CONNECTION_2,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const PMPRADMINCONNECTIONHANGUPNOTIFICATION3 = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
        param2: ?*RAS_CONNECTION_2,
        param3: RAS_CONNECTION_3,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
        param2: ?*RAS_CONNECTION_2,
        param3: RAS_CONNECTION_3,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const PMPRADMINLINKHANGUPNOTIFICATION = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_PORT_0,
        param1: ?*RAS_PORT_1,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: ?*RAS_PORT_0,
        param1: ?*RAS_PORT_1,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const PMPRADMINTERMINATEDLL = switch (@import("builtin").zig_backend) {
    .stage1 => fn () callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn () callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMPRADMINACCEPTREAUTHENTICATION = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
        param2: ?*RAS_CONNECTION_2,
        param3: ?*RAS_CONNECTION_3,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*RAS_CONNECTION_0,
        param1: ?*RAS_CONNECTION_1,
        param2: ?*RAS_CONNECTION_2,
        param3: ?*RAS_CONNECTION_3,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const PMPRADMINACCEPTNEWCONNECTIONEX = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_EX,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*RAS_CONNECTION_EX,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const PMPRADMINACCEPTREAUTHENTICATIONEX = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_EX,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*RAS_CONNECTION_EX,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const PMPRADMINACCEPTTUNNELENDPOINTCHANGEEX = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_EX,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*RAS_CONNECTION_EX,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const PMPRADMINCONNECTIONHANGUPNOTIFICATIONEX = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*RAS_CONNECTION_EX,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        param0: ?*RAS_CONNECTION_EX,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const PMPRADMINRASVALIDATEPREAUTHENTICATEDCONNECTIONEX = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*AUTH_VALIDATION_EX,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        param0: ?*AUTH_VALIDATION_EX,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const MPRAPI_ADMIN_DLL_CALLBACKS = extern struct {
    revision: u8,
    lpfnMprAdminGetIpAddressForUser: ?PMPRADMINGETIPADDRESSFORUSER,
    lpfnMprAdminReleaseIpAddress: ?PMPRADMINRELEASEIPADRESS,
    lpfnMprAdminGetIpv6AddressForUser: ?PMPRADMINGETIPV6ADDRESSFORUSER,
    lpfnMprAdminReleaseIpV6AddressForUser: ?PMPRADMINRELEASEIPV6ADDRESSFORUSER,
    lpfnRasAdminAcceptNewLink: ?PMPRADMINACCEPTNEWLINK,
    lpfnRasAdminLinkHangupNotification: ?PMPRADMINLINKHANGUPNOTIFICATION,
    lpfnRasAdminTerminateDll: ?PMPRADMINTERMINATEDLL,
    lpfnRasAdminAcceptNewConnectionEx: ?PMPRADMINACCEPTNEWCONNECTIONEX,
    lpfnRasAdminAcceptEndpointChangeEx: ?PMPRADMINACCEPTTUNNELENDPOINTCHANGEEX,
    lpfnRasAdminAcceptReauthenticationEx: ?PMPRADMINACCEPTREAUTHENTICATIONEX,
    lpfnRasAdminConnectionHangupNotificationEx: ?PMPRADMINCONNECTIONHANGUPNOTIFICATIONEX,
    lpfnRASValidatePreAuthenticatedConnectionEx: ?PMPRADMINRASVALIDATEPREAUTHENTICATEDCONNECTIONEX,
};

pub const SECURITY_MESSAGE = extern struct {
    dwMsgId: SECURITY_MESSAGE_MSG_ID,
    hPort: isize,
    dwError: u32,
    UserName: [257]CHAR,
    Domain: [16]CHAR,
};

pub const RAS_SECURITY_INFO = extern struct {
    LastError: u32,
    BytesReceived: u32,
    DeviceName: [129]CHAR,
};

pub const RASSECURITYPROC = switch (@import("builtin").zig_backend) {
    .stage1 => fn () callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn () callconv(@import("std").os.windows.WINAPI) u32,
};

pub const MGM_IF_ENTRY = extern struct {
    dwIfIndex: u32,
    dwIfNextHopAddr: u32,
    bIGMP: BOOL,
    bIsEnabled: BOOL,
};

pub const PMGM_RPF_CALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        pdwInIfIndex: ?*u32,
        pdwInIfNextHopAddr: ?*u32,
        pdwUpStreamNbr: ?*u32,
        dwHdrSize: u32,
        pbPacketHdr: ?*u8,
        pbRoute: ?*u8,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        pdwInIfIndex: ?*u32,
        pdwInIfNextHopAddr: ?*u32,
        pdwUpStreamNbr: ?*u32,
        dwHdrSize: u32,
        pbPacketHdr: ?*u8,
        pbRoute: ?*u8,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMGM_CREATION_ALERT_CALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        dwInIfIndex: u32,
        dwInIfNextHopAddr: u32,
        dwIfCount: u32,
        pmieOutIfList: ?*MGM_IF_ENTRY,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        dwInIfIndex: u32,
        dwInIfNextHopAddr: u32,
        dwIfCount: u32,
        pmieOutIfList: ?*MGM_IF_ENTRY,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMGM_PRUNE_ALERT_CALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
        bMemberDelete: BOOL,
        pdwTimeout: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
        bMemberDelete: BOOL,
        pdwTimeout: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMGM_JOIN_ALERT_CALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        bMemberUpdate: BOOL,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        bMemberUpdate: BOOL,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMGM_WRONG_IF_CALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        dwSourceAddr: u32,
        dwGroupAddr: u32,
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
        dwHdrSize: u32,
        pbPacketHdr: ?*u8,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        dwSourceAddr: u32,
        dwGroupAddr: u32,
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
        dwHdrSize: u32,
        pbPacketHdr: ?*u8,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMGM_LOCAL_JOIN_CALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMGM_LOCAL_LEAVE_CALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        dwSourceAddr: u32,
        dwSourceMask: u32,
        dwGroupAddr: u32,
        dwGroupMask: u32,
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMGM_DISABLE_IGMP_CALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const PMGM_ENABLE_IGMP_CALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        dwIfIndex: u32,
        dwIfNextHopAddr: u32,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const ROUTING_PROTOCOL_CONFIG = extern struct {
    dwCallbackFlags: u32,
    pfnRpfCallback: ?PMGM_RPF_CALLBACK,
    pfnCreationAlertCallback: ?PMGM_CREATION_ALERT_CALLBACK,
    pfnPruneAlertCallback: ?PMGM_PRUNE_ALERT_CALLBACK,
    pfnJoinAlertCallback: ?PMGM_JOIN_ALERT_CALLBACK,
    pfnWrongIfCallback: ?PMGM_WRONG_IF_CALLBACK,
    pfnLocalJoinCallback: ?PMGM_LOCAL_JOIN_CALLBACK,
    pfnLocalLeaveCallback: ?PMGM_LOCAL_LEAVE_CALLBACK,
    pfnDisableIgmpCallback: ?PMGM_DISABLE_IGMP_CALLBACK,
    pfnEnableIgmpCallback: ?PMGM_ENABLE_IGMP_CALLBACK,
};

pub const MGM_ENUM_TYPES = enum(i32) {
    NY_SOURCE = 0,
    LL_SOURCES = 1,
};
pub const ANY_SOURCE = MGM_ENUM_TYPES.NY_SOURCE;
pub const ALL_SOURCES = MGM_ENUM_TYPES.LL_SOURCES;

pub const SOURCE_GROUP_ENTRY = extern struct {
    dwSourceAddr: u32,
    dwSourceMask: u32,
    dwGroupAddr: u32,
    dwGroupMask: u32,
};

pub const RTM_REGN_PROFILE = extern struct {
    MaxNextHopsInRoute: u32,
    MaxHandlesInEnum: u32,
    ViewsSupported: u32,
    NumberOfViews: u32,
};

pub const RTM_NET_ADDRESS = extern struct {
    AddressFamily: u16,
    NumBits: u16,
    AddrBits: [16]u8,
};

pub const RTM_PREF_INFO = extern struct {
    Metric: u32,
    Preference: u32,
};

pub const RTM_NEXTHOP_LIST = extern struct {
    NumNextHops: u16,
    NextHops: [1]isize,
};

pub const RTM_DEST_INFO = extern struct {
    DestHandle: isize,
    DestAddress: RTM_NET_ADDRESS,
    LastChanged: FILETIME,
    BelongsToViews: u32,
    NumberOfViews: u32,
    ViewInfo: [1]extern struct {
        ViewId: i32,
        NumRoutes: u32,
        Route: isize,
        Owner: isize,
        DestFlags: u32,
        HoldRoute: isize,
    },
};

pub const RTM_ROUTE_INFO = extern struct {
    DestHandle: isize,
    RouteOwner: isize,
    Neighbour: isize,
    State: u8,
    Flags1: u8,
    Flags: u16,
    PrefInfo: RTM_PREF_INFO,
    BelongsToViews: u32,
    EntitySpecificInfo: ?*anyopaque,
    NextHopsList: RTM_NEXTHOP_LIST,
};

pub const RTM_NEXTHOP_INFO = extern struct {
    NextHopAddress: RTM_NET_ADDRESS,
    NextHopOwner: isize,
    InterfaceIndex: u32,
    State: u16,
    Flags: u16,
    EntitySpecificInfo: ?*anyopaque,
    RemoteNextHop: isize,
};

pub const RTM_ENTITY_ID = extern struct {
    Anonymous: extern union {
        Anonymous: extern struct {
            EntityProtocolId: u32,
            EntityInstanceId: u32,
        },
        EntityId: u64,
    },
};

pub const RTM_ENTITY_INFO = extern struct {
    RtmInstanceId: u16,
    AddressFamily: u16,
    EntityId: RTM_ENTITY_ID,
};

pub const RTM_EVENT_TYPE = enum(i32) {
    ENTITY_REGISTERED = 0,
    ENTITY_DEREGISTERED = 1,
    ROUTE_EXPIRED = 2,
    CHANGE_NOTIFICATION = 3,
};
pub const RTM_ENTITY_REGISTERED = RTM_EVENT_TYPE.ENTITY_REGISTERED;
pub const RTM_ENTITY_DEREGISTERED = RTM_EVENT_TYPE.ENTITY_DEREGISTERED;
pub const RTM_ROUTE_EXPIRED = RTM_EVENT_TYPE.ROUTE_EXPIRED;
pub const RTM_CHANGE_NOTIFICATION = RTM_EVENT_TYPE.CHANGE_NOTIFICATION;

pub const RTM_EVENT_CALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        RtmRegHandle: isize,
        EventType: RTM_EVENT_TYPE,
        Context1: ?*anyopaque,
        Context2: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) u32,
    else => *const fn (
        RtmRegHandle: isize,
        EventType: RTM_EVENT_TYPE,
        Context1: ?*anyopaque,
        Context2: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) u32,
};

pub const RTM_ENTITY_METHOD_INPUT = extern struct {
    MethodType: u32,
    InputSize: u32,
    InputData: [1]u8,
};

pub const RTM_ENTITY_METHOD_OUTPUT = extern struct {
    MethodType: u32,
    MethodStatus: u32,
    OutputSize: u32,
    OutputData: [1]u8,
};

pub const RTM_ENTITY_EXPORT_METHOD = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        CallerHandle: isize,
        CalleeHandle: isize,
        Input: ?*RTM_ENTITY_METHOD_INPUT,
        Output: ?*RTM_ENTITY_METHOD_OUTPUT,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        CallerHandle: isize,
        CalleeHandle: isize,
        Input: ?*RTM_ENTITY_METHOD_INPUT,
        Output: ?*RTM_ENTITY_METHOD_OUTPUT,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const RTM_ENTITY_EXPORT_METHODS = extern struct {
    NumMethods: u32,
    Methods: [1]?RTM_ENTITY_EXPORT_METHOD,
};

//--------------------------------------------------------------------------------
// Section: Functions (277)
//--------------------------------------------------------------------------------
// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasDialA(
    param0: ?*RASDIALEXTENSIONS,
    param1: ?[*:0]const u8,
    param2: ?*RASDIALPARAMSA,
    param3: u32,
    param4: ?*anyopaque,
    param5: ?*?HRASCONN,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasDialW(
    param0: ?*RASDIALEXTENSIONS,
    param1: ?[*:0]const u16,
    param2: ?*RASDIALPARAMSW,
    param3: u32,
    param4: ?*anyopaque,
    param5: ?*?HRASCONN,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasEnumConnectionsA(
    param0: ?*RASCONNA,
    param1: ?*u32,
    param2: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasEnumConnectionsW(
    param0: ?*RASCONNW,
    param1: ?*u32,
    param2: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasEnumEntriesA(
    param0: ?[*:0]const u8,
    param1: ?[*:0]const u8,
    param2: ?*RASENTRYNAMEA,
    param3: ?*u32,
    param4: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasEnumEntriesW(
    param0: ?[*:0]const u16,
    param1: ?[*:0]const u16,
    param2: ?*RASENTRYNAMEW,
    param3: ?*u32,
    param4: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetConnectStatusA(
    param0: ?HRASCONN,
    param1: ?*RASCONNSTATUSA,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetConnectStatusW(
    param0: ?HRASCONN,
    param1: ?*RASCONNSTATUSW,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetErrorStringA(
    ResourceId: u32,
    lpszString: [*:0]u8,
    InBufSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetErrorStringW(
    ResourceId: u32,
    lpszString: [*:0]u16,
    InBufSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasHangUpA(
    param0: ?HRASCONN,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasHangUpW(
    param0: ?HRASCONN,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetProjectionInfoA(
    param0: ?HRASCONN,
    param1: RASPROJECTION,
    param2: ?*anyopaque,
    param3: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetProjectionInfoW(
    param0: ?HRASCONN,
    param1: RASPROJECTION,
    param2: ?*anyopaque,
    param3: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasCreatePhonebookEntryA(
    param0: ?HWND,
    param1: ?[*:0]const u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasCreatePhonebookEntryW(
    param0: ?HWND,
    param1: ?[*:0]const u16,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasEditPhonebookEntryA(
    param0: ?HWND,
    param1: ?[*:0]const u8,
    param2: ?[*:0]const u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasEditPhonebookEntryW(
    param0: ?HWND,
    param1: ?[*:0]const u16,
    param2: ?[*:0]const u16,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetEntryDialParamsA(
    param0: ?[*:0]const u8,
    param1: ?*RASDIALPARAMSA,
    param2: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetEntryDialParamsW(
    param0: ?[*:0]const u16,
    param1: ?*RASDIALPARAMSW,
    param2: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetEntryDialParamsA(
    param0: ?[*:0]const u8,
    param1: ?*RASDIALPARAMSA,
    param2: ?*i32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetEntryDialParamsW(
    param0: ?[*:0]const u16,
    param1: ?*RASDIALPARAMSW,
    param2: ?*i32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasEnumDevicesA(
    param0: ?*RASDEVINFOA,
    param1: ?*u32,
    param2: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasEnumDevicesW(
    param0: ?*RASDEVINFOW,
    param1: ?*u32,
    param2: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetCountryInfoA(
    param0: ?*RASCTRYINFO,
    param1: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetCountryInfoW(
    param0: ?*RASCTRYINFO,
    param1: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetEntryPropertiesA(
    param0: ?[*:0]const u8,
    param1: ?[*:0]const u8,
    param2: ?*RASENTRYA,
    param3: ?*u32,
    param4: ?*u8,
    param5: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetEntryPropertiesW(
    param0: ?[*:0]const u16,
    param1: ?[*:0]const u16,
    param2: ?*RASENTRYW,
    param3: ?*u32,
    param4: ?*u8,
    param5: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetEntryPropertiesA(
    param0: ?[*:0]const u8,
    param1: ?[*:0]const u8,
    param2: ?*RASENTRYA,
    param3: u32,
    param4: ?*u8,
    param5: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetEntryPropertiesW(
    param0: ?[*:0]const u16,
    param1: ?[*:0]const u16,
    param2: ?*RASENTRYW,
    param3: u32,
    param4: ?*u8,
    param5: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasRenameEntryA(
    param0: ?[*:0]const u8,
    param1: ?[*:0]const u8,
    param2: ?[*:0]const u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasRenameEntryW(
    param0: ?[*:0]const u16,
    param1: ?[*:0]const u16,
    param2: ?[*:0]const u16,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasDeleteEntryA(
    param0: ?[*:0]const u8,
    param1: ?[*:0]const u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasDeleteEntryW(
    param0: ?[*:0]const u16,
    param1: ?[*:0]const u16,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasValidateEntryNameA(
    param0: ?[*:0]const u8,
    param1: ?[*:0]const u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasValidateEntryNameW(
    param0: ?[*:0]const u16,
    param1: ?[*:0]const u16,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasConnectionNotificationA(
    param0: ?HRASCONN,
    param1: ?HANDLE,
    param2: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasConnectionNotificationW(
    param0: ?HRASCONN,
    param1: ?HANDLE,
    param2: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetSubEntryHandleA(
    param0: ?HRASCONN,
    param1: u32,
    param2: ?*?HRASCONN,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetSubEntryHandleW(
    param0: ?HRASCONN,
    param1: u32,
    param2: ?*?HRASCONN,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetCredentialsA(
    param0: ?[*:0]const u8,
    param1: ?[*:0]const u8,
    param2: ?*RASCREDENTIALSA,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetCredentialsW(
    param0: ?[*:0]const u16,
    param1: ?[*:0]const u16,
    param2: ?*RASCREDENTIALSW,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetCredentialsA(
    param0: ?[*:0]const u8,
    param1: ?[*:0]const u8,
    param2: ?*RASCREDENTIALSA,
    param3: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetCredentialsW(
    param0: ?[*:0]const u16,
    param1: ?[*:0]const u16,
    param2: ?*RASCREDENTIALSW,
    param3: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetSubEntryPropertiesA(
    param0: ?[*:0]const u8,
    param1: ?[*:0]const u8,
    param2: u32,
    param3: ?*RASSUBENTRYA,
    param4: ?*u32,
    param5: ?*u8,
    param6: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetSubEntryPropertiesW(
    param0: ?[*:0]const u16,
    param1: ?[*:0]const u16,
    param2: u32,
    param3: ?*RASSUBENTRYW,
    param4: ?*u32,
    param5: ?*u8,
    param6: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetSubEntryPropertiesA(
    param0: ?[*:0]const u8,
    param1: ?[*:0]const u8,
    param2: u32,
    param3: ?*RASSUBENTRYA,
    param4: u32,
    param5: ?*u8,
    param6: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetSubEntryPropertiesW(
    param0: ?[*:0]const u16,
    param1: ?[*:0]const u16,
    param2: u32,
    param3: ?*RASSUBENTRYW,
    param4: u32,
    param5: ?*u8,
    param6: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetAutodialAddressA(
    param0: ?[*:0]const u8,
    param1: ?*u32,
    param2: ?*RASAUTODIALENTRYA,
    param3: ?*u32,
    param4: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetAutodialAddressW(
    param0: ?[*:0]const u16,
    param1: ?*u32,
    param2: ?*RASAUTODIALENTRYW,
    param3: ?*u32,
    param4: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetAutodialAddressA(
    param0: ?[*:0]const u8,
    param1: u32,
    param2: ?*RASAUTODIALENTRYA,
    param3: u32,
    param4: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetAutodialAddressW(
    param0: ?[*:0]const u16,
    param1: u32,
    param2: ?*RASAUTODIALENTRYW,
    param3: u32,
    param4: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasEnumAutodialAddressesA(
    // TODO: what to do with BytesParamIndex 1?
    lppRasAutodialAddresses: ?*?PSTR,
    lpdwcbRasAutodialAddresses: ?*u32,
    lpdwcRasAutodialAddresses: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasEnumAutodialAddressesW(
    // TODO: what to do with BytesParamIndex 1?
    lppRasAutodialAddresses: ?*?PWSTR,
    lpdwcbRasAutodialAddresses: ?*u32,
    lpdwcRasAutodialAddresses: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetAutodialEnableA(
    param0: u32,
    param1: ?*i32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetAutodialEnableW(
    param0: u32,
    param1: ?*i32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetAutodialEnableA(
    param0: u32,
    param1: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetAutodialEnableW(
    param0: u32,
    param1: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetAutodialParamA(
    param0: u32,
    param1: ?*anyopaque,
    param2: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetAutodialParamW(
    param0: u32,
    param1: ?*anyopaque,
    param2: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetAutodialParamA(
    param0: u32,
    param1: ?*anyopaque,
    param2: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetAutodialParamW(
    param0: u32,
    param1: ?*anyopaque,
    param2: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "rasapi32" fn RasGetPCscf(
    lpszPCscf: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasInvokeEapUI(
    param0: ?HRASCONN,
    param1: u32,
    param2: ?*RASDIALEXTENSIONS,
    param3: ?HWND,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetLinkStatistics(
    hRasConn: ?HRASCONN,
    dwSubEntry: u32,
    lpStatistics: ?*RAS_STATS,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetConnectionStatistics(
    hRasConn: ?HRASCONN,
    lpStatistics: ?*RAS_STATS,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasClearLinkStatistics(
    hRasConn: ?HRASCONN,
    dwSubEntry: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasClearConnectionStatistics(
    hRasConn: ?HRASCONN,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetEapUserDataA(
    hToken: ?HANDLE,
    pszPhonebook: ?[*:0]const u8,
    pszEntry: ?[*:0]const u8,
    pbEapData: ?*u8,
    pdwSizeofEapData: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetEapUserDataW(
    hToken: ?HANDLE,
    pszPhonebook: ?[*:0]const u16,
    pszEntry: ?[*:0]const u16,
    pbEapData: ?*u8,
    pdwSizeofEapData: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetEapUserDataA(
    hToken: ?HANDLE,
    pszPhonebook: ?[*:0]const u8,
    pszEntry: ?[*:0]const u8,
    pbEapData: ?*u8,
    dwSizeofEapData: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetEapUserDataW(
    hToken: ?HANDLE,
    pszPhonebook: ?[*:0]const u16,
    pszEntry: ?[*:0]const u16,
    pbEapData: ?*u8,
    dwSizeofEapData: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetCustomAuthDataA(
    pszPhonebook: ?[*:0]const u8,
    pszEntry: ?[*:0]const u8,
    // TODO: what to do with BytesParamIndex 3?
    pbCustomAuthData: ?*u8,
    pdwSizeofCustomAuthData: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetCustomAuthDataW(
    pszPhonebook: ?[*:0]const u16,
    pszEntry: ?[*:0]const u16,
    // TODO: what to do with BytesParamIndex 3?
    pbCustomAuthData: ?*u8,
    pdwSizeofCustomAuthData: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetCustomAuthDataA(
    pszPhonebook: ?[*:0]const u8,
    pszEntry: ?[*:0]const u8,
    // TODO: what to do with BytesParamIndex 3?
    pbCustomAuthData: ?*u8,
    dwSizeofCustomAuthData: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasSetCustomAuthDataW(
    pszPhonebook: ?[*:0]const u16,
    pszEntry: ?[*:0]const u16,
    // TODO: what to do with BytesParamIndex 3?
    pbCustomAuthData: ?*u8,
    dwSizeofCustomAuthData: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetEapUserIdentityW(
    pszPhonebook: ?[*:0]const u16,
    pszEntry: ?[*:0]const u16,
    dwFlags: u32,
    hwnd: ?HWND,
    ppRasEapUserIdentity: ?*?*RASEAPUSERIDENTITYW,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasGetEapUserIdentityA(
    pszPhonebook: ?[*:0]const u8,
    pszEntry: ?[*:0]const u8,
    dwFlags: u32,
    hwnd: ?HWND,
    ppRasEapUserIdentity: ?*?*RASEAPUSERIDENTITYA,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasFreeEapUserIdentityW(
    pRasEapUserIdentity: ?*RASEAPUSERIDENTITYW,
) callconv(@import("std").os.windows.WINAPI) void;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasapi32" fn RasFreeEapUserIdentityA(
    pRasEapUserIdentity: ?*RASEAPUSERIDENTITYA,
) callconv(@import("std").os.windows.WINAPI) void;

// TODO: this type is limited to platform 'windows5.1.2600'
pub extern "rasapi32" fn RasDeleteSubEntryA(
    pszPhonebook: ?[*:0]const u8,
    pszEntry: ?[*:0]const u8,
    dwSubentryId: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.1.2600'
pub extern "rasapi32" fn RasDeleteSubEntryW(
    pszPhonebook: ?[*:0]const u16,
    pszEntry: ?[*:0]const u16,
    dwSubEntryId: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows6.1'
pub extern "rasapi32" fn RasUpdateConnection(
    hrasconn: ?HRASCONN,
    lprasupdateconn: ?*RASUPDATECONN,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows6.1'
pub extern "rasapi32" fn RasGetProjectionInfoEx(
    hrasconn: ?HRASCONN,
    pRasProjection: ?*RAS_PROJECTION_INFO,
    lpdwSize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasdlg" fn RasPhonebookDlgA(
    lpszPhonebook: ?PSTR,
    lpszEntry: ?PSTR,
    lpInfo: ?*RASPBDLGA,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasdlg" fn RasPhonebookDlgW(
    lpszPhonebook: ?PWSTR,
    lpszEntry: ?PWSTR,
    lpInfo: ?*RASPBDLGW,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasdlg" fn RasEntryDlgA(
    lpszPhonebook: ?PSTR,
    lpszEntry: ?PSTR,
    lpInfo: ?*RASENTRYDLGA,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasdlg" fn RasEntryDlgW(
    lpszPhonebook: ?PWSTR,
    lpszEntry: ?PWSTR,
    lpInfo: ?*RASENTRYDLGW,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasdlg" fn RasDialDlgA(
    lpszPhonebook: ?PSTR,
    lpszEntry: ?PSTR,
    lpszPhoneNumber: ?PSTR,
    lpInfo: ?*RASDIALDLG,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows5.0'
pub extern "rasdlg" fn RasDialDlgW(
    lpszPhonebook: ?PWSTR,
    lpszEntry: ?PWSTR,
    lpszPhoneNumber: ?PWSTR,
    lpInfo: ?*RASDIALDLG,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windows6.1'
pub extern "mprapi" fn MprAdminConnectionEnumEx(
    hRasServer: isize,
    pObjectHeader: ?*MPRAPI_OBJECT_HEADER,
    dwPreferedMaxLen: u32,
    lpdwEntriesRead: ?*u32,
    lpdwTotalEntries: ?*u32,
    ppRasConn: ?*?*RAS_CONNECTION_EX,
    lpdwResumeHandle: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows6.1'
pub extern "mprapi" fn MprAdminConnectionGetInfoEx(
    hRasServer: isize,
    hRasConnection: ?HANDLE,
    pRasConnection: ?*RAS_CONNECTION_EX,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2008'
pub extern "mprapi" fn MprAdminServerGetInfoEx(
    hMprServer: isize,
    pServerInfo: ?*MPR_SERVER_EX1,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2008'
pub extern "mprapi" fn MprAdminServerSetInfoEx(
    hMprServer: isize,
    pServerInfo: ?*MPR_SERVER_SET_CONFIG_EX1,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2008'
pub extern "mprapi" fn MprConfigServerGetInfoEx(
    hMprConfig: ?HANDLE,
    pServerInfo: ?*MPR_SERVER_EX1,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2008'
pub extern "mprapi" fn MprConfigServerSetInfoEx(
    hMprConfig: ?HANDLE,
    pSetServerConfig: ?*MPR_SERVER_SET_CONFIG_EX1,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "mprapi" fn MprAdminUpdateConnection(
    hRasServer: isize,
    hRasConnection: ?HANDLE,
    pRasUpdateConnection: ?*RAS_UPDATE_CONNECTION,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2008'
pub extern "mprapi" fn MprAdminIsServiceInitialized(
    lpwsServerName: ?PWSTR,
    fIsServiceInitialized: ?*BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2012'
pub extern "mprapi" fn MprAdminInterfaceSetCustomInfoEx(
    hMprServer: isize,
    hInterface: ?HANDLE,
    pCustomInfo: ?*MPR_IF_CUSTOMINFOEX2,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2012'
pub extern "mprapi" fn MprAdminInterfaceGetCustomInfoEx(
    hMprServer: isize,
    hInterface: ?HANDLE,
    pCustomInfo: ?*MPR_IF_CUSTOMINFOEX2,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2012'
pub extern "mprapi" fn MprConfigInterfaceGetCustomInfoEx(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
    pCustomInfo: ?*MPR_IF_CUSTOMINFOEX2,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2012'
pub extern "mprapi" fn MprConfigInterfaceSetCustomInfoEx(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
    pCustomInfo: ?*MPR_IF_CUSTOMINFOEX2,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminConnectionEnum(
    hRasServer: isize,
    dwLevel: u32,
    lplpbBuffer: ?*?*u8,
    dwPrefMaxLen: u32,
    lpdwEntriesRead: ?*u32,
    lpdwTotalEntries: ?*u32,
    lpdwResumeHandle: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminPortEnum(
    hRasServer: isize,
    dwLevel: u32,
    hRasConnection: ?HANDLE,
    lplpbBuffer: ?*?*u8,
    dwPrefMaxLen: u32,
    lpdwEntriesRead: ?*u32,
    lpdwTotalEntries: ?*u32,
    lpdwResumeHandle: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminConnectionGetInfo(
    hRasServer: isize,
    dwLevel: u32,
    hRasConnection: ?HANDLE,
    lplpbBuffer: ?*?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminPortGetInfo(
    hRasServer: isize,
    dwLevel: u32,
    hPort: ?HANDLE,
    lplpbBuffer: ?*?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminConnectionClearStats(
    hRasServer: isize,
    hRasConnection: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminPortClearStats(
    hRasServer: isize,
    hPort: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminPortReset(
    hRasServer: isize,
    hPort: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminPortDisconnect(
    hRasServer: isize,
    hPort: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows6.0.6000'
pub extern "mprapi" fn MprAdminConnectionRemoveQuarantine(
    hRasServer: ?HANDLE,
    hRasConnection: ?HANDLE,
    fIsIpAddress: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminUserGetInfo(
    lpszServer: ?[*:0]const u16,
    lpszUser: ?[*:0]const u16,
    dwLevel: u32,
    lpbBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminUserSetInfo(
    lpszServer: ?[*:0]const u16,
    lpszUser: ?[*:0]const u16,
    dwLevel: u32,
    lpbBuffer: ?*const u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminSendUserMessage(
    hMprServer: isize,
    hConnection: ?HANDLE,
    lpwszMessage: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windows5.0'
pub extern "mprapi" fn MprAdminGetPDCServer(
    lpszDomain: ?[*:0]const u16,
    lpszServer: ?[*:0]const u16,
    lpszPDCServer: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminIsServiceRunning(
    lpwsServerName: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) BOOL;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminServerConnect(
    lpwsServerName: ?PWSTR,
    phMprServer: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminServerDisconnect(
    hMprServer: isize,
) callconv(@import("std").os.windows.WINAPI) void;

// TODO: this type is limited to platform 'windowsServer2003'
pub extern "mprapi" fn MprAdminServerGetCredentials(
    hMprServer: isize,
    dwLevel: u32,
    lplpbBuffer: ?*?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2003'
pub extern "mprapi" fn MprAdminServerSetCredentials(
    hMprServer: isize,
    dwLevel: u32,
    lpbBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminBufferFree(
    pBuffer: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminGetErrorString(
    dwError: u32,
    lplpwsErrorString: ?*?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminServerGetInfo(
    hMprServer: isize,
    dwLevel: u32,
    lplpbBuffer: ?*?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2003'
pub extern "mprapi" fn MprAdminServerSetInfo(
    hMprServer: isize,
    dwLevel: u32,
    lpbBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2003'
pub extern "mprapi" fn MprAdminEstablishDomainRasServer(
    pszDomain: ?PWSTR,
    pszMachine: ?PWSTR,
    bEnable: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2003'
pub extern "mprapi" fn MprAdminIsDomainRasServer(
    pszDomain: ?PWSTR,
    pszMachine: ?PWSTR,
    pbIsRasServer: ?*BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminTransportCreate(
    hMprServer: isize,
    dwTransportId: u32,
    lpwsTransportName: ?PWSTR,
    pGlobalInfo: ?*u8,
    dwGlobalInfoSize: u32,
    pClientInterfaceInfo: ?*u8,
    dwClientInterfaceInfoSize: u32,
    lpwsDLLPath: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminTransportSetInfo(
    hMprServer: isize,
    dwTransportId: u32,
    pGlobalInfo: ?*u8,
    dwGlobalInfoSize: u32,
    pClientInterfaceInfo: ?*u8,
    dwClientInterfaceInfoSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminTransportGetInfo(
    hMprServer: isize,
    dwTransportId: u32,
    ppGlobalInfo: ?*?*u8,
    lpdwGlobalInfoSize: ?*u32,
    ppClientInterfaceInfo: ?*?*u8,
    lpdwClientInterfaceInfoSize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminDeviceEnum(
    hMprServer: isize,
    dwLevel: u32,
    lplpbBuffer: ?*?*u8,
    lpdwTotalEntries: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceGetHandle(
    hMprServer: isize,
    lpwsInterfaceName: ?PWSTR,
    phInterface: ?*?HANDLE,
    fIncludeClientInterfaces: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceCreate(
    hMprServer: isize,
    dwLevel: u32,
    lpbBuffer: ?*u8,
    phInterface: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceGetInfo(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwLevel: u32,
    lplpbBuffer: ?*?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceSetInfo(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwLevel: u32,
    lpbBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceDelete(
    hMprServer: isize,
    hInterface: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceDeviceGetInfo(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwIndex: u32,
    dwLevel: u32,
    lplpBuffer: ?*?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceDeviceSetInfo(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwIndex: u32,
    dwLevel: u32,
    lpbBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceTransportRemove(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwTransportId: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceTransportAdd(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwTransportId: u32,
    pInterfaceInfo: ?*u8,
    dwInterfaceInfoSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceTransportGetInfo(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwTransportId: u32,
    ppInterfaceInfo: ?*?*u8,
    lpdwInterfaceInfoSize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceTransportSetInfo(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwTransportId: u32,
    pInterfaceInfo: ?*u8,
    dwInterfaceInfoSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceEnum(
    hMprServer: isize,
    dwLevel: u32,
    lplpbBuffer: ?*?*u8,
    dwPrefMaxLen: u32,
    lpdwEntriesRead: ?*u32,
    lpdwTotalEntries: ?*u32,
    lpdwResumeHandle: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceSetCredentials(
    lpwsServer: ?PWSTR,
    lpwsInterfaceName: ?PWSTR,
    lpwsUserName: ?PWSTR,
    lpwsDomainName: ?PWSTR,
    lpwsPassword: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceGetCredentials(
    lpwsServer: ?PWSTR,
    lpwsInterfaceName: ?PWSTR,
    lpwsUserName: ?PWSTR,
    lpwsPassword: ?PWSTR,
    lpwsDomainName: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceSetCredentialsEx(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwLevel: u32,
    lpbBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceGetCredentialsEx(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwLevel: u32,
    lplpbBuffer: ?*?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceConnect(
    hMprServer: isize,
    hInterface: ?HANDLE,
    hEvent: ?HANDLE,
    fSynchronous: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceDisconnect(
    hMprServer: isize,
    hInterface: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceUpdateRoutes(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwProtocolId: u32,
    hEvent: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceQueryUpdateResult(
    hMprServer: isize,
    hInterface: ?HANDLE,
    dwProtocolId: u32,
    lpdwUpdateResult: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminInterfaceUpdatePhonebookInfo(
    hMprServer: isize,
    hInterface: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminRegisterConnectionNotification(
    hMprServer: isize,
    hEventNotification: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminDeregisterConnectionNotification(
    hMprServer: isize,
    hEventNotification: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminMIBServerConnect(
    lpwsServerName: ?PWSTR,
    phMibServer: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminMIBServerDisconnect(
    hMibServer: isize,
) callconv(@import("std").os.windows.WINAPI) void;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminMIBEntryCreate(
    hMibServer: isize,
    dwPid: u32,
    dwRoutingPid: u32,
    lpEntry: ?*anyopaque,
    dwEntrySize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminMIBEntryDelete(
    hMibServer: isize,
    dwProtocolId: u32,
    dwRoutingPid: u32,
    lpEntry: ?*anyopaque,
    dwEntrySize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminMIBEntrySet(
    hMibServer: isize,
    dwProtocolId: u32,
    dwRoutingPid: u32,
    lpEntry: ?*anyopaque,
    dwEntrySize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminMIBEntryGet(
    hMibServer: isize,
    dwProtocolId: u32,
    dwRoutingPid: u32,
    lpInEntry: ?*anyopaque,
    dwInEntrySize: u32,
    lplpOutEntry: ?*?*anyopaque,
    lpOutEntrySize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminMIBEntryGetFirst(
    hMibServer: isize,
    dwProtocolId: u32,
    dwRoutingPid: u32,
    lpInEntry: ?*anyopaque,
    dwInEntrySize: u32,
    lplpOutEntry: ?*?*anyopaque,
    lpOutEntrySize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminMIBEntryGetNext(
    hMibServer: isize,
    dwProtocolId: u32,
    dwRoutingPid: u32,
    lpInEntry: ?*anyopaque,
    dwInEntrySize: u32,
    lplpOutEntry: ?*?*anyopaque,
    lpOutEntrySize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprAdminMIBBufferFree(
    pBuffer: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigServerInstall(
    dwLevel: u32,
    pBuffer: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigServerConnect(
    lpwsServerName: ?PWSTR,
    phMprConfig: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigServerDisconnect(
    hMprConfig: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) void;

pub extern "mprapi" fn MprConfigServerRefresh(
    hMprConfig: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigBufferFree(
    pBuffer: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigServerGetInfo(
    hMprConfig: ?HANDLE,
    dwLevel: u32,
    lplpbBuffer: ?*?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2003'
pub extern "mprapi" fn MprConfigServerSetInfo(
    hMprServer: isize,
    dwLevel: u32,
    lpbBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigServerBackup(
    hMprConfig: ?HANDLE,
    lpwsPath: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigServerRestore(
    hMprConfig: ?HANDLE,
    lpwsPath: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigTransportCreate(
    hMprConfig: ?HANDLE,
    dwTransportId: u32,
    lpwsTransportName: ?PWSTR,
    // TODO: what to do with BytesParamIndex 4?
    pGlobalInfo: ?*u8,
    dwGlobalInfoSize: u32,
    // TODO: what to do with BytesParamIndex 6?
    pClientInterfaceInfo: ?*u8,
    dwClientInterfaceInfoSize: u32,
    lpwsDLLPath: ?PWSTR,
    phRouterTransport: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigTransportDelete(
    hMprConfig: ?HANDLE,
    hRouterTransport: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigTransportGetHandle(
    hMprConfig: ?HANDLE,
    dwTransportId: u32,
    phRouterTransport: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigTransportSetInfo(
    hMprConfig: ?HANDLE,
    hRouterTransport: ?HANDLE,
    // TODO: what to do with BytesParamIndex 3?
    pGlobalInfo: ?*u8,
    dwGlobalInfoSize: u32,
    // TODO: what to do with BytesParamIndex 5?
    pClientInterfaceInfo: ?*u8,
    dwClientInterfaceInfoSize: u32,
    lpwsDLLPath: ?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigTransportGetInfo(
    hMprConfig: ?HANDLE,
    hRouterTransport: ?HANDLE,
    ppGlobalInfo: ?*?*u8,
    lpdwGlobalInfoSize: ?*u32,
    ppClientInterfaceInfo: ?*?*u8,
    lpdwClientInterfaceInfoSize: ?*u32,
    lplpwsDLLPath: ?*?PWSTR,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigTransportEnum(
    hMprConfig: ?HANDLE,
    dwLevel: u32,
    lplpBuffer: ?*?*u8,
    dwPrefMaxLen: u32,
    lpdwEntriesRead: ?*u32,
    lpdwTotalEntries: ?*u32,
    lpdwResumeHandle: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceCreate(
    hMprConfig: ?HANDLE,
    dwLevel: u32,
    lpbBuffer: ?*u8,
    phRouterInterface: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceDelete(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceGetHandle(
    hMprConfig: ?HANDLE,
    lpwsInterfaceName: ?PWSTR,
    phRouterInterface: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceGetInfo(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
    dwLevel: u32,
    lplpBuffer: ?*?*u8,
    lpdwBufferSize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceSetInfo(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
    dwLevel: u32,
    lpbBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceEnum(
    hMprConfig: ?HANDLE,
    dwLevel: u32,
    lplpBuffer: ?*?*u8,
    dwPrefMaxLen: u32,
    lpdwEntriesRead: ?*u32,
    lpdwTotalEntries: ?*u32,
    lpdwResumeHandle: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceTransportAdd(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
    dwTransportId: u32,
    lpwsTransportName: ?PWSTR,
    // TODO: what to do with BytesParamIndex 5?
    pInterfaceInfo: ?*u8,
    dwInterfaceInfoSize: u32,
    phRouterIfTransport: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceTransportRemove(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
    hRouterIfTransport: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceTransportGetHandle(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
    dwTransportId: u32,
    phRouterIfTransport: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceTransportGetInfo(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
    hRouterIfTransport: ?HANDLE,
    ppInterfaceInfo: ?*?*u8,
    lpdwInterfaceInfoSize: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceTransportSetInfo(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
    hRouterIfTransport: ?HANDLE,
    // TODO: what to do with BytesParamIndex 4?
    pInterfaceInfo: ?*u8,
    dwInterfaceInfoSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigInterfaceTransportEnum(
    hMprConfig: ?HANDLE,
    hRouterInterface: ?HANDLE,
    dwLevel: u32,
    lplpBuffer: ?*?*u8,
    dwPrefMaxLen: u32,
    lpdwEntriesRead: ?*u32,
    lpdwTotalEntries: ?*u32,
    lpdwResumeHandle: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigGetFriendlyName(
    hMprConfig: ?HANDLE,
    pszGuidName: ?PWSTR,
    // TODO: what to do with BytesParamIndex 3?
    pszBuffer: ?[*]u16,
    dwBufferSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprConfigGetGuidName(
    hMprConfig: ?HANDLE,
    pszFriendlyName: ?PWSTR,
    // TODO: what to do with BytesParamIndex 3?
    pszBuffer: ?[*]u16,
    dwBufferSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2008'
pub extern "mprapi" fn MprConfigFilterGetInfo(
    hMprConfig: ?HANDLE,
    dwLevel: u32,
    dwTransportId: u32,
    lpBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2008'
pub extern "mprapi" fn MprConfigFilterSetInfo(
    hMprConfig: ?HANDLE,
    dwLevel: u32,
    dwTransportId: u32,
    lpBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprInfoCreate(
    dwVersion: u32,
    lplpNewHeader: ?*?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprInfoDelete(
    lpHeader: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprInfoRemoveAll(
    lpHeader: ?*anyopaque,
    lplpNewHeader: ?*?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprInfoDuplicate(
    lpHeader: ?*anyopaque,
    lplpNewHeader: ?*?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprInfoBlockAdd(
    lpHeader: ?*anyopaque,
    dwInfoType: u32,
    dwItemSize: u32,
    dwItemCount: u32,
    lpItemData: ?*u8,
    lplpNewHeader: ?*?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprInfoBlockRemove(
    lpHeader: ?*anyopaque,
    dwInfoType: u32,
    lplpNewHeader: ?*?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprInfoBlockSet(
    lpHeader: ?*anyopaque,
    dwInfoType: u32,
    dwItemSize: u32,
    dwItemCount: u32,
    lpItemData: ?*u8,
    lplpNewHeader: ?*?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprInfoBlockFind(
    lpHeader: ?*anyopaque,
    dwInfoType: u32,
    lpdwItemSize: ?*u32,
    lpdwItemCount: ?*u32,
    lplpItemData: ?*?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "mprapi" fn MprInfoBlockQuerySize(
    lpHeader: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmRegisterMProtocol(
    prpiInfo: ?*ROUTING_PROTOCOL_CONFIG,
    dwProtocolId: u32,
    dwComponentId: u32,
    phProtocol: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmDeRegisterMProtocol(
    hProtocol: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmTakeInterfaceOwnership(
    hProtocol: ?HANDLE,
    dwIfIndex: u32,
    dwIfNextHopAddr: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmReleaseInterfaceOwnership(
    hProtocol: ?HANDLE,
    dwIfIndex: u32,
    dwIfNextHopAddr: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmGetProtocolOnInterface(
    dwIfIndex: u32,
    dwIfNextHopAddr: u32,
    pdwIfProtocolId: ?*u32,
    pdwIfComponentId: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmAddGroupMembershipEntry(
    hProtocol: ?HANDLE,
    dwSourceAddr: u32,
    dwSourceMask: u32,
    dwGroupAddr: u32,
    dwGroupMask: u32,
    dwIfIndex: u32,
    dwIfNextHopIPAddr: u32,
    dwFlags: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmDeleteGroupMembershipEntry(
    hProtocol: ?HANDLE,
    dwSourceAddr: u32,
    dwSourceMask: u32,
    dwGroupAddr: u32,
    dwGroupMask: u32,
    dwIfIndex: u32,
    dwIfNextHopIPAddr: u32,
    dwFlags: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmGetMfe(
    pimm: ?*MIB_IPMCAST_MFE,
    pdwBufferSize: ?*u32,
    pbBuffer: ?*u8,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmGetFirstMfe(
    pdwBufferSize: ?*u32,
    pbBuffer: ?*u8,
    pdwNumEntries: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmGetNextMfe(
    pimmStart: ?*MIB_IPMCAST_MFE,
    pdwBufferSize: ?*u32,
    pbBuffer: ?*u8,
    pdwNumEntries: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmGetMfeStats(
    pimm: ?*MIB_IPMCAST_MFE,
    pdwBufferSize: ?*u32,
    pbBuffer: ?*u8,
    dwFlags: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmGetFirstMfeStats(
    pdwBufferSize: ?*u32,
    pbBuffer: ?*u8,
    pdwNumEntries: ?*u32,
    dwFlags: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmGetNextMfeStats(
    pimmStart: ?*MIB_IPMCAST_MFE,
    pdwBufferSize: ?*u32,
    pbBuffer: ?*u8,
    pdwNumEntries: ?*u32,
    dwFlags: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmGroupEnumerationStart(
    hProtocol: ?HANDLE,
    metEnumType: MGM_ENUM_TYPES,
    phEnumHandle: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmGroupEnumerationGetNext(
    hEnum: ?HANDLE,
    pdwBufferSize: ?*u32,
    pbBuffer: ?*u8,
    pdwNumEntries: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn MgmGroupEnumerationEnd(
    hEnum: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "rtm" fn RtmConvertNetAddressToIpv6AddressAndLength(
    pNetAddress: ?*RTM_NET_ADDRESS,
    pAddress: ?*IN6_ADDR,
    pLength: ?*u32,
    dwAddressSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "rtm" fn RtmConvertIpv6AddressAndLengthToNetAddress(
    pNetAddress: ?*RTM_NET_ADDRESS,
    Address: IN6_ADDR,
    dwLength: u32,
    dwAddressSize: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmRegisterEntity(
    RtmEntityInfo: ?*RTM_ENTITY_INFO,
    ExportMethods: ?*RTM_ENTITY_EXPORT_METHODS,
    EventCallback: ?RTM_EVENT_CALLBACK,
    ReserveOpaquePointer: BOOL,
    RtmRegProfile: ?*RTM_REGN_PROFILE,
    RtmRegHandle: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmDeregisterEntity(
    RtmRegHandle: isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetRegisteredEntities(
    RtmRegHandle: isize,
    NumEntities: ?*u32,
    EntityHandles: ?*isize,
    EntityInfos: ?*RTM_ENTITY_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmReleaseEntities(
    RtmRegHandle: isize,
    NumEntities: u32,
    EntityHandles: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmLockDestination(
    RtmRegHandle: isize,
    DestHandle: isize,
    Exclusive: BOOL,
    LockDest: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetOpaqueInformationPointer(
    RtmRegHandle: isize,
    DestHandle: isize,
    OpaqueInfoPointer: ?*?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetEntityMethods(
    RtmRegHandle: isize,
    EntityHandle: isize,
    NumMethods: ?*u32,
    ExptMethods: ?*?RTM_ENTITY_EXPORT_METHOD,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmInvokeMethod(
    RtmRegHandle: isize,
    EntityHandle: isize,
    Input: ?*RTM_ENTITY_METHOD_INPUT,
    OutputSize: ?*u32,
    Output: ?*RTM_ENTITY_METHOD_OUTPUT,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmBlockMethods(
    RtmRegHandle: isize,
    TargetHandle: ?HANDLE,
    TargetType: u8,
    BlockingFlag: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetEntityInfo(
    RtmRegHandle: isize,
    EntityHandle: isize,
    EntityInfo: ?*RTM_ENTITY_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetDestInfo(
    RtmRegHandle: isize,
    DestHandle: isize,
    ProtocolId: u32,
    TargetViews: u32,
    DestInfo: ?*RTM_DEST_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetRouteInfo(
    RtmRegHandle: isize,
    RouteHandle: isize,
    RouteInfo: ?*RTM_ROUTE_INFO,
    DestAddress: ?*RTM_NET_ADDRESS,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetNextHopInfo(
    RtmRegHandle: isize,
    NextHopHandle: isize,
    NextHopInfo: ?*RTM_NEXTHOP_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmReleaseEntityInfo(
    RtmRegHandle: isize,
    EntityInfo: ?*RTM_ENTITY_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmReleaseDestInfo(
    RtmRegHandle: isize,
    DestInfo: ?*RTM_DEST_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmReleaseRouteInfo(
    RtmRegHandle: isize,
    RouteInfo: ?*RTM_ROUTE_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmReleaseNextHopInfo(
    RtmRegHandle: isize,
    NextHopInfo: ?*RTM_NEXTHOP_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmAddRouteToDest(
    RtmRegHandle: isize,
    RouteHandle: ?*isize,
    DestAddress: ?*RTM_NET_ADDRESS,
    RouteInfo: ?*RTM_ROUTE_INFO,
    TimeToLive: u32,
    RouteListHandle: isize,
    NotifyType: u32,
    NotifyHandle: isize,
    ChangeFlags: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmDeleteRouteToDest(
    RtmRegHandle: isize,
    RouteHandle: isize,
    ChangeFlags: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmHoldDestination(
    RtmRegHandle: isize,
    DestHandle: isize,
    TargetViews: u32,
    HoldTime: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetRoutePointer(
    RtmRegHandle: isize,
    RouteHandle: isize,
    RoutePointer: ?*?*RTM_ROUTE_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmLockRoute(
    RtmRegHandle: isize,
    RouteHandle: isize,
    Exclusive: BOOL,
    LockRoute: BOOL,
    RoutePointer: ?*?*RTM_ROUTE_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmUpdateAndUnlockRoute(
    RtmRegHandle: isize,
    RouteHandle: isize,
    TimeToLive: u32,
    RouteListHandle: isize,
    NotifyType: u32,
    NotifyHandle: isize,
    ChangeFlags: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetExactMatchDestination(
    RtmRegHandle: isize,
    DestAddress: ?*RTM_NET_ADDRESS,
    ProtocolId: u32,
    TargetViews: u32,
    DestInfo: ?*RTM_DEST_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetMostSpecificDestination(
    RtmRegHandle: isize,
    DestAddress: ?*RTM_NET_ADDRESS,
    ProtocolId: u32,
    TargetViews: u32,
    DestInfo: ?*RTM_DEST_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetLessSpecificDestination(
    RtmRegHandle: isize,
    DestHandle: isize,
    ProtocolId: u32,
    TargetViews: u32,
    DestInfo: ?*RTM_DEST_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetExactMatchRoute(
    RtmRegHandle: isize,
    DestAddress: ?*RTM_NET_ADDRESS,
    MatchingFlags: u32,
    RouteInfo: ?*RTM_ROUTE_INFO,
    InterfaceIndex: u32,
    TargetViews: u32,
    RouteHandle: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmIsBestRoute(
    RtmRegHandle: isize,
    RouteHandle: isize,
    BestInViews: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmAddNextHop(
    RtmRegHandle: isize,
    NextHopInfo: ?*RTM_NEXTHOP_INFO,
    NextHopHandle: ?*isize,
    ChangeFlags: ?*u32,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmFindNextHop(
    RtmRegHandle: isize,
    NextHopInfo: ?*RTM_NEXTHOP_INFO,
    NextHopHandle: ?*isize,
    NextHopPointer: ?*?*RTM_NEXTHOP_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmDeleteNextHop(
    RtmRegHandle: isize,
    NextHopHandle: isize,
    NextHopInfo: ?*RTM_NEXTHOP_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetNextHopPointer(
    RtmRegHandle: isize,
    NextHopHandle: isize,
    NextHopPointer: ?*?*RTM_NEXTHOP_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmLockNextHop(
    RtmRegHandle: isize,
    NextHopHandle: isize,
    Exclusive: BOOL,
    LockNextHop: BOOL,
    NextHopPointer: ?*?*RTM_NEXTHOP_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmCreateDestEnum(
    RtmRegHandle: isize,
    TargetViews: u32,
    EnumFlags: u32,
    NetAddress: ?*RTM_NET_ADDRESS,
    ProtocolId: u32,
    RtmEnumHandle: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetEnumDests(
    RtmRegHandle: isize,
    EnumHandle: isize,
    NumDests: ?*u32,
    DestInfos: ?*RTM_DEST_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmReleaseDests(
    RtmRegHandle: isize,
    NumDests: u32,
    DestInfos: ?*RTM_DEST_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmCreateRouteEnum(
    RtmRegHandle: isize,
    DestHandle: isize,
    TargetViews: u32,
    EnumFlags: u32,
    StartDest: ?*RTM_NET_ADDRESS,
    MatchingFlags: u32,
    CriteriaRoute: ?*RTM_ROUTE_INFO,
    CriteriaInterface: u32,
    RtmEnumHandle: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetEnumRoutes(
    RtmRegHandle: isize,
    EnumHandle: isize,
    NumRoutes: ?*u32,
    RouteHandles: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmReleaseRoutes(
    RtmRegHandle: isize,
    NumRoutes: u32,
    RouteHandles: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmCreateNextHopEnum(
    RtmRegHandle: isize,
    EnumFlags: u32,
    NetAddress: ?*RTM_NET_ADDRESS,
    RtmEnumHandle: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetEnumNextHops(
    RtmRegHandle: isize,
    EnumHandle: isize,
    NumNextHops: ?*u32,
    NextHopHandles: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmReleaseNextHops(
    RtmRegHandle: isize,
    NumNextHops: u32,
    NextHopHandles: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmDeleteEnumHandle(
    RtmRegHandle: isize,
    EnumHandle: isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmRegisterForChangeNotification(
    RtmRegHandle: isize,
    TargetViews: u32,
    NotifyFlags: u32,
    NotifyContext: ?*anyopaque,
    NotifyHandle: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetChangedDests(
    RtmRegHandle: isize,
    NotifyHandle: isize,
    NumDests: ?*u32,
    ChangedDests: ?*RTM_DEST_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmReleaseChangedDests(
    RtmRegHandle: isize,
    NotifyHandle: isize,
    NumDests: u32,
    ChangedDests: ?*RTM_DEST_INFO,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmIgnoreChangedDests(
    RtmRegHandle: isize,
    NotifyHandle: isize,
    NumDests: u32,
    ChangedDests: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetChangeStatus(
    RtmRegHandle: isize,
    NotifyHandle: isize,
    DestHandle: isize,
    ChangeStatus: ?*BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmMarkDestForChangeNotification(
    RtmRegHandle: isize,
    NotifyHandle: isize,
    DestHandle: isize,
    MarkDest: BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmIsMarkedForChangeNotification(
    RtmRegHandle: isize,
    NotifyHandle: isize,
    DestHandle: isize,
    DestMarked: ?*BOOL,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmDeregisterFromChangeNotification(
    RtmRegHandle: isize,
    NotifyHandle: isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmCreateRouteList(
    RtmRegHandle: isize,
    RouteListHandle: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmInsertInRouteList(
    RtmRegHandle: isize,
    RouteListHandle: isize,
    NumRoutes: u32,
    RouteHandles: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmCreateRouteListEnum(
    RtmRegHandle: isize,
    RouteListHandle: isize,
    RtmEnumHandle: ?*isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmGetListEnumRoutes(
    RtmRegHandle: isize,
    EnumHandle: isize,
    NumRoutes: ?*u32,
    RouteHandles: [*]isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmDeleteRouteList(
    RtmRegHandle: isize,
    RouteListHandle: isize,
) callconv(@import("std").os.windows.WINAPI) u32;

// TODO: this type is limited to platform 'windowsServer2000'
pub extern "rtm" fn RtmReferenceHandles(
    RtmRegHandle: isize,
    NumHandles: u32,
    RtmHandles: ?*?HANDLE,
) callconv(@import("std").os.windows.WINAPI) u32;

//--------------------------------------------------------------------------------
// Section: Unicode Aliases (60)
//--------------------------------------------------------------------------------
const thismodule = @This();
pub usingnamespace switch (@import("../zig.zig").unicode_mode) {
    .ansi => struct {
        pub const RASCONN = thismodule.RASCONNA;
        pub const RASCONNSTATUS = thismodule.RASCONNSTATUSA;
        pub const RASDIALPARAMS = thismodule.RASDIALPARAMSA;
        pub const RASENTRYNAME = thismodule.RASENTRYNAMEA;
        pub const RASAMB = thismodule.RASAMBA;
        pub const RASPPPNBF = thismodule.RASPPPNBFA;
        pub const RASPPPIP = thismodule.RASPPPIPA;
        pub const RASPPPLCP = thismodule.RASPPPLCPA;
        pub const RASDEVINFO = thismodule.RASDEVINFOA;
        pub const RASENTRY = thismodule.RASENTRYA;
        pub const RASADFUNC = thismodule.RASADFUNCA;
        pub const RASSUBENTRY = thismodule.RASSUBENTRYA;
        pub const RASCREDENTIALS = thismodule.RASCREDENTIALSA;
        pub const RASAUTODIALENTRY = thismodule.RASAUTODIALENTRYA;
        pub const RASEAPUSERIDENTITY = thismodule.RASEAPUSERIDENTITYA;
        pub const RASPBDLGFUNC = thismodule.RASPBDLGFUNCA;
        pub const RASNOUSER = thismodule.RASNOUSERA;
        pub const RASPBDLG = thismodule.RASPBDLGA;
        pub const RASENTRYDLG = thismodule.RASENTRYDLGA;
        pub const RasDial = thismodule.RasDialA;
        pub const RasEnumConnections = thismodule.RasEnumConnectionsA;
        pub const RasEnumEntries = thismodule.RasEnumEntriesA;
        pub const RasGetConnectStatus = thismodule.RasGetConnectStatusA;
        pub const RasGetErrorString = thismodule.RasGetErrorStringA;
        pub const RasHangUp = thismodule.RasHangUpA;
        pub const RasGetProjectionInfo = thismodule.RasGetProjectionInfoA;
        pub const RasCreatePhonebookEntry = thismodule.RasCreatePhonebookEntryA;
        pub const RasEditPhonebookEntry = thismodule.RasEditPhonebookEntryA;
        pub const RasSetEntryDialParams = thismodule.RasSetEntryDialParamsA;
        pub const RasGetEntryDialParams = thismodule.RasGetEntryDialParamsA;
        pub const RasEnumDevices = thismodule.RasEnumDevicesA;
        pub const RasGetCountryInfo = thismodule.RasGetCountryInfoA;
        pub const RasGetEntryProperties = thismodule.RasGetEntryPropertiesA;
        pub const RasSetEntryProperties = thismodule.RasSetEntryPropertiesA;
        pub const RasRenameEntry = thismodule.RasRenameEntryA;
        pub const RasDeleteEntry = thismodule.RasDeleteEntryA;
        pub const RasValidateEntryName = thismodule.RasValidateEntryNameA;
        pub const RasConnectionNotification = thismodule.RasConnectionNotificationA;
        pub const RasGetSubEntryHandle = thismodule.RasGetSubEntryHandleA;
        pub const RasGetCredentials = thismodule.RasGetCredentialsA;
        pub const RasSetCredentials = thismodule.RasSetCredentialsA;
        pub const RasGetSubEntryProperties = thismodule.RasGetSubEntryPropertiesA;
        pub const RasSetSubEntryProperties = thismodule.RasSetSubEntryPropertiesA;
        pub const RasGetAutodialAddress = thismodule.RasGetAutodialAddressA;
        pub const RasSetAutodialAddress = thismodule.RasSetAutodialAddressA;
        pub const RasEnumAutodialAddresses = thismodule.RasEnumAutodialAddressesA;
        pub const RasGetAutodialEnable = thismodule.RasGetAutodialEnableA;
        pub const RasSetAutodialEnable = thismodule.RasSetAutodialEnableA;
        pub const RasGetAutodialParam = thismodule.RasGetAutodialParamA;
        pub const RasSetAutodialParam = thismodule.RasSetAutodialParamA;
        pub const RasGetEapUserData = thismodule.RasGetEapUserDataA;
        pub const RasSetEapUserData = thismodule.RasSetEapUserDataA;
        pub const RasGetCustomAuthData = thismodule.RasGetCustomAuthDataA;
        pub const RasSetCustomAuthData = thismodule.RasSetCustomAuthDataA;
        pub const RasGetEapUserIdentity = thismodule.RasGetEapUserIdentityA;
        pub const RasFreeEapUserIdentity = thismodule.RasFreeEapUserIdentityA;
        pub const RasDeleteSubEntry = thismodule.RasDeleteSubEntryA;
        pub const RasPhonebookDlg = thismodule.RasPhonebookDlgA;
        pub const RasEntryDlg = thismodule.RasEntryDlgA;
        pub const RasDialDlg = thismodule.RasDialDlgA;
    },
    .wide => struct {
        pub const RASCONN = thismodule.RASCONNW;
        pub const RASCONNSTATUS = thismodule.RASCONNSTATUSW;
        pub const RASDIALPARAMS = thismodule.RASDIALPARAMSW;
        pub const RASENTRYNAME = thismodule.RASENTRYNAMEW;
        pub const RASAMB = thismodule.RASAMBW;
        pub const RASPPPNBF = thismodule.RASPPPNBFW;
        pub const RASPPPIP = thismodule.RASPPPIPW;
        pub const RASPPPLCP = thismodule.RASPPPLCPW;
        pub const RASDEVINFO = thismodule.RASDEVINFOW;
        pub const RASENTRY = thismodule.RASENTRYW;
        pub const RASADFUNC = thismodule.RASADFUNCW;
        pub const RASSUBENTRY = thismodule.RASSUBENTRYW;
        pub const RASCREDENTIALS = thismodule.RASCREDENTIALSW;
        pub const RASAUTODIALENTRY = thismodule.RASAUTODIALENTRYW;
        pub const RASEAPUSERIDENTITY = thismodule.RASEAPUSERIDENTITYW;
        pub const RASPBDLGFUNC = thismodule.RASPBDLGFUNCW;
        pub const RASNOUSER = thismodule.RASNOUSERW;
        pub const RASPBDLG = thismodule.RASPBDLGW;
        pub const RASENTRYDLG = thismodule.RASENTRYDLGW;
        pub const RasDial = thismodule.RasDialW;
        pub const RasEnumConnections = thismodule.RasEnumConnectionsW;
        pub const RasEnumEntries = thismodule.RasEnumEntriesW;
        pub const RasGetConnectStatus = thismodule.RasGetConnectStatusW;
        pub const RasGetErrorString = thismodule.RasGetErrorStringW;
        pub const RasHangUp = thismodule.RasHangUpW;
        pub const RasGetProjectionInfo = thismodule.RasGetProjectionInfoW;
        pub const RasCreatePhonebookEntry = thismodule.RasCreatePhonebookEntryW;
        pub const RasEditPhonebookEntry = thismodule.RasEditPhonebookEntryW;
        pub const RasSetEntryDialParams = thismodule.RasSetEntryDialParamsW;
        pub const RasGetEntryDialParams = thismodule.RasGetEntryDialParamsW;
        pub const RasEnumDevices = thismodule.RasEnumDevicesW;
        pub const RasGetCountryInfo = thismodule.RasGetCountryInfoW;
        pub const RasGetEntryProperties = thismodule.RasGetEntryPropertiesW;
        pub const RasSetEntryProperties = thismodule.RasSetEntryPropertiesW;
        pub const RasRenameEntry = thismodule.RasRenameEntryW;
        pub const RasDeleteEntry = thismodule.RasDeleteEntryW;
        pub const RasValidateEntryName = thismodule.RasValidateEntryNameW;
        pub const RasConnectionNotification = thismodule.RasConnectionNotificationW;
        pub const RasGetSubEntryHandle = thismodule.RasGetSubEntryHandleW;
        pub const RasGetCredentials = thismodule.RasGetCredentialsW;
        pub const RasSetCredentials = thismodule.RasSetCredentialsW;
        pub const RasGetSubEntryProperties = thismodule.RasGetSubEntryPropertiesW;
        pub const RasSetSubEntryProperties = thismodule.RasSetSubEntryPropertiesW;
        pub const RasGetAutodialAddress = thismodule.RasGetAutodialAddressW;
        pub const RasSetAutodialAddress = thismodule.RasSetAutodialAddressW;
        pub const RasEnumAutodialAddresses = thismodule.RasEnumAutodialAddressesW;
        pub const RasGetAutodialEnable = thismodule.RasGetAutodialEnableW;
        pub const RasSetAutodialEnable = thismodule.RasSetAutodialEnableW;
        pub const RasGetAutodialParam = thismodule.RasGetAutodialParamW;
        pub const RasSetAutodialParam = thismodule.RasSetAutodialParamW;
        pub const RasGetEapUserData = thismodule.RasGetEapUserDataW;
        pub const RasSetEapUserData = thismodule.RasSetEapUserDataW;
        pub const RasGetCustomAuthData = thismodule.RasGetCustomAuthDataW;
        pub const RasSetCustomAuthData = thismodule.RasSetCustomAuthDataW;
        pub const RasGetEapUserIdentity = thismodule.RasGetEapUserIdentityW;
        pub const RasFreeEapUserIdentity = thismodule.RasFreeEapUserIdentityW;
        pub const RasDeleteSubEntry = thismodule.RasDeleteSubEntryW;
        pub const RasPhonebookDlg = thismodule.RasPhonebookDlgW;
        pub const RasEntryDlg = thismodule.RasEntryDlgW;
        pub const RasDialDlg = thismodule.RasDialDlgW;
    },
    .unspecified => if (@import("builtin").is_test) struct {
        pub const RASCONN = *opaque {};
        pub const RASCONNSTATUS = *opaque {};
        pub const RASDIALPARAMS = *opaque {};
        pub const RASENTRYNAME = *opaque {};
        pub const RASAMB = *opaque {};
        pub const RASPPPNBF = *opaque {};
        pub const RASPPPIP = *opaque {};
        pub const RASPPPLCP = *opaque {};
        pub const RASDEVINFO = *opaque {};
        pub const RASENTRY = *opaque {};
        pub const RASADFUNC = *opaque {};
        pub const RASSUBENTRY = *opaque {};
        pub const RASCREDENTIALS = *opaque {};
        pub const RASAUTODIALENTRY = *opaque {};
        pub const RASEAPUSERIDENTITY = *opaque {};
        pub const RASPBDLGFUNC = *opaque {};
        pub const RASNOUSER = *opaque {};
        pub const RASPBDLG = *opaque {};
        pub const RASENTRYDLG = *opaque {};
        pub const RasDial = *opaque {};
        pub const RasEnumConnections = *opaque {};
        pub const RasEnumEntries = *opaque {};
        pub const RasGetConnectStatus = *opaque {};
        pub const RasGetErrorString = *opaque {};
        pub const RasHangUp = *opaque {};
        pub const RasGetProjectionInfo = *opaque {};
        pub const RasCreatePhonebookEntry = *opaque {};
        pub const RasEditPhonebookEntry = *opaque {};
        pub const RasSetEntryDialParams = *opaque {};
        pub const RasGetEntryDialParams = *opaque {};
        pub const RasEnumDevices = *opaque {};
        pub const RasGetCountryInfo = *opaque {};
        pub const RasGetEntryProperties = *opaque {};
        pub const RasSetEntryProperties = *opaque {};
        pub const RasRenameEntry = *opaque {};
        pub const RasDeleteEntry = *opaque {};
        pub const RasValidateEntryName = *opaque {};
        pub const RasConnectionNotification = *opaque {};
        pub const RasGetSubEntryHandle = *opaque {};
        pub const RasGetCredentials = *opaque {};
        pub const RasSetCredentials = *opaque {};
        pub const RasGetSubEntryProperties = *opaque {};
        pub const RasSetSubEntryProperties = *opaque {};
        pub const RasGetAutodialAddress = *opaque {};
        pub const RasSetAutodialAddress = *opaque {};
        pub const RasEnumAutodialAddresses = *opaque {};
        pub const RasGetAutodialEnable = *opaque {};
        pub const RasSetAutodialEnable = *opaque {};
        pub const RasGetAutodialParam = *opaque {};
        pub const RasSetAutodialParam = *opaque {};
        pub const RasGetEapUserData = *opaque {};
        pub const RasSetEapUserData = *opaque {};
        pub const RasGetCustomAuthData = *opaque {};
        pub const RasSetCustomAuthData = *opaque {};
        pub const RasGetEapUserIdentity = *opaque {};
        pub const RasFreeEapUserIdentity = *opaque {};
        pub const RasDeleteSubEntry = *opaque {};
        pub const RasPhonebookDlg = *opaque {};
        pub const RasEntryDlg = *opaque {};
        pub const RasDialDlg = *opaque {};
    } else struct {
        pub const RASCONN = @compileError("'RASCONN' requires that UNICODE be set to true or false in the root module");
        pub const RASCONNSTATUS = @compileError("'RASCONNSTATUS' requires that UNICODE be set to true or false in the root module");
        pub const RASDIALPARAMS = @compileError("'RASDIALPARAMS' requires that UNICODE be set to true or false in the root module");
        pub const RASENTRYNAME = @compileError("'RASENTRYNAME' requires that UNICODE be set to true or false in the root module");
        pub const RASAMB = @compileError("'RASAMB' requires that UNICODE be set to true or false in the root module");
        pub const RASPPPNBF = @compileError("'RASPPPNBF' requires that UNICODE be set to true or false in the root module");
        pub const RASPPPIP = @compileError("'RASPPPIP' requires that UNICODE be set to true or false in the root module");
        pub const RASPPPLCP = @compileError("'RASPPPLCP' requires that UNICODE be set to true or false in the root module");
        pub const RASDEVINFO = @compileError("'RASDEVINFO' requires that UNICODE be set to true or false in the root module");
        pub const RASENTRY = @compileError("'RASENTRY' requires that UNICODE be set to true or false in the root module");
        pub const RASADFUNC = @compileError("'RASADFUNC' requires that UNICODE be set to true or false in the root module");
        pub const RASSUBENTRY = @compileError("'RASSUBENTRY' requires that UNICODE be set to true or false in the root module");
        pub const RASCREDENTIALS = @compileError("'RASCREDENTIALS' requires that UNICODE be set to true or false in the root module");
        pub const RASAUTODIALENTRY = @compileError("'RASAUTODIALENTRY' requires that UNICODE be set to true or false in the root module");
        pub const RASEAPUSERIDENTITY = @compileError("'RASEAPUSERIDENTITY' requires that UNICODE be set to true or false in the root module");
        pub const RASPBDLGFUNC = @compileError("'RASPBDLGFUNC' requires that UNICODE be set to true or false in the root module");
        pub const RASNOUSER = @compileError("'RASNOUSER' requires that UNICODE be set to true or false in the root module");
        pub const RASPBDLG = @compileError("'RASPBDLG' requires that UNICODE be set to true or false in the root module");
        pub const RASENTRYDLG = @compileError("'RASENTRYDLG' requires that UNICODE be set to true or false in the root module");
        pub const RasDial = @compileError("'RasDial' requires that UNICODE be set to true or false in the root module");
        pub const RasEnumConnections = @compileError("'RasEnumConnections' requires that UNICODE be set to true or false in the root module");
        pub const RasEnumEntries = @compileError("'RasEnumEntries' requires that UNICODE be set to true or false in the root module");
        pub const RasGetConnectStatus = @compileError("'RasGetConnectStatus' requires that UNICODE be set to true or false in the root module");
        pub const RasGetErrorString = @compileError("'RasGetErrorString' requires that UNICODE be set to true or false in the root module");
        pub const RasHangUp = @compileError("'RasHangUp' requires that UNICODE be set to true or false in the root module");
        pub const RasGetProjectionInfo = @compileError("'RasGetProjectionInfo' requires that UNICODE be set to true or false in the root module");
        pub const RasCreatePhonebookEntry = @compileError("'RasCreatePhonebookEntry' requires that UNICODE be set to true or false in the root module");
        pub const RasEditPhonebookEntry = @compileError("'RasEditPhonebookEntry' requires that UNICODE be set to true or false in the root module");
        pub const RasSetEntryDialParams = @compileError("'RasSetEntryDialParams' requires that UNICODE be set to true or false in the root module");
        pub const RasGetEntryDialParams = @compileError("'RasGetEntryDialParams' requires that UNICODE be set to true or false in the root module");
        pub const RasEnumDevices = @compileError("'RasEnumDevices' requires that UNICODE be set to true or false in the root module");
        pub const RasGetCountryInfo = @compileError("'RasGetCountryInfo' requires that UNICODE be set to true or false in the root module");
        pub const RasGetEntryProperties = @compileError("'RasGetEntryProperties' requires that UNICODE be set to true or false in the root module");
        pub const RasSetEntryProperties = @compileError("'RasSetEntryProperties' requires that UNICODE be set to true or false in the root module");
        pub const RasRenameEntry = @compileError("'RasRenameEntry' requires that UNICODE be set to true or false in the root module");
        pub const RasDeleteEntry = @compileError("'RasDeleteEntry' requires that UNICODE be set to true or false in the root module");
        pub const RasValidateEntryName = @compileError("'RasValidateEntryName' requires that UNICODE be set to true or false in the root module");
        pub const RasConnectionNotification = @compileError("'RasConnectionNotification' requires that UNICODE be set to true or false in the root module");
        pub const RasGetSubEntryHandle = @compileError("'RasGetSubEntryHandle' requires that UNICODE be set to true or false in the root module");
        pub const RasGetCredentials = @compileError("'RasGetCredentials' requires that UNICODE be set to true or false in the root module");
        pub const RasSetCredentials = @compileError("'RasSetCredentials' requires that UNICODE be set to true or false in the root module");
        pub const RasGetSubEntryProperties = @compileError("'RasGetSubEntryProperties' requires that UNICODE be set to true or false in the root module");
        pub const RasSetSubEntryProperties = @compileError("'RasSetSubEntryProperties' requires that UNICODE be set to true or false in the root module");
        pub const RasGetAutodialAddress = @compileError("'RasGetAutodialAddress' requires that UNICODE be set to true or false in the root module");
        pub const RasSetAutodialAddress = @compileError("'RasSetAutodialAddress' requires that UNICODE be set to true or false in the root module");
        pub const RasEnumAutodialAddresses = @compileError("'RasEnumAutodialAddresses' requires that UNICODE be set to true or false in the root module");
        pub const RasGetAutodialEnable = @compileError("'RasGetAutodialEnable' requires that UNICODE be set to true or false in the root module");
        pub const RasSetAutodialEnable = @compileError("'RasSetAutodialEnable' requires that UNICODE be set to true or false in the root module");
        pub const RasGetAutodialParam = @compileError("'RasGetAutodialParam' requires that UNICODE be set to true or false in the root module");
        pub const RasSetAutodialParam = @compileError("'RasSetAutodialParam' requires that UNICODE be set to true or false in the root module");
        pub const RasGetEapUserData = @compileError("'RasGetEapUserData' requires that UNICODE be set to true or false in the root module");
        pub const RasSetEapUserData = @compileError("'RasSetEapUserData' requires that UNICODE be set to true or false in the root module");
        pub const RasGetCustomAuthData = @compileError("'RasGetCustomAuthData' requires that UNICODE be set to true or false in the root module");
        pub const RasSetCustomAuthData = @compileError("'RasSetCustomAuthData' requires that UNICODE be set to true or false in the root module");
        pub const RasGetEapUserIdentity = @compileError("'RasGetEapUserIdentity' requires that UNICODE be set to true or false in the root module");
        pub const RasFreeEapUserIdentity = @compileError("'RasFreeEapUserIdentity' requires that UNICODE be set to true or false in the root module");
        pub const RasDeleteSubEntry = @compileError("'RasDeleteSubEntry' requires that UNICODE be set to true or false in the root module");
        pub const RasPhonebookDlg = @compileError("'RasPhonebookDlg' requires that UNICODE be set to true or false in the root module");
        pub const RasEntryDlg = @compileError("'RasEntryDlg' requires that UNICODE be set to true or false in the root module");
        pub const RasDialDlg = @compileError("'RasDialDlg' requires that UNICODE be set to true or false in the root module");
    },
};
//--------------------------------------------------------------------------------
// Section: Imports (14)
//--------------------------------------------------------------------------------
const Guid = @import("../zig.zig").Guid;
const BOOL = @import("../foundation.zig").BOOL;
const CHAR = @import("../foundation.zig").CHAR;
const CRYPTOAPI_BLOB = @import("../security/cryptography.zig").CRYPTOAPI_BLOB;
const FILETIME = @import("../foundation.zig").FILETIME;
const HANDLE = @import("../foundation.zig").HANDLE;
const HINSTANCE = @import("../foundation.zig").HINSTANCE;
const HWND = @import("../foundation.zig").HWND;
const IN6_ADDR = @import("../networking/win_sock.zig").IN6_ADDR;
const IN_ADDR = @import("../networking/win_sock.zig").IN_ADDR;
const LUID = @import("../foundation.zig").LUID;
const MIB_IPMCAST_MFE = @import("../network_management/ip_helper.zig").MIB_IPMCAST_MFE;
const PSTR = @import("../foundation.zig").PSTR;
const PWSTR = @import("../foundation.zig").PWSTR;

test {
    // The following '_ = <FuncPtrType>' lines are a workaround for https://github.com/ziglang/zig/issues/4476
    if (@hasDecl(@This(), "RASDIALFUNC")) {
        _ = RASDIALFUNC;
    }
    if (@hasDecl(@This(), "RASDIALFUNC1")) {
        _ = RASDIALFUNC1;
    }
    if (@hasDecl(@This(), "RASDIALFUNC2")) {
        _ = RASDIALFUNC2;
    }
    if (@hasDecl(@This(), "ORASADFUNC")) {
        _ = ORASADFUNC;
    }
    if (@hasDecl(@This(), "RASADFUNCA")) {
        _ = RASADFUNCA;
    }
    if (@hasDecl(@This(), "RASADFUNCW")) {
        _ = RASADFUNCW;
    }
    if (@hasDecl(@This(), "PFNRASGETBUFFER")) {
        _ = PFNRASGETBUFFER;
    }
    if (@hasDecl(@This(), "PFNRASFREEBUFFER")) {
        _ = PFNRASFREEBUFFER;
    }
    if (@hasDecl(@This(), "PFNRASSENDBUFFER")) {
        _ = PFNRASSENDBUFFER;
    }
    if (@hasDecl(@This(), "PFNRASRECEIVEBUFFER")) {
        _ = PFNRASRECEIVEBUFFER;
    }
    if (@hasDecl(@This(), "PFNRASRETRIEVEBUFFER")) {
        _ = PFNRASRETRIEVEBUFFER;
    }
    if (@hasDecl(@This(), "RasCustomScriptExecuteFn")) {
        _ = RasCustomScriptExecuteFn;
    }
    if (@hasDecl(@This(), "PFNRASSETCOMMSETTINGS")) {
        _ = PFNRASSETCOMMSETTINGS;
    }
    if (@hasDecl(@This(), "RasCustomHangUpFn")) {
        _ = RasCustomHangUpFn;
    }
    if (@hasDecl(@This(), "RasCustomDialFn")) {
        _ = RasCustomDialFn;
    }
    if (@hasDecl(@This(), "RasCustomDeleteEntryNotifyFn")) {
        _ = RasCustomDeleteEntryNotifyFn;
    }
    if (@hasDecl(@This(), "RASPBDLGFUNCW")) {
        _ = RASPBDLGFUNCW;
    }
    if (@hasDecl(@This(), "RASPBDLGFUNCA")) {
        _ = RASPBDLGFUNCA;
    }
    if (@hasDecl(@This(), "RasCustomDialDlgFn")) {
        _ = RasCustomDialDlgFn;
    }
    if (@hasDecl(@This(), "RasCustomEntryDlgFn")) {
        _ = RasCustomEntryDlgFn;
    }
    if (@hasDecl(@This(), "PMPRADMINGETIPADDRESSFORUSER")) {
        _ = PMPRADMINGETIPADDRESSFORUSER;
    }
    if (@hasDecl(@This(), "PMPRADMINRELEASEIPADRESS")) {
        _ = PMPRADMINRELEASEIPADRESS;
    }
    if (@hasDecl(@This(), "PMPRADMINGETIPV6ADDRESSFORUSER")) {
        _ = PMPRADMINGETIPV6ADDRESSFORUSER;
    }
    if (@hasDecl(@This(), "PMPRADMINRELEASEIPV6ADDRESSFORUSER")) {
        _ = PMPRADMINRELEASEIPV6ADDRESSFORUSER;
    }
    if (@hasDecl(@This(), "PMPRADMINACCEPTNEWCONNECTION")) {
        _ = PMPRADMINACCEPTNEWCONNECTION;
    }
    if (@hasDecl(@This(), "PMPRADMINACCEPTNEWCONNECTION2")) {
        _ = PMPRADMINACCEPTNEWCONNECTION2;
    }
    if (@hasDecl(@This(), "PMPRADMINACCEPTNEWCONNECTION3")) {
        _ = PMPRADMINACCEPTNEWCONNECTION3;
    }
    if (@hasDecl(@This(), "PMPRADMINACCEPTNEWLINK")) {
        _ = PMPRADMINACCEPTNEWLINK;
    }
    if (@hasDecl(@This(), "PMPRADMINCONNECTIONHANGUPNOTIFICATION")) {
        _ = PMPRADMINCONNECTIONHANGUPNOTIFICATION;
    }
    if (@hasDecl(@This(), "PMPRADMINCONNECTIONHANGUPNOTIFICATION2")) {
        _ = PMPRADMINCONNECTIONHANGUPNOTIFICATION2;
    }
    if (@hasDecl(@This(), "PMPRADMINCONNECTIONHANGUPNOTIFICATION3")) {
        _ = PMPRADMINCONNECTIONHANGUPNOTIFICATION3;
    }
    if (@hasDecl(@This(), "PMPRADMINLINKHANGUPNOTIFICATION")) {
        _ = PMPRADMINLINKHANGUPNOTIFICATION;
    }
    if (@hasDecl(@This(), "PMPRADMINTERMINATEDLL")) {
        _ = PMPRADMINTERMINATEDLL;
    }
    if (@hasDecl(@This(), "PMPRADMINACCEPTREAUTHENTICATION")) {
        _ = PMPRADMINACCEPTREAUTHENTICATION;
    }
    if (@hasDecl(@This(), "PMPRADMINACCEPTNEWCONNECTIONEX")) {
        _ = PMPRADMINACCEPTNEWCONNECTIONEX;
    }
    if (@hasDecl(@This(), "PMPRADMINACCEPTREAUTHENTICATIONEX")) {
        _ = PMPRADMINACCEPTREAUTHENTICATIONEX;
    }
    if (@hasDecl(@This(), "PMPRADMINACCEPTTUNNELENDPOINTCHANGEEX")) {
        _ = PMPRADMINACCEPTTUNNELENDPOINTCHANGEEX;
    }
    if (@hasDecl(@This(), "PMPRADMINCONNECTIONHANGUPNOTIFICATIONEX")) {
        _ = PMPRADMINCONNECTIONHANGUPNOTIFICATIONEX;
    }
    if (@hasDecl(@This(), "PMPRADMINRASVALIDATEPREAUTHENTICATEDCONNECTIONEX")) {
        _ = PMPRADMINRASVALIDATEPREAUTHENTICATEDCONNECTIONEX;
    }
    if (@hasDecl(@This(), "RASSECURITYPROC")) {
        _ = RASSECURITYPROC;
    }
    if (@hasDecl(@This(), "PMGM_RPF_CALLBACK")) {
        _ = PMGM_RPF_CALLBACK;
    }
    if (@hasDecl(@This(), "PMGM_CREATION_ALERT_CALLBACK")) {
        _ = PMGM_CREATION_ALERT_CALLBACK;
    }
    if (@hasDecl(@This(), "PMGM_PRUNE_ALERT_CALLBACK")) {
        _ = PMGM_PRUNE_ALERT_CALLBACK;
    }
    if (@hasDecl(@This(), "PMGM_JOIN_ALERT_CALLBACK")) {
        _ = PMGM_JOIN_ALERT_CALLBACK;
    }
    if (@hasDecl(@This(), "PMGM_WRONG_IF_CALLBACK")) {
        _ = PMGM_WRONG_IF_CALLBACK;
    }
    if (@hasDecl(@This(), "PMGM_LOCAL_JOIN_CALLBACK")) {
        _ = PMGM_LOCAL_JOIN_CALLBACK;
    }
    if (@hasDecl(@This(), "PMGM_LOCAL_LEAVE_CALLBACK")) {
        _ = PMGM_LOCAL_LEAVE_CALLBACK;
    }
    if (@hasDecl(@This(), "PMGM_DISABLE_IGMP_CALLBACK")) {
        _ = PMGM_DISABLE_IGMP_CALLBACK;
    }
    if (@hasDecl(@This(), "PMGM_ENABLE_IGMP_CALLBACK")) {
        _ = PMGM_ENABLE_IGMP_CALLBACK;
    }
    if (@hasDecl(@This(), "RTM_EVENT_CALLBACK")) {
        _ = RTM_EVENT_CALLBACK;
    }
    if (@hasDecl(@This(), "RTM_ENTITY_EXPORT_METHOD")) {
        _ = RTM_ENTITY_EXPORT_METHOD;
    }

    @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);
        }
    }
}
