/*
   Copyright (c) Microsoft Corporation

   SYNOPSIS

     Defines public datatypes used by the ICF API.
*/

cpp_quote("#include <winapifamily.h>")

#pragma region Desktop Family
cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")

import "wtypes.idl";

// Represents the different policy types understood by the firewall.
typedef enum NET_FW_POLICY_TYPE_
{
   NET_FW_POLICY_GROUP,
   NET_FW_POLICY_LOCAL,
   NET_FW_POLICY_EFFECTIVE,
   NET_FW_POLICY_TYPE_MAX
} NET_FW_POLICY_TYPE;

// Represents the different profile types that make up a firewall policy.
// Maintained for compatibility with INetFwMgr interface
typedef enum NET_FW_PROFILE_TYPE_
{
   NET_FW_PROFILE_DOMAIN,
   NET_FW_PROFILE_STANDARD,
   NET_FW_PROFILE_CURRENT,
   NET_FW_PROFILE_TYPE_MAX
} NET_FW_PROFILE_TYPE;

// Represents the different profile types that make up a firewall policy.
typedef enum NET_FW_PROFILE_TYPE2_
{
   NET_FW_PROFILE2_DOMAIN   = 0x0001,
   NET_FW_PROFILE2_PRIVATE  = 0x0002,
   NET_FW_PROFILE2_PUBLIC   = 0x0004,
   NET_FW_PROFILE2_ALL      = 0x7FFFFFFF
} NET_FW_PROFILE_TYPE2;

// Used to specify the IP version for a port.
typedef enum NET_FW_IP_VERSION_
{
   NET_FW_IP_VERSION_V4,
   NET_FW_IP_VERSION_V6,
   NET_FW_IP_VERSION_ANY,
   NET_FW_IP_VERSION_MAX
} NET_FW_IP_VERSION;

// Used to specify the scope of addresses from which a port can listen.
typedef enum NET_FW_SCOPE_
{
   NET_FW_SCOPE_ALL,
   NET_FW_SCOPE_LOCAL_SUBNET,
   NET_FW_SCOPE_CUSTOM,
   NET_FW_SCOPE_MAX
} NET_FW_SCOPE;

// Used to specify the IP protocol when opening/closing firewall ports.
typedef enum NET_FW_IP_PROTOCOL_
{
   NET_FW_IP_PROTOCOL_TCP =  6,
   NET_FW_IP_PROTOCOL_UDP = 17,
   NET_FW_IP_PROTOCOL_ANY = 256
} NET_FW_IP_PROTOCOL;

// Well-known services that can be authorized to listen through the firewall. 
// (WinXP and Win2k3 compatability)
typedef enum NET_FW_SERVICE_TYPE_
{
   NET_FW_SERVICE_FILE_AND_PRINT,
   NET_FW_SERVICE_UPNP,
   NET_FW_SERVICE_REMOTE_DESKTOP,
   NET_FW_SERVICE_NONE,
   NET_FW_SERVICE_TYPE_MAX
} NET_FW_SERVICE_TYPE;

// Used to specify the direction for the rule
typedef enum NET_FW_RULE_DIRECTION_
{
    NET_FW_RULE_DIR_IN = 1,
    NET_FW_RULE_DIR_OUT,
    NET_FW_RULE_DIR_MAX
} NET_FW_RULE_DIRECTION;

// Used to specify the action for a rule or a default setting
typedef enum NET_FW_ACTION_
{
    NET_FW_ACTION_BLOCK,
    NET_FW_ACTION_ALLOW,
    NET_FW_ACTION_MAX
} NET_FW_ACTION;

// Used to specify the modifiable state of current policy
typedef enum NET_FW_MODIFY_STATE_
{
    NET_FW_MODIFY_STATE_OK,             // Changing or adding a firewall rule (or group) to 
                                        // the current profile will take effect.
    NET_FW_MODIFY_STATE_GP_OVERRIDE,    // Changing or adding a firewall rule (or group) to 
                                        // the current profile will not take effect because group
                                        // policy overrides it.
    NET_FW_MODIFY_STATE_INBOUND_BLOCKED // Changing or adding an inbound firewall rule (or group) to 
                                        // the current profile will not take effect because unsolicited 
                                        // inbound traffic is not allowed.
} NET_FW_MODIFY_STATE;

// Represents the different types of rules that the firewall supports.
typedef enum NET_FW_RULE_CATEGORY_
{
   NET_FW_RULE_CATEGORY_BOOT,
   NET_FW_RULE_CATEGORY_STEALTH,
   NET_FW_RULE_CATEGORY_FIREWALL,
   NET_FW_RULE_CATEGORY_CONSEC,
   NET_FW_RULE_CATEGORY_MAX
} NET_FW_RULE_CATEGORY;

typedef enum NET_FW_EDGE_TRAVERSAL_TYPE_
{
    NET_FW_EDGE_TRAVERSAL_TYPE_DENY = 0,
    NET_FW_EDGE_TRAVERSAL_TYPE_ALLOW,
    NET_FW_EDGE_TRAVERSAL_TYPE_DEFER_TO_APP,
    NET_FW_EDGE_TRAVERSAL_TYPE_DEFER_TO_USER
}  NET_FW_EDGE_TRAVERSAL_TYPE;



typedef enum NET_FW_AUTHENTICATE_TYPE_
{
    NET_FW_AUTHENTICATE_NONE = 0,
    NET_FW_AUTHENTICATE_NO_ENCAPSULATION,
    NET_FW_AUTHENTICATE_WITH_INTEGRITY,
    NET_FW_AUTHENTICATE_AND_NEGOTIATE_ENCRYPTION,
    NET_FW_AUTHENTICATE_AND_ENCRYPT
} NET_FW_AUTHENTICATE_TYPE;


cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */")
#pragma endregion

