Click here to Skip to main content
Click here to Skip to main content

Manage WiFi with Native API WIFI on Windows XP SP2

, 16 Apr 2010
Rate this:
Please Sign up or sign in to vote.
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:

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

 
QuestionIn windows SP 3 it will work or not ? Pinprofessionalrajkumar9127-Aug-13 5:54 
GeneralMy vote of 5 Pinmemberi003-Jul-12 19:22 
Questionhtml authentication PinmemberCool Smith5-Jun-12 19:25 
QuestionException (target .NET Framework 3.5) Pinmemberlyk1317-Nov-11 0:40 
QuestionCan't we use WlanGetProfile PinmemberDebojyoti Majumder10-Nov-11 21:44 
QuestionOther profiles needed? Pinmemberralph195710-Jun-10 19:42 

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 | Mobile
Web04 | 2.8.140826.1 | Last Updated 16 Apr 2010
Article Copyright 2010 by Alo1980
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid