#pragma once # ifdef __cplusplus extern "C" { # endif PVOID MIDL_user_allocate(size_t NumBytes); VOID MIDL_user_free(void * MemPointer); //--------------------------------------- // Macros for handling additional attributes on WZC_WLAN_CONFIG structures // Coding of additional attributes in the Reserved bytes of WZC_WLAN_CONFIG objects: // Reserved // [1] [0] // ---SSSAA CCCCCCCC // SSS = [0-7; used: 0-6] selection set category, one of VPI, VI, PI, VPA, VA, PA, N // AA = [0-3; used: 0-3] authentication mode, NDIS_802_11_AUTHENTICATION_MODE value // CCCCCCCC = [0-255] retry counter for this object. // #define NWB_AUTHMODE_MASK 0x03 #define NWB_SELCATEG_MASK 0x1C #define NWB_SET_AUTHMODE(pNWB, nAM) (pNWB)->Reserved[1] = (((pNWB)->Reserved[1] & ~NWB_AUTHMODE_MASK) | ((nAM) & NWB_AUTHMODE_MASK)) #define NWB_GET_AUTHMODE(pNWB) ((pNWB)->Reserved[1] & NWB_AUTHMODE_MASK) #define NWB_SET_SELCATEG(pNWB, nSC) (pNWB)->Reserved[1] = (((pNWB)->Reserved[1] & ~NWB_SELCATEG_MASK) | (((nSC)<<2) & NWB_SELCATEG_MASK)) #define NWB_GET_SELCATEG(pNWB) (((pNWB)->Reserved[1] & NWB_SELCATEG_MASK)>>2) //--------------------------------------- // [P]RAW_DATA: generic description of a BLOB typedef struct { DWORD dwDataLen; #if defined(MIDL_PASS) [unique, size_is(dwDataLen)] LPBYTE pData; #else LPBYTE pData; #endif } RAW_DATA, *PRAW_DATA; #if !defined(MIDL_PASS) #include #define WZCCTL_MAX_WEPK_MATERIAL 32 #define WZCCTL_WEPK_PRESENT 0x0001 // specifies whether the configuration includes or not a WEP key #define WZCCTL_WEPK_XFORMAT 0x0002 // the WEP Key material (if any) is entered as hexadecimal digits #define WZCCTL_VOLATILE 0x0004 // this configuration should not be stored #define WZCCTL_POLICY 0x0008 // this configuration is enforced by the policy //--------------------------------------- // [P]WZC_WLAN_CONFIG: like NDIS_WLAN_BSSID, but contains all the additional // data that defines a [Preferred] Wireless Zero Configuration typedef struct { ULONG Length; // Length of this structure DWORD dwCtlFlags; // control flags (NON-NDIS) see WZC_WEPK* constants // fields from the NDIS_WLAN_BSSID structure NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID UCHAR Reserved[2]; NDIS_802_11_SSID Ssid; // SSID ULONG Privacy; // WEP encryption requirement NDIS_802_11_RSSI Rssi; // receive signal strength in dBm NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; NDIS_802_11_CONFIGURATION Configuration; NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; NDIS_802_11_RATES SupportedRates; // fields from NDIS_802_11_WEP structure ULONG KeyIndex; // 0 is the per-client key, 1-N are the global keys ULONG KeyLength; // length of key in bytes UCHAR KeyMaterial[WZCCTL_MAX_WEPK_MATERIAL]; // variable length depending on above field // aditional field for the Authentication mode NDIS_802_11_AUTHENTICATION_MODE AuthenticationMode; RAW_DATA rdUserData; // upper level buffer, attached to this config } WZC_WLAN_CONFIG, *PWZC_WLAN_CONFIG; //--------------------------------------- // [P]WZC_802_11_CONFIG_LIST: like NDIS_802_11_BSSID_LIST but indexes a // set of [Preferred] Wireless Zero Configurations typedef struct { ULONG NumberOfItems; // number of elements in the array below ULONG Index; // [start] index in the array below WZC_WLAN_CONFIG Config[1]; // array of WZC_WLAN_CONFIGs } WZC_802_11_CONFIG_LIST, *PWZC_802_11_CONFIG_LIST; // WZC dialog codes have the 16th bit set to 1. This is what quickly sepparates them from EAPOL signals. #define WZCDLG_IS_WZC(x) (((x) & 0x00010000) == 0x00010000) #define WZCDLG_FAILED 0x00010001 // 802.11 automatic configuration failed // Dialog BLOB passed through the UI pipe to netman and wzcdlg typedef struct _WZCDLG_DATA { DWORD dwCode; DWORD lParam; // long numeric data } WZCDLG_DATA, *PWZCDLG_DATA; #endif //--------------------------------------- // [P]INTF_ENTRY: describes the key info for one interface // this is used in conjunction with [P]INTFS_KEY_TABLE and WZCEnumInterfaces typedef struct { #if defined(MIDL_PASS) [unique, string] LPWSTR wszGuid; #else LPWSTR wszGuid; #endif } INTF_KEY_ENTRY, *PINTF_KEY_ENTRY; //--------------------------------------- // [P]INTFS_KEY_TABLE: describes the table of key info for all interfaces // this is used in conjunction with [P]INTF_KEY_ENTRY and WZCEnumInterfaces typedef struct { DWORD dwNumIntfs; #if defined(MIDL_PASS) [size_is(dwNumIntfs)] PINTF_KEY_ENTRY pIntfs; #else PINTF_KEY_ENTRY pIntfs; #endif } INTFS_KEY_TABLE, *PINTFS_KEY_TABLE; //--------------------------------------- // Bits used in conjunction with INTF_ENTRY, WZCQueryInterface // and WZCSetInterface. They point to the relevant information // that is requested from the service or to the relevant information // to be set down to the interface. On the output, they point to // the information that was processed (queried/set) successfully. #define INTF_ALL 0xffffffff #define INTF_ALL_FLAGS 0x0000ffff #define INTF_CM_MASK 0x00000007 // mask for the configuration mode (NDIS_802_11_NETWORK_INFRASTRUCTURE value) #define INTF_ENABLED 0x00008000 // zero conf enabled for this interface #define INTF_FALLBACK 0x00004000 // attempt to connect to visible non-preferred networks also #define INTF_OIDSSUPP 0x00002000 // 802.11 OIDs are supported by the driver/firmware (can't be set) #define INTF_VOLATILE 0x00001000 // the service parameters are volatile. #define INTF_POLICY 0x00000800 // the service parameters are enforced by the policy. #define INTF_DESCR 0x00010000 #define INTF_NDISMEDIA 0x00020000 #define INTF_PREFLIST 0x00040000 #define INTF_ALL_OIDS 0xfff00000 #define INTF_HANDLE 0x00100000 #define INTF_INFRAMODE 0x00200000 #define INTF_AUTHMODE 0x00400000 #define INTF_WEPSTATUS 0x00800000 #define INTF_SSID 0x01000000 #define INTF_BSSID 0x02000000 #define INTF_BSSIDLIST 0x04000000 #define INTF_LIST_SCAN 0x08000000 #define INTF_ADDWEPKEY 0x10000000 #define INTF_REMWEPKEY 0x20000000 #define INTF_LDDEFWKEY 0x40000000 // reload the default WEP_KEY //--------------------------------------- // Bits used to specify particular control options for the interface // entry #define INTFCTL_CM_MASK 0x0007 // mask for the configuration mode (NDIS_802_11_NETWORK_INFRASTRUCTURE value) #define INTFCTL_ENABLED 0x8000 // zero conf enabled for this interface #define INTFCTL_FALLBACK 0x4000 // attempt to connect to visible non-preferred networks also #define INTFCTL_OIDSSUPP 0x2000 // 802.11 OIDs are supported by the driver/firmware (can't be set) #define INTFCTL_VOLATILE 0x1000 // the service parameters are volatile. #define INTFCTL_POLICY 0x0800 // the service parameters policy enforced. //--------------------------------------- // [P]INTF_ENTRY: contains everything an RPC client needs to know // about an interface. It is used in conjunction with RpcQueryInterface. // Flags below are to be used to specify what info is queried for the // interface. Guid field is not covered since this is the key of the // structure so it has to be specified eather way. typedef struct { #if defined(MIDL_PASS) [string] LPWSTR wszGuid; #else LPWSTR wszGuid; #endif #if defined(MIDL_PASS) [string] LPWSTR wszDescr; #else LPWSTR wszDescr; #endif ULONG ulMediaState; ULONG ulMediaType; ULONG ulPhysicalMediaType; INT nInfraMode; INT nAuthMode; INT nWepStatus; DWORD dwCtlFlags; // control flags (see INTFCTL_* defines) RAW_DATA rdSSID; // encapsulates the SSID raw binary RAW_DATA rdBSSID; // encapsulates the BSSID raw binary RAW_DATA rdBSSIDList; // encapsulates one WZC_802_11_CONFIG_LIST structure RAW_DATA rdStSSIDList; // encapsulates one WZC_802_11_CONFIG_LIST structure RAW_DATA rdCtrlData; // data for various control actions on the interface } INTF_ENTRY, *PINTF_ENTRY; //--------------------------------------- // Defines and datastucture for handling the WZC Service Context (generic service params) // Default values for WZC internal timers (WZC_CONTEXT.tmT* fields) #define TMMS_DEFAULT_TR 0x00000bb8 // Timeout until a rescan completes: ms (3sec) #define TMMS_DEFAULT_TC 0x0000ea60 // Timeout to retry a valid configuration: ms (1min) #define TMMS_DEFAULT_TP 0x000007d0 // Timeout to expect a media connect for a selected config: ms (2sec) #define TMMS_DEFAULT_TF 0x0000ea60 // Timeout to recover from a failed configuration: ms (1min) #define TMMS_DEFAULT_TD 0x00001388 // Timeout to delay the {SSr} processing: ms (5sec) // Default turns logging on #define WZC_CTXT_LOGGING_ON 0x00000001 // Structure: WZC_CONTEXT holds all global service options that may be customized typedef struct _wzc_context_t { DWORD dwFlags; //service flags (see WZC_CTXT_*) //Service specific timers DWORD tmTr; //Rescan timeout DWORD tmTc; //Retry valid config timeout DWORD tmTp; //Timeout to expect a media connect DWORD tmTf; //Timeout to recover from an invalid config DWORD tmTd; //Timeout to delay {Ssr} processing } WZC_CONTEXT, *PWZC_CONTEXT; // Context control flags (see WZCSet/QueryContext() calls) #define WZC_CONTEXT_CTL_LOG 0x00000001 #define WZC_CONTEXT_CTL_TIMER_TR 0x00000002 #define WZC_CONTEXT_CTL_TIMER_TC 0x00000004 #define WZC_CONTEXT_CTL_TIMER_TP 0x00000008 #define WZC_CONTEXT_CTL_TIMER_TF 0x00000010 #define WZC_CONTEXT_CTL_TIMER_TD 0x00000020 //--------------------------------------- // Utility Rpc memory management routines #define RpcCAlloc(nBytes) MIDL_user_allocate(nBytes) #define RpcFree(pMem) MIDL_user_free(pMem) //--------------------------------------- // GetSPResModule: Utility function used to return // the handle to the module having WZC UI resources // (needed for XP.QFE & XP.SP1 builds) HINSTANCE WZCGetSPResModule(); //--------------------------------------- // GetSPResModule: Utility function used to return // the handle to the module having WZC UI resources // (needed for XP.QFE & XP.SP1 builds) HINSTANCE WZCGetDlgResModule(); //--------------------------------------- // WZCDeleteIntfObj: cleans an INTF_ENTRY object that is // allocated within any RPC call. // // Parameters // pIntf // [in] pointer to the INTF_ENTRY object to delete VOID WZCDeleteIntfObj( PINTF_ENTRY pIntf); //--------------------------------------- // WZCEnumInterfaces: provides the table of key // information for all the interfaces that are managed. // For all subsequent calls the clients need to identify // the Interface it operates on by providing the respective // key info. // // Parameters: // pSrvAddr // [in] WZC Server to contact // pIntf // [out] table of key info for all interfaces // Returned value: // Win32 error code DWORD WZCEnumInterfaces( LPWSTR pSrvAddr, PINTFS_KEY_TABLE pIntfs); //--------------------------------------- // WZCQueryIterface: provides detailed information for a // given interface. // // Parameters: // pSrvAddr: // [in] WZC Server to contact // dwInFlags: // [in] Fields to be queried (bitmask of INTF_*) // pIntf: // [in] Key of the interface to query // [out] Requested data from the interface. // pdwOutFlags // [out] Fields successfully retrieved (bitmask of INTF_*) // // Returned value: // Win32 error code DWORD WZCQueryInterface( LPWSTR pSrvAddr, DWORD dwInFlags, PINTF_ENTRY pIntf, LPDWORD pdwOutFlags); //--------------------------------------- // WZCSetIterface: sets specific information on the interface // // Parameters: // pSrvAddr: // [in] WZC Server to contact // dwInFlags: // [in] Fields to be set (bitmask of INTF_*) // pIntf: // [in] Key of the interface to query and data to be set // pdwOutFlags: // [out] Fields successfully set (bitmask of INTF_*) // // Returned value: // Win32 error code DWORD WZCSetInterface( LPWSTR pSrvAddr, DWORD dwInFlags, PINTF_ENTRY pIntf, LPDWORD pdwOutFlags); //--------------------------------------- // WZCRefreshInterface: refreshes specific information for the interface // // Parameters: // pSrvAddr: // [in] WZC Server to contact // dwInFlags: // [in] Fields to be refreshed and specific refresh actions to be // taken (bitmask of INTF_*) // pIntf: // [in] Key of the interface to be refreshed // pdwOutFlags: // [out] Fields successfully refreshed (bitmask of INTF_*) // // Returned value: // Win32 error code DWORD WZCRefreshInterface( LPWSTR pSrvAddr, DWORD dwInFlags, PINTF_ENTRY pIntf, LPDWORD pdwOutFlags); //--------------------------------------- // WZCQueryContext: retrieves the WZC service parameters // // Parameters: // pSrvAddr: // [in] WZC Server to contact // dwInFlags: // [in] Fields to be retrieved (bitmask of WZC_CONTEXT_CTL*) // pContext: // [in] Placeholder for the service parameters // pdwOutFlags: // [out] Fields successfully retrieved (bitmask of WZC_CONTEXT_CTL*) // // Returned value: // Win32 error code DWORD WZCQueryContext( LPWSTR pSrvAddr, DWORD dwInFlags, PWZC_CONTEXT pContext, LPDWORD pdwOutFlags); //--------------------------------------- // WZCSetContext: sets specific WZC service parameters // // Parameters: // pSrvAddr: // [in] WZC Server to contact // dwInFlags: // [in] Fields to be set (bitmask of WZC_CONTEXT_CTL*) // pContext: // [in] Context buffer containing the specific parameters to be set // pdwOutFlags: // [out] Fields successfully set (bitmask of WZC_CONTEXT_CTL*) // // Returned value: // Win32 error code DWORD WZCSetContext( LPWSTR pSrvAddr, DWORD dwInFlags, PWZC_CONTEXT pContext, LPDWORD pdwOutFlags); //============================================================================================ // // EAPOL-related definitions // #define EAPOL_DISABLED 0 #define EAPOL_ENABLED 0x80000000 #define EAPOL_MACHINE_AUTH_DISABLED 0 #define EAPOL_MACHINE_AUTH_ENABLED 0x40000000 #define EAPOL_GUEST_AUTH_DISABLED 0 #define EAPOL_GUEST_AUTH_ENABLED 0x20000000 #define EAP_TYPE_MD5 4 #define EAP_TYPE_TLS 13 #define EAP_TYPE_PEAP 25 #define EAP_TYPE_MSCHAPv2 26 #define DEFAULT_EAP_TYPE EAP_TYPE_TLS #define DEFAULT_EAPOL_STATE EAPOL_ENABLED #define DEFAULT_MACHINE_AUTH_STATE EAPOL_MACHINE_AUTH_ENABLED #define DEFAULT_GUEST_AUTH_STATE EAPOL_GUEST_AUTH_DISABLED #define DEFAULT_EAP_STATE (DEFAULT_EAPOL_STATE | DEFAULT_MACHINE_AUTH_STATE | DEFAULT_GUEST_AUTH_STATE) #define IS_EAPOL_ENABLED(x) \ ((x & EAPOL_ENABLED)?1:0) #define IS_MACHINE_AUTH_ENABLED(x) \ ((x & EAPOL_MACHINE_AUTH_ENABLED)?1:0) #define IS_GUEST_AUTH_ENABLED(x) \ ((x & EAPOL_GUEST_AUTH_ENABLED)?1:0) // Supplicant modes of operation depending on network state and // administrator decision #define SUPPLICANT_MODE_0 0 #define SUPPLICANT_MODE_1 1 #define SUPPLICANT_MODE_2 2 #define SUPPLICANT_MODE_3 3 #define MAX_SUPPLICANT_MODE SUPPLICANT_MODE_3 #define EAPOL_DEFAULT_SUPPLICANT_MODE SUPPLICANT_MODE_2 // Auth modes of operation depending on administrator decision #define EAPOL_AUTH_MODE_0 0 #define EAPOL_AUTH_MODE_1 1 #define EAPOL_AUTH_MODE_2 2 #define MAX_EAPOL_AUTH_MODE EAPOL_AUTH_MODE_2 #define EAPOL_DEFAULT_AUTH_MODE EAPOL_AUTH_MODE_1 #define GUID_STRING_LEN_WITH_TERM 39 // // Heap-related functions // #define MALLOC(s) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (s)) #define FREE(p) HeapFree(GetProcessHeap(), 0, (p)) // Double-threaded linked list node control block. There is one node for each // entry in a list. // // Applications should not access this structure directly. // typedef struct _DTLNODE { struct _DTLNODE* pdtlnodePrev; // Address of previous node or NULL if none struct _DTLNODE* pdtlnodeNext; // Address of next node or NULL if none VOID* pData; // Address of user's data LONG_PTR lNodeId; // User-defined node identification code } DTLNODE; // // Double-threaded linked list control block. There is one for each list. // // Applications should not access this structure directly. // typedef struct _DTLLIST { struct _DTLNODE* pdtlnodeFirst; // Address of first node or NULL if none struct _DTLNODE* pdtlnodeLast; // Address of last node or NULL if none LONG lNodes; // Number of nodes in list LONG_PTR lListId; // User-defined list identification code } DTLLIST; // List node free function. See FreeList. // typedef VOID (*PDESTROYNODE)( IN DTLNODE* ); #define DtlGetFirstNode( pdtllist ) ((pdtllist)->pdtlnodeFirst) #define DtlGetNextNode( pdtlnode ) ((pdtlnode)->pdtlnodeNext) #define DtlGetData( pdtlnode ) ((pdtlnode)->pData) typedef enum _EAPTLS_CONNPROP_ATTRIBUTE_TYPE_ { ecatMinimum = 0, //Undefined ecatFlagRegistryCert, //Value is a pointer to BOOL ecatFlagScard, //Value is a pointer to BOOL ecatFlagValidateServer, //Value is a pointer to BOOL ecatFlagValidateName, //Value is a pointer to BOOL ecatFlagDiffUser, //Value is a pointer to BOOL ecatServerNames, //Value is a pointer to NULL //terminated string of semi //colon delimited server names ecatRootHashes //Value is a pointer to //SHA1 hashes of Root certs. }EAPTLS_CONNPROP_ATTRIBUTE_TYPE; typedef struct _EAPTLS_CONNPROP_ATTRIBUTE { EAPTLS_CONNPROP_ATTRIBUTE_TYPE ecaType; DWORD dwLength; //includes byte length of the value //if it is a LPWSTR, it includes //the null termination. PVOID Value; }EAPTLS_CONNPROP_ATTRIBUTE, *PEAPTLS_CONNPROP_ATTRIBUTE; // EAP configuration DLL entrypoints. These definitions must match the // raseapif.h prototypes for RasEapInvokeConfigUI and RasEapFreeUserData. typedef DWORD (APIENTRY * RASEAPFREE)( PBYTE ); typedef DWORD (APIENTRY * RASEAPINVOKECONFIGUI)( DWORD, HWND, DWORD, PBYTE, DWORD, PBYTE*, DWORD*); typedef DWORD (APIENTRY * RASEAPGETIDENTITY)( DWORD, HWND, DWORD, const WCHAR*, const WCHAR*, PBYTE, DWORD, PBYTE, DWORD, PBYTE*, DWORD*, WCHAR** ); typedef DWORD (APIENTRY * RASEAPINVOKEINTERACTIVEUI)( DWORD, HWND, PBYTE, DWORD, PBYTE*, DWORD* ); typedef DWORD (APIENTRY * RASEAPCREATECONNPROP)( PEAPTLS_CONNPROP_ATTRIBUTE, PVOID*, DWORD*, PVOID*, DWORD*); #define RAS_EAP_VALUENAME_HIDEPEAPMSCHAPv2 TEXT("HidePEAPMSCHAPv2") // Flags #define EAPCFG_FLAG_RequireUsername 0x1 #define EAPCFG_FLAG_RequirePassword 0x2 // EAP configuration package definition. typedef struct _EAPCFG { // The package's unique EAP algorithm code. // DWORD dwKey; // The friendly name of the package suitable for display to the user. // TCHAR* pszFriendlyName; // The SystemRoot-relative path to the package's configuration DLL. May // be NULL indicating there is none. // TCHAR* pszConfigDll; // The SystemRoot-relative path to the package's identity DLL. May // be NULL indicating there is none. // TCHAR* pszIdentityDll; // Flags that specify what standard credentials are required at dial // time. // DWORD dwStdCredentialFlags; // True if user is to be forced to run the configuration API for the // package, i.e. defaults are not sufficient. // BOOL fForceConfig; // True if the package provides MPPE encryption keys, false if not. // BOOL fProvidesMppeKeys; // The package's default configuration blob, which can be overwritten by // the configuration DLL. May be NULL and 0 indicating there is none. // BYTE* pData; DWORD cbData; // EAP per user data to be stored in HKCU. This data is returned from // the EapInvokeConfigUI entrypoint in the eap dll. // BYTE* pUserData; DWORD cbUserData; // Set when the configuration DLL has been called on the package. This is // not a registry setting. It is provided for the convenience of the UI // only. // BOOL fConfigDllCalled; // Specifies the class ID of the configuration UI for remote machines. // Not used GUID guidConfigCLSID; } EAPCFG; VOID DtlDestroyList( DTLLIST*, PDESTROYNODE ); DTLNODE * CreateEapcfgNode( void); VOID DestroyEapcfgNode( IN OUT DTLNODE* pNode); DTLNODE* EapcfgNodeFromKey( IN DTLLIST* pList, IN DWORD dwKey); #define EAPOL_MUTUAL_AUTH_EAP_ONLY 0x00000001 DTLLIST* ReadEapcfgList(IN DWORD dwFlags); #define MAX_SSID_LEN 32 // // Structure : EAPOL_INTF_PARAMS // typedef struct _EAPOL_INTF_PARAMS { DWORD dwVersion; DWORD dwReserved2; DWORD dwEapFlags; DWORD dwEapType; DWORD dwSizeOfSSID; BYTE bSSID[MAX_SSID_LEN]; } EAPOL_INTF_PARAMS, *PEAPOL_INTF_PARAMS; // // EAPOL states // typedef enum _EAPOL_STATE { EAPOLSTATE_LOGOFF = 0, EAPOLSTATE_DISCONNECTED, EAPOLSTATE_CONNECTING, EAPOLSTATE_ACQUIRED, EAPOLSTATE_AUTHENTICATING, EAPOLSTATE_HELD, EAPOLSTATE_AUTHENTICATED, EAPOLSTATE_UNDEFINED } EAPOL_STATE; // // EAP UI State // typedef enum _EAPUISTATE { EAPUISTATE_WAITING_FOR_IDENTITY = 1, EAPUISTATE_WAITING_FOR_UI_RESPONSE } EAPUISTATE; // // Structure : EAPOL_INTF_STATE // typedef struct _EAPOL_INTF_STATE { #if defined(MIDL_PASS) [unique, string] LPWSTR pwszLocalMACAddr; #else LPWSTR pwszLocalMACAddr; #endif #if defined(MIDL_PASS) [unique, string] LPWSTR pwszRemoteMACAddr; #else LPWSTR pwszRemoteMACAddr; #endif DWORD dwSizeOfSSID; BYTE bSSID[MAX_SSID_LEN+1]; #if defined(MIDL_PASS) [unique, string] LPSTR pszEapIdentity; #else LPSTR pszEapIdentity; #endif EAPOL_STATE dwState; EAPUISTATE dwEapUIState; DWORD dwEAPOLAuthMode; DWORD dwEAPOLAuthenticationType; DWORD dwEapType; DWORD dwFailCount; DWORD dwPhysicalMediumType; } EAPOL_INTF_STATE, *PEAPOL_INTF_STATE; #define EAPOL_VERSION_1 1 #define EAPOL_VERSION_2 2 #define EAPOL_VERSION_3 3 #define EAPOL_CURRENT_VERSION EAPOL_VERSION_3 // // Structure : EAPOL_AUTH_DATA // typedef struct _EAPOL_AUTH_DATA { DWORD dwEapType; DWORD dwSize; BYTE bData[1]; } EAPOL_AUTH_DATA, *PEAPOL_AUTH_DATA; DWORD WZCGetEapUserInfo ( IN WCHAR *pwszGUID, IN DWORD dwEapTypeId, IN DWORD dwSizOfSSID, IN BYTE *pbSSID, IN OUT PBYTE pbUserInfo, IN OUT DWORD *pdwInfoSize ); // Structure used to define the UI Response. // Currently it contains upto 3 blobs. // If more are required, add to the structure #define NUM_RESP_BLOBS 3 typedef struct _EAPOLUI_RESP { RAW_DATA rdData0; RAW_DATA rdData1; RAW_DATA rdData2; } EAPOLUI_RESP, *PEAPOLUI_RESP; // // EAPOL Policy related parameters // #define EAPOL_CERT_TYPE_SMARTCARD 1 #define EAPOL_CERT_TYPE_MC_CERT 2 typedef struct _EAPOL_POLICY_DATA { BYTE pbWirelessSSID[32]; DWORD dwWirelessSSIDLen; DWORD dwEnable8021x; DWORD dw8021xMode; DWORD dwEAPType; DWORD dwMachineAuthentication; DWORD dwMachineAuthenticationType; DWORD dwGuestAuthentication; DWORD dwIEEE8021xMaxStart; DWORD dwIEEE8021xStartPeriod; DWORD dwIEEE8021xAuthPeriod; DWORD dwIEEE8021xHeldPeriod; DWORD dwEAPDataLen; LPBYTE pbEAPData; } EAPOL_POLICY_DATA, *PEAPOL_POLICY_DATA; typedef struct _EAPOL_POLICY_LIST { DWORD dwNumberOfItems; EAPOL_POLICY_DATA EAPOLPolicy[1]; } EAPOL_POLICY_LIST, *PEAPOL_POLICY_LIST; #if !defined(MIDL_PASS) //--------------------------------------- // WZCEapolGetCustomAuthData: Get EAP-specific configuration data for interface // // Parameters: // pSrvAddr: // [in] WZC Server to contact // pwszGuid: // [in] Interface GUID // dwEapTypeId: // [in] EAP type Id // dwSizeOfSSID: // [in] Size of SSID for which data is to be stored // pbSSID: // [in] SSID for which data is to be stored // pbConnInfo: // [in out] Connection EAP info // pdwInfoSize: // [in out] Size of pbConnInfo // // Returned value: // Win32 error code DWORD WZCEapolGetCustomAuthData ( IN LPWSTR pSrvAddr, IN PWCHAR pwszGuid, IN DWORD dwEapTypeId, IN DWORD dwSizeOfSSID, IN BYTE *pbSSID, IN OUT PBYTE pbConnInfo, IN OUT PDWORD pdwInfoSize ); //--------------------------------------- // WZCEapolSetCustomAuthData: Set EAP-specific configuration data for interface // // Parameters: // pSrvAddr: // [in] WZC Server to contact // pwszGuid: // [in] Interface GUID // dwEapTypeId: // [in] EAP type Id // dwSizeOfSSID: // [in] Size of SSID for which data is to be stored // pbSSID: // [in] SSID for which data is to be stored // pbConnInfo: // [in] Connection EAP info // pdwInfoSize: // [in] Size of pbConnInfo // // Returned value: // Win32 error code DWORD WZCEapolSetCustomAuthData ( IN LPWSTR pSrvAddr, IN PWCHAR pwszGuid, IN DWORD dwEapTypeId, IN DWORD dwSizeOfSSID, IN BYTE *pbSSID, IN PBYTE pbConnInfo, IN DWORD dwInfoSize ); //--------------------------------------- // WZCEapolGetInterfaceParams: Get configuration parameters for interface // // Parameters: // pSrvAddr: // [in] WZC Server to contact // pwszGuid: // [in] Interface GUID // pIntfParams: // [in out] Interface Parameters // // Returned value: // Win32 error code DWORD WZCEapolGetInterfaceParams ( IN LPWSTR pSrvAddr, IN PWCHAR pwszGuid, IN OUT EAPOL_INTF_PARAMS *pIntfParams ); //--------------------------------------- // WZCEapolSetInterfaceParams: Set configuration parameters for interface // // Parameters: // pSrvAddr: // [in] WZC Server to contact // pwszGuid: // [in] Interface GUID // pIntfParams: // [in] Interface parameters // Returned value: // Win32 error code DWORD WZCEapolSetInterfaceParams ( IN LPWSTR pSrvAddr, IN PWCHAR pwszGuid, IN EAPOL_INTF_PARAMS *pIntfParams ); //--------------------------------------- // WZCEapolReAuthenticate : Restart 802.1X authentication on an interface // // Parameters: // pSrvAddr: // [in] WZC Server to contact // pwszGuid: // [in] Interface GUID // Returned value: // Win32 error code DWORD WZCEapolReAuthenticate ( IN LPWSTR pSrvAddr, IN PWCHAR pwszGuid ); //--------------------------------------- // WZCEapolQueryState: Query the interface 802.1X/EAPOL state // // Parameters: // pSrvAddr: // [in] WZC Server to contact // pwszGuid: // [in] Interface GUID // pIntfState: // [in out] EAPOL Interface State // // Returned value: // Win32 error code DWORD WZCEapolQueryState ( IN LPWSTR pSrvAddr, IN PWCHAR pwszGuid, IN OUT EAPOL_INTF_STATE *pIntfState ); #endif // MIDL_PASS // // Free EAPOL interface state information on the client side obtained via // RPC query // DWORD WZCEapolFreeState ( IN EAPOL_INTF_STATE *pIntfState ); // // Structure: EAPOL_EAP_UI_CONTEXT // typedef struct _EAPOL_EAP_UI_CONTEXT { DWORD dwEAPOLUIMsgType; WCHAR wszGUID[39]; DWORD dwSessionId; DWORD dwContextId; DWORD dwEapId; DWORD dwEapTypeId; DWORD dwEapFlags; WCHAR wszSSID[MAX_SSID_LEN+1]; DWORD dwSizeOfSSID; BYTE bSSID[MAX_SSID_LEN]; DWORD dwEAPOLState; DWORD dwRetCode; DWORD dwSizeOfEapUIData; BYTE bEapUIData[1]; } EAPOL_EAP_UI_CONTEXT, *PEAPOL_EAP_UI_CONTEXT; // // Defines for messaging between Service and Dialog DLL // #define EAPOLUI_GET_USERIDENTITY 0x00000001 #define EAPOLUI_GET_USERNAMEPASSWORD 0x00000002 #define EAPOLUI_INVOKEINTERACTIVEUI 0x00000004 #define EAPOLUI_EAP_NOTIFICATION 0x00000008 #define EAPOLUI_REAUTHENTICATE 0x00000010 #define EAPOLUI_CREATEBALLOON 0x00000020 #define EAPOLUI_CLEANUP 0x00000040 #define EAPOLUI_DUMMY 0x00000080 #define NUM_EAPOL_DLG_MSGS 8 //--------------------------------------- // WZCEapolUIResponse: Send Dlg response to Service // // Parameters: // pSrvAddr: // [in] WZC Server to contact // EapolUIContext: // [in] EAPOLUI Context data // EapolUI: // [in] EAPOLUI response data // // Returned value: // Win32 error code DWORD WZCEapolUIResponse ( IN LPWSTR pSrvAddr, IN EAPOL_EAP_UI_CONTEXT EapolUIContext, IN EAPOLUI_RESP EapolUIResp ); # ifdef __cplusplus } # endif