Click here to Skip to main content
11,496,146 members (1,580 online)
Click here to Skip to main content

Manage WiFi with Native API WIFI on Windows XP SP2

, 16 Apr 2010 CPOL 41.3K 3.9K 30
This article will demonstrate the ability to establish and operate a WiFi connection from a C# program using the Wireless LAN API on a Windows XP Embedded SP2 \ Windows XP Pro SP2.
The site is currently in read-only mode for maintenance. Posting of new items will be available again shortly.

Pre-requisites

Introduction

This article will demonstrate the ability to establish and operate a WiFi connection from a C# program using the Wireless LAN API on a Windows XP Embedded SP2 \ Windows XP Pro SP2.

Step 1

The first step was to create a function that returns the WiFi networks available for connection. Using the WLANOpenHandle, you create the client to use for the session:

Wlan.WlanOpenHandle( 
Wlan.WLAN_CLIENT_VERSION_XP_SP2, <--- (Wireless LAN API for Windows XP with SP2) 
IntPtr.Zero, 
ref negotiatedVersion, 
ref clientHandle)

Step 2

Then list all the wireless LAN interfaces visible from our PC:

Wlan.WlanEnumInterfaces( 
clientHandle, <--- (clientHandle precedentemente istanziato) 
IntPtr.Zero, 
ref pInterfaceList) 

Step 3

Using the pointer to the list of available interfaces, we will populate the structure that will contain all Wlan.WLAN_INTERFACE_INFO_LIST NIC interface information:

Wlan.WLAN_INTERFACE_INFO_LIST interfaceList = 
		new Wlan.WLAN_INTERFACE_INFO_LIST(pInterfaceList); 

Step 4

What we are still missing at this point and guidance of our interface to be passed to the function Wlan.WlanGetAvailableNetworkList, we get through this passage:

Guid InterfaceGuid = 
	((Wlan.WLAN_INTERFACE_INFO)interfaceList.InterfaceInfo[0]).InterfaceGuid; 

Step 5

Now we have all the elements to call the API Wlan.WlanGetAvailableNetworkList; declare that we will return the pointer function and proceed:

IntPtr pAvailableNetworkList = IntPtr.Zero; 
Wlan.WlanGetAvailableNetworkList( clientHandle, 
                                  InterfaceGuid, 
                                  Wlan.WlanGetAvailableNetworkFlags.
				IncludeAllManualHiddenProfiles,
                                  IntPtr.Zero, 
                                  out ppAvailableNetworkList)

Scroll through the list of connections:

Wlan.WLAN_AVAILABLE_NETWORK_LIST wlanAvailableNetworkList = 
    new Wlan.WLAN_AVAILABLE_NETWORK_LIST(pAvailableNetworkList); 
Wlan.WlanFreeMemory(pAvailableNetworkList); 
for (int j = 0; j < wlanAvailableNetworkList.dwNumberOfItems; j++) 
{ 
   Wlan.WLAN_AVAILABLE_NETWORK network = wlanAvailableNetworkList.Networks[j]; 
   string SSId = GetStringForSSID(network.dot11Ssid); 
   if(ssid != "") 
   { 
      //Connessione 
      Wifi_SetProfile(network.dot11DefaultAuthAlgorithm, SSId); 
   }  
}

Depending on the type of connection configured for my Access Point imposed the correct profile and I connect:

static void Wifi_SetProfile(Wlan.DOT11_AUTH_ALGORITHM connType, string sNetSSId) 
{ 
   switch (connType) 
   { 
      //WEP - OPen 
      case Wlan.DOT11_AUTH_ALGORITHM.DOT11_AUTH_ALGO_80211_OPEN: 
      profileXml = string.Format(
          "<?xml version=\"1.0\"?>
          <WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\">
          <name>{0}</name><SSIDConfig><SSID><name>{0}</name></SSID></SSIDConfig>
          <connectionType>ESS</connectionType><MSM><security><authEncryption>
          <authentication>open</authentication><encryption>WEP</encryption>
          <useOneX>false</useOneX></authEncryption><sharedKey>
          <keyType>networkKey</keyType><protected>false</protected>
          <keyMaterial>{1}</keyMaterial></sharedKey><keyIndex>0</keyIndex>
          </security></MSM></WLANProfile>", 
      profileName, key); 
 
      Wlan.WlanSetProfile( clientHandle, 
			InterfaceGuid, 
			Wlan.WlanProfileFlags.AllUser, 
			profileXml, 
			null, 
			true, 
			IntPtr.Zero, 
			out reasonCode); 
 
     if(reasonCode==Wlan.WlanReasonCode.Success) 
     { 
        //Connect!!! 
        ... 
     } 
     else 
     { 
        //Return usually 1168 – Error is on profile Xml or on key 
     } 
     break;
 
     //WPA_PSK 
     case Wlan.DOT11_AUTH_ALGORITHM.DOT11_AUTH_ALGO_WPA_PSK: 
     profileXml = string.Format("<?xml version=\"1.0\" encoding=\"US-ASCII\"?>
         <WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\">
         <name>{0}</name><SSIDConfig><SSID><name>{0}</name></SSID></SSIDConfig>
         <connectionType>ESS</connectionType><connectionMode>auto</connectionMode>
         <autoSwitch>false</autoSwitch><MSM><security><authEncryption>
         <authentication>WPAPSK</authentication><encryption>TKIP</encryption>
         <useOneX>false</useOneX></authEncryption><sharedKey>
         <keyType>passPhrase</keyType><protected>false</protected>
         <keyMaterial>{1}</keyMaterial></sharedKey></security></MSM></WLANProfile>", 
         profileName, key);
 
 		 Wlan.WlanSetProfile( clientHandle, 
                          InterfaceGuid, 
                          Wlan.WlanProfileFlags.AllUser, 
                          profileXml, 
                          null, 
                          true, 
                          IntPtr.Zero, 
                          out reasonCode);
 
 		 if(reasonCode == Wlan.WlanReasonCode.Success) 
     { 
         //Connect!!! 
         ... 
     } 
     else 
     { 
        //Return usually 1168 – Error is on profile Xml or on key 
     } 
     break; 
} 

If all parameters are correct, you should be connected to the network.

History

  • 16th April, 2010: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Alo1980

Italy Italy
No Biography provided

Comments and Discussions

 
QuestionError Pin
Ashish Wazarkar17-Oct-14 20:33
memberAshish Wazarkar17-Oct-14 20:33 
QuestionIn windows SP 3 it will work or not ? Pin
rajkumar9127-Aug-13 6:54
professionalrajkumar9127-Aug-13 6:54 
GeneralMy vote of 5 Pin
i003-Jul-12 20:22
memberi003-Jul-12 20:22 
Questionhtml authentication Pin
Cool Smith5-Jun-12 20:25
memberCool Smith5-Jun-12 20:25 
QuestionException (target .NET Framework 3.5) Pin
lyk1317-Nov-11 1:40
memberlyk1317-Nov-11 1:40 
QuestionCan't we use WlanGetProfile Pin
Debojyoti Majumder10-Nov-11 22:44
memberDebojyoti Majumder10-Nov-11 22:44 
QuestionOther profiles needed? Pin
ralph195710-Jun-10 20:42
memberralph195710-Jun-10 20:42 
I'm developing a network connect program to be used by company employees when traveling (for use in hotels and with open hotspots) or connecting from home offices (used with a wlan router).

Connecting with an existing WLAN profile using WLANCONNECT and a connection mode of wlan_connection_mode_profile works fine but:

--how do I connect to an open Hotspot network?
--how can I determine if a network is open; or needs a User and Password; or needs a WPA key?
--which AUTH and ENCRYPTION parameters are needed?
Ralph

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.150520.1 | Last Updated 16 Apr 2010
Article Copyright 2010 by Alo1980
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid