// WLAN Site Management Initialization
WlanOpenHandle(
WLAN_API_VERSION, // current API version
NULL, // reserved, must be NULL
&dwServiceVersion, // version of the WLAN service
&hClientHandle // returned handle
);
// WLAN Site Management De-initialization
WlanCloseHandle(
hClientHandle, // opened handle
NULL // reserved, must be NULL
);
// Enumerate WLAN interfaces
PWLAN_INTERFACE_INFO_LIST pInterfaceList = NULL;
WlanEnumInterface(
hClientHandle, // opened handle
NULL, // reserved, must be NULL
&pInterfaceList // returned interface info list
);
// Process interface information, obtain interface GUID
WlanFreeMemory(pInterfaceList);
/* Set interface property, e.g. turn off radio */
WLAN_PHY_RADIO_STATE wlanPhyRadioState;
wlanPhyRadioState.dwPhyIndex = 0; // turn off the radio on 1st PHY
wlanPhyRadioState.dot11SoftwareRadioState = dot11_radio_state_off;
WlanSetInterface(
hClientHandle, // opened handle
pInterfaceGuid, // interface GUID
wlan_intf_opcode_radio_state, // opcode to set radio state
sizeof(WLAN_PHY_RADIO_STATE), // data size
(PBYTE)&wlanPhyRadioState, // pointer to the data
NULL // reserved, must be NULL
);
// Register notifications
WlanRegisterNotification(
hClientHandle, // opened handle
WLAN_NOTIFICATION_SOURCE_ALL, // register all notifications
FALSE, // don’t ignore duplicate
NotificationCallBack, // callback function
pContext, // context data
NULL, // reserved, must be NULL,
NULL // don’t return previous
);
// Callback function will be called in another thread when
// a notification is available
// Perform a scan on a specific interfaces
WlanScan(
hClientHandle, // opened handle
&pInterfaceGuid, // interface GUID
NULL, // don’t probe
NULL, // don’t probe
NULL // reserved, must be NULL
);
// Query available networks. This is usually done when the scan
// complete notification is received.
PWLAN_AVAILABLE_NETWORK_LIST pNetworkList = NULL;
WlanGetAvailableNetworkList(
hClientHandle, // opened handle
pInterfaceGuid, // interface GUID
0, // don’t include hidden/adhoc profiles
NULL, // reserved, must be NULL
&pNetworkList // pointer to the returned network list
);
// Process available networks
WlanFreeMemory(pNetworkList);
// Query the BSS list of a particular network or all networks.
PWLAN_BSS_LIST pBssList = NULL;
WlanGetNetworkBssList(
hClientHandle, // opened handle
pInterfaceGuid, // interface GUID
pSsid, // SSID, pass in NULL for all networks
dot11_BSS_type_infrastructure, // BSS type
TRUE, // security enabled
NULL, // reserved, must be NULL
&pNetworkList // pointer to the returned BSS list
);
// Process BSS entries
PWLAN_BSS_ENTRY pBssEntry = &pNetworkList->wlanBssEntries[i];
// Process raw IE if needed
WlanFreeMemory(pBssList);
// Connect to a secure network without a profile
// Prepare connection parameters
WLAN_CONNECTION_PARAMETERS ConnPara;
ConnPara.pDot11Ssid = pDot11Ssid; // SSID
ConnPara.dot11BssType = dot11_BSS_type_infrastructure; // BSS type
ConnPara.pDesiredBssidList = NULL; // no desired BSSID
ConnPara.strProfile = NULL; // no profile
ConnPara.wlanConnectionMode = wlan_connection_mode_discovery_secure;
ConnPara.dwFlags = 0; // no connection flag
WlanConnect(
hClientHandle, // opened handle
pInterfaceGuid, // interface GUID
&ConnPara, // connection parameters
NULL // reserved, must be NULL
);
// Update connection status upon receiving connection attempt fail
// notification
VOID OnConnectionAttemptFail(
PWLAN_CONNECTION_NOTIFICATION_DATA pConnNotifData
)
{
// get the reason for the attempt failure
WCHAR strReason[256]; // string buffer
WlanReasonCodeToString(
pConnNotifData->wlanReasonCode, // reason code failure
256, // size of the string buffer
strReason, // string buffer
NULL // reserved, must be NULL
);
// print out the string
}