We are trying to create an application for our BYOD users for them to connect effortlessly to our 802.1x network.
I've found the following code on the web :
Imports System.Runtime.InteropServices
Module Module1
Private _stringToHex As Object
Private Property Ret As UInteger
Private Property StringToHex(profileName As String) As Object
Get
Return _stringToHex
End Get
Set(value As Object)
_stringToHex = value
End Set
End Property
Private Property handle As IntPtr
Private Property Guid As Guid
<DllImport("Wlanapi", EntryPoint:="WlanSetProfileEapXmlUserData")> _
Public Function WlanSetProfileEapXmlUserData(<[In]()> ByVal hClientHandle As IntPtr, _
<[In](), MarshalAs(UnmanagedType.LPStruct)> ByVal interfaceGuid As Guid, _
<[In](), MarshalAs(UnmanagedType.LPWStr)> ByVal strProfileName As String, _
<[In]()> ByVal flags As ULong, _
<[In](), MarshalAs(UnmanagedType.LPWStr)> ByVal profileXml As String, _
<[In]()> ByVal pReserved As IntPtr) As UInteger
End Function
Sub Main()
Dim profileName As String = "ISL"
Dim AuthXml As String = String.Format("<?xml version=""1.0"" ?>" & _
"<EapHostUserCredentials xmlns=""http://www.microsoft.com/provisioning/EapHostUserCredentials"" xmlns:eapCommon=""http://www.microsoft.com/provisioning/EapCommon"" xmlns:baseEap=""http://www.microsoft.com/provisioning/BaseEapMethodUserCredentials"">" & _
"<EapMethod>" & _
"<eapCommon:Type>25</eapCommon:Type>" & _
"<eapCommon:AuthorId>0</eapCommon:AuthorId>" & _
"</EapMethod>" & _
"<Credentials xmlns:eapUser=""http://www.microsoft.com/provisioning/EapUserPropertiesV1"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:baseEap=""http://www.microsoft.com/provisioning/BaseEapUserPropertiesV1"" xmlns:MsPeap=""http://www.microsoft.com/provisioning/MsPeapUserPropertiesV1"" xmlns:MsChapV2=""http://www.microsoft.com/provisioning/MsChapV2UserPropertiesV1"">" & _
"<baseEap:Eap>" & _
"<baseEap:Type>25</baseEap:Type>" & _
"<MsPeap:EapType>" & _
"<MsPeap:RoutingIdentity>username</MsPeap:RoutingIdentity>" & _
"<baseEap:Eap>" & _
"<baseEap:Type>26</baseEap:Type>" & _
"<MsChapV2:EapType>" & _
"<MsChapV2:Username>USERNAME</MsChapV2:Username>" & _
"<MsChapV2:Password>PASSWORD</MsChapV2:Password>" & _
"<MsChapV2:LogonDomain>DOMAIN</MsChapV2:LogonDomain>" & _
"</MsChapV2:EapType>" & _
"</baseEap:Eap>" & _
"</MsPeap:EapType>" & _
"</baseEap:Eap>" & _
"</Credentials>" & _
"</EapHostUserCredentials>", profileName, StringToHex(profileName))
Ret = WlanSetProfileEapXmlUserData(handle, Guid, profileName, Convert.ToUInt64(&H1), AuthXml, IntPtr.Zero)
End Sub
End Module
This gives me the following error : "Additional information: A call to PInvoke function 'test_wlan_conf!test_wlan_conf.Module1::WlanSetProfileEapXmlUserData' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature."
With my almost non-existant .net skills, I admit it would be really difficult for me to solve. Any help would be deeply appreciated !
Solved it myself using an AutoIT UDF from their forums. The UDF calls the wlanapi.dll and allows to use its functions to configure WLAN access, profiles, etc.
Steps for Windows 7 are :
Steps for Windows 8 are :
Hope this helps