Click here to Skip to main content
15,558,352 members
Articles / Programming Languages / C#
Article
Posted 16 Apr 2010

Tagged as

Stats

80.5K views
5K downloads
34 bookmarked

Manage WiFi with Native API WIFI on Windows XP SP2

Rate me:
Please Sign up or sign in to vote.
4.40/5 (8 votes)
16 Apr 2010CPOL1 min read
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.

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:

C#
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:

C#
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:

C#
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:

C#
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:

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

Scroll through the list of connections:

C#
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:

C#
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)


Written By
Italy Italy
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionHID over WiFi Pin
Mehrdad_K20-Aug-18 22:31
professionalMehrdad_K20-Aug-18 22:31 
QuestionError Pin
Ashish Wazarkar17-Oct-14 20:33
Ashish 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
i003-Jul-12 20:22 
Questionhtml authentication Pin
Cool Smith5-Jun-12 20:25
Cool Smith5-Jun-12 20:25 
QuestionException (target .NET Framework 3.5) Pin
lyk1317-Nov-11 1:40
lyk1317-Nov-11 1:40 
QuestionCan't we use WlanGetProfile Pin
Debojyoti Majumder10-Nov-11 22:44
Debojyoti Majumder10-Nov-11 22:44 
I have one doubt in my mind.

What If, when the authentication algorithm is not among the two specified?
Then for each kind of authentication we need to construct a separate XML string.

I have seen a API; WlanGetProfile:http://msdn.microsoft.com/en-us/library/windows/desktop/ms706738(v=vs.85).aspx[^]

I guess it will give the required XML string.
Can you tell me how to use that API.
QuestionOther profiles needed? Pin
ralph195710-Jun-10 20:42
ralph195710-Jun-10 20:42 

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

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