Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Solved Connect to Enterprise WiFi network issue

    General and Desktop
    4
    19
    1691
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Cobra91151
      Cobra91151 last edited by

      Also, I think it could be following:

      Second solution:

      1. WlanSetProfileEapUserData sets user credentials for profile;
      2. Use WlanSetProfileEapXmlUserData to set this xml profile without user credentials: https://docs.microsoft.com/en-us/windows/win32/nativewifi/wpa2-enterprise-with-peap-mschapv2-profile-sample

      The reason for the second approach, because this profile: https://docs.microsoft.com/en-us/windows/win32/eaphost/peap-ms-chapv2-user-properties contains only user credentials, but does not contains the network information, for example, authentication, encryption data. I will try my second solution.

      1 Reply Last reply Reply Quote 0
      • Cobra91151
        Cobra91151 last edited by

        From Microsoft docs, only one method should be used, WlanSetProfileEapUserData is equivalent to WlanSetProfileEapXmlUserData. So, I will use WlanSetProfileEapXmlUserData to set XML string. I think my XML string profile is wrong.

        1 Reply Last reply Reply Quote 0
        • Cobra91151
          Cobra91151 last edited by

          I tried WlanSetProfileEapUserData version instead of the function WlanSetProfileEapXmlUserData:

          Code:

          EAP_METHOD_TYPE type;
          DWORD dwUserDataSize = 0;
          LPBYTE pbUserData = nullptr;
          DWORD dwResult = WlanSetProfileEapUserData(hClient, &adapterGUID, wlanProfile, type, WLAN_SET_EAPHOST_DATA_ALL_USERS, dwUserDataSize, pbUserData, nullptr);
          

          But I get 1168, the same error. Here is my profile example:

          <?xml version="1.0"?>
          <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
          	<name>Test</name>
          	<SSIDConfig>
          		<SSID>
          			<hex>436F62726154656B</hex>
          			<name>Test</name>
          		</SSID>
          	</SSIDConfig>
          	<connectionType>ESS</connectionType>
          	<connectionMode>auto</connectionMode>
          	<MSM>
          		<security>
          			<authEncryption>
          				<authentication>WPA2</authentication>
          				<encryption>AES</encryption>
          				<useOneX>true</useOneX>
          			</authEncryption>
          			<PMKCacheMode>enabled</PMKCacheMode>
          			<PMKCacheTTL>720</PMKCacheTTL>
          			<PMKCacheSize>128</PMKCacheSize>
          			<preAuthMode>disabled</preAuthMode>
          			<OneX xmlns="http://www.microsoft.com/networking/OneX/v1">
          				<authMode>user</authMode>
          				<EAPConfig><EapHostConfig xmlns="http://www.microsoft.com/provisioning/EapHostConfig"><EapMethod><Type xmlns="http://www.microsoft.com/provisioning/EapCommon">25</Type><VendorId xmlns="http://www.microsoft.com/provisioning/EapCommon">0</VendorId><VendorType xmlns="http://www.microsoft.com/provisioning/EapCommon">0</VendorType><AuthorId xmlns="http://www.microsoft.com/provisioning/EapCommon">0</AuthorId></EapMethod><Config xmlns="http://www.microsoft.com/provisioning/EapHostConfig"><Eap xmlns="http://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1"><Type>25</Type><EapType xmlns="http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV1"><ServerValidation><DisableUserPromptForServerValidation>false</DisableUserPromptForServerValidation><ServerNames></ServerNames><TrustedRootCA>50 13 a8 fc 50 2c 42 a8 e9 7a bb 6b 26 3f a9 6c 23 1e fd 6f </TrustedRootCA></ServerValidation><FastReconnect>true</FastReconnect><InnerEapOptional>false</InnerEapOptional><Eap xmlns="http://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1"><Type>26</Type><EapType xmlns="http://www.microsoft.com/provisioning/MsChapV2ConnectionPropertiesV1"><UseWinLogonCredentials>false</UseWinLogonCredentials></EapType></Eap><EnableQuarantineChecks>false</EnableQuarantineChecks><RequireCryptoBinding>false</RequireCryptoBinding><PeapExtensions><PerformServerValidation xmlns="http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2">true</PerformServerValidation><AcceptServerName xmlns="http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2">true</AcceptServerName><PeapExtensionsV2 xmlns="http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2"><AllowPromptingWhenServerCANotFound xmlns="http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV3">true</AllowPromptingWhenServerCANotFound></PeapExtensionsV2></PeapExtensions></EapType></Eap></Config></EapHostConfig></EAPConfig>
          			</OneX>
          		</security>
          	</MSM>
          	<MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3">
          		<enableRandomization>false</enableRandomization>
          	</MacRandomization>
          </WLANProfile>
          

          So, WlanSetProfileEapXmlUserData and WlanSetProfileEapUserData failed with 1168 (ERROR_NOT_FOUND / ELEMENT_NOT_FOUND) error. Any ideas? Thanks.

          1 Reply Last reply Reply Quote 0
          • SGaist
            SGaist Lifetime Qt Champion last edited by

            No I don't. You should bring that to the Microsoft developer network forum.

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            Cobra91151 1 Reply Last reply Reply Quote 1
            • Cobra91151
              Cobra91151 @SGaist last edited by

              @SGaist

              Yes, I asked it on MSDN, but it seems that even Microsoft do not know what causing such issue :)

              1 Reply Last reply Reply Quote 3
              • SGaist
                SGaist Lifetime Qt Champion last edited by

                Did you discover an "an unknown feature" ?

                Can you post the link to your thread over there ? It might become useful over time.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                Cobra91151 1 Reply Last reply Reply Quote 1
                • Cobra91151
                  Cobra91151 @SGaist last edited by

                  @SGaist

                  Hello!

                  Yes, of course: https://social.msdn.microsoft.com/Forums/en-US/1028091a-d39d-4f67-b802-625e39d7a2ae/connect-to-enteprise-wifi-network-issue?forum=windowsgeneraldevelopmentissues

                  Also, I am still investigating this issue. There are three options:

                  1. Using WlanSetProfileEapXmlUserData lead to 1168 error because the profile is always wrong.
                  2. Using WlanSetProfileEapUserData also lead to 1168 error, but I think the reason, due to EAP_METHOD_TYPE struct, because from the MS docs: An EAP_METHOD_TYPE structure that contains the method for which the caller is supplying EAP user credentials.. But I can not provide the username and password to this struct because it only have eapType and dwAuthorId:
                  typedef struct _EAP_METHOD_TYPE {
                    EAP_TYPE eapType;
                    DWORD    dwAuthorId;
                  } EAP_METHOD_TYPE;
                  

                  Checking EAP_TYPE structure also does not have the ability to set username and password:

                  typedef struct _EAP_TYPE {
                    BYTE  type;
                    DWORD dwVendorId;
                    DWORD dwVendorType;
                  } EAP_TYPE;
                  

                  But there is EapUsernamePasswordCredential structure (https://docs.microsoft.com/en-us/windows/win32/api/eaptypes/ns-eaptypes-eapusernamepasswordcredential), so I can set the user credentials, but WlanSetProfileEapUserData does not accept it and displays compilation errors, because the 4th parameter should be only EAP_METHOD_TYPE and not EapUsernamePasswordCredential:

                  typedef struct _EapUsernamePasswordCredential {
                    LPWSTR username;
                    LPWSTR password;
                  } EapUsernamePasswordCredential;
                  

                  So, the 3rd option is:
                  3. Use WlanSetProfile to set Enterprise profile. It successfully sets the Enterprise profile, but it only accepts this profile without credentials. With credentials it lead to 1206 error code, which means: The profile invalid according to the schema / ERROR_BAD_PROFILE.
                  I think the WlanSetProfile must work with combination of one more method to set the user credentials but it is missing.

                  These 3 options are failed for me.

                  1 Reply Last reply Reply Quote 1
                  • Cobra91151
                    Cobra91151 last edited by

                    I figured it out! So, to resolve this issue you must do the following steps:

                    1. Set the profile without credentials using WlanSetProfile (I used imported profile from netsh with some modifications)

                    2. Then set the xml profile below with your username and password to WlanSetProfileEapXmlUserData:

                    <?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>26</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>26</baseEap:Type> 
                           <MsChapV2:EapType>
                             <MsChapV2:Username>test</MsChapV2:Username> 
                             <MsChapV2:Password>test</MsChapV2:Password> 
                           </MsChapV2:EapType>
                         </baseEap:Eap>
                       </Credentials>
                     </EapHostUserCredentials>
                    
                    1. Then use WlanConnect function and callback function to verify the connection.

                    It all good, but I get another issue:

                    229377 ("The operation was cancelled.")

                    It was the reason code that reports 229377 code, I think it returned such code because I opened the Windows WiFi Manager from the taskbar. The actual NotificationCode returns code 8 (wlan_notification_acm_scan_fail) and then 11 (wlan_notification_acm_connection_attempt_fail). I am still investigating this issue. Thanks.

                    1 Reply Last reply Reply Quote 2
                    • Cobra91151
                      Cobra91151 last edited by

                      Also, from MS docs:

                      wlan_notification_acm_scan_fail:

                      A scan for connectable networks failed.
                      
                      The pData member of the WLAN_NOTIFICATION_DATA structure points to a WLAN_REASON_CODE data type value that identifies the reason the WLAN operation failed.
                      

                      So, I checked the pData when this issue occurs and it returns the following reason:

                      wlan_notification_acm_scan_fail
                      "The operation was successful."
                      

                      But the network is not connected, it is strange.

                      1 Reply Last reply Reply Quote 0
                      • Cobra91151
                        Cobra91151 last edited by

                        Hello!
                        I have fixed this issue. The problem was because the PerformServerValidation was set to true and it displayed the notification dialog to verify the certificate on Windows that's why it returned wlan_notification_acm_scan_fail "The operation was successful.".

                        Setting the PerformServerValidation  to false fixed the issue (WlanSetProfile function).

                        <PerformServerValidation xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2\">false</PerformServerValidation>
                        

                        Also, for WlanSetProfileEapXmlUserData function I provided this profile:

                        <?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>
                        <baseEap:Eap>
                        <baseEap:Type>26</baseEap:Type>
                        <MsChapV2:EapType>
                        <MsChapV2:Username>username</MsChapV2:Username>
                        <MsChapV2:Password>password</MsChapV2:Password>
                        </MsChapV2:EapType>
                        </baseEap:Eap>
                        </MsPeap:EapType>
                        </baseEap:Eap>
                        </Credentials>
                        </EapHostUserCredentials>
                        

                        Now it connects successfully to Enterprise network. The issue is resolved. Thank you.

                        C 1 Reply Last reply Reply Quote 2
                        • SGaist
                          SGaist Lifetime Qt Champion last edited by

                          Nice debugging !

                          Thanks for the feedback and thorough description !

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply Reply Quote 2
                          • C
                            ciancost @Cobra91151 last edited by

                            @Cobra91151 Hi, would you mind sharing the xml profile that you set as well? I'm not able to make the windows wifi popup not show. Thank you!

                            1 Reply Last reply Reply Quote 0
                            • S
                              Snandaworld last edited by

                              My observation is SetEapXmlUserData() works only if the SetProfile() is set to All users that is 0x00000001 but on ManagedNativeWiFi Api, the value is 0

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post