Partage
  • Partager sur Facebook
  • Partager sur Twitter

lister les wifis disponibles et s'y connecter

via l'api wlan en c++

    10 septembre 2017 à 17:33:08

    Re bonjour !

    alors ce coup ci, ca à été plus rapide.

    J'ai rapidement réussi à arracher un ERROR_SUCESS à cette fonction :

    	DWORD error;
    	HANDLE handle2(recupHandle());
    	DWORD dwReason;
    	if ((error = WlanRegisterNotification(handle2, WLAN_NOTIFICATION_SOURCE_ALL, TRUE, (WLAN_NOTIFICATION_CALLBACK)WlanNotification, NULL, NULL, &dwReason)) != ERROR_SUCCESS)

    mais j'ai pas tres bien compris si :

    1) on l'appelle avant ou après wlanConnect ?

    2) comment on fait pour récupérer le résultat ? j'ai pas bien compris.

    merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
    "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
      10 septembre 2017 à 18:41:26

      1- on l’appelle avant bien sur.

      2- on "récupère" le resultat dans via la fonction passé en paramètre, qui est appelée quand il se passe quelque chose. C'est quoi le code de wlannotification? renseignes toi sur c'est qu'est une "fonction callback" si tu n'en a jamais vue...

      -
      Edité par breizhbugs 10 septembre 2017 à 18:45:47

      • Partager sur Facebook
      • Partager sur Twitter
      ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
        10 septembre 2017 à 21:28:42

        J'avais déjà vu des fonctions callback mais je n'avais pas vraiment vu ce que c'était, je me suis donc renseigné sur ce que c'est qu'une fonction callback mais j'ai encore du mal a saisir comment l'utiliser après...

        je dois donc appeler WlanNotification, ce coup ci après WlanConnect ?

        et je n'ai pas compris quel était le deuxième paramètre, c'est un pointeur générique, mais je ne comprends pas pourquoi...

        merci d'avance

        • Partager sur Facebook
        • Partager sur Twitter
        "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
          10 septembre 2017 à 22:07:48

          raphaeldesaintalbin a écrit:

          je dois donc appeler WlanNotification, ce coup ci après WlanConnect ?

          et je n'ai pas compris quel était le deuxième paramètre, c'est un pointeur générique, mais je ne comprends pas pourquoi...

          merci d'avance


          Non. wlanconnect ne fait pas la connetion, il ne fait que la demander. La connection en elle même prends du temps. Lorsqu'elle sera fait la fonction callback sera appelée par le système.

          le deuxièeme parametre depend du premier. Il te faut donc tester le premier paramètre pour savoir en quoi caster le second.

          • Partager sur Facebook
          • Partager sur Twitter
          ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
            11 septembre 2017 à 11:41:53

            Pour la mémoire, c'est les menus memoryX contenus dans le menu principal "Debuger" puis fenêtres puis memory.

            -
            Edité par bacelar 11 septembre 2017 à 11:42:57

            • Partager sur Facebook
            • Partager sur Twitter
            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
              11 septembre 2017 à 23:20:42

              @breizhbugs, de toute façon, cette fonction, c'est moi qui la définis dans mon code...

              mais ce que je ne comprends pas, c'est que j'ai pas besoin de l'appeler, le système s'en chargera lui même ?

              @bacelar alors je comprend pas non plus comment ca s'utilise puisque je n'y ai pas accès tant que le programme n'est pas lancé (logique) et que j'ai ca quand je l'ouvre pendant l’exécution :

              on y arrivera, et désolé si il y a beaucoup de choses que je ne comprend pas...

              EDIT : ah non, j'ai ca , mais c'est pas très parlant comme ca...

              -
              Edité par raphaeldesaintalbin 11 septembre 2017 à 23:23:40

              • Partager sur Facebook
              • Partager sur Twitter
              "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                12 septembre 2017 à 11:07:13

                Là, vous regardez la mémoire à l'adresse 0x0000000000000000 (NULL quoi), zone de mémoire virtuelle qui n'est pas mappé sur la mémoire physique, d'où les ?? ?? ?? ??.

                Dans la zone de saisie "Adresse", mettez l'adresse de la structure que vous passez à la fonction de l'API.

                • Partager sur Facebook
                • Partager sur Twitter
                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                  12 septembre 2017 à 19:34:34

                  alors j'ai réussi, en passant ma structure par référence...

                  je pige rien :

                  c'est la structure connect...

                  je suis totalement perdu, mais on y arrivera.

                  mais je sais toujours pas quand ma fonction WlanNotification est appelée...

                  -
                  Edité par raphaeldesaintalbin 12 septembre 2017 à 19:35:24

                  • Partager sur Facebook
                  • Partager sur Twitter
                  "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                    12 septembre 2017 à 21:57:16

                    raphaeldesaintalbin a écrit:

                    mais je sais toujours pas quand ma fonction WlanNotification est appelée...

                    Quand il se passe quelque chose en lien avec la notification surveillée...

                    https://msdn.microsoft.com/en-us/library/windows/desktop/ms706771(v=vs.85).aspx

                    Remarks
                    ...
                    Once registered, the callback function will be called whenever a notification is available until the client unregisters or closes the handle.



                    • Partager sur Facebook
                    • Partager sur Twitter
                    ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                      12 septembre 2017 à 22:47:03

                      OK ! j'ai compris ! le système l’appelle vraiment n’importe quand.

                      ce qui donne ca :

                      mais je ne suis toujours pas connecté

                      -
                      Edité par raphaeldesaintalbin 12 septembre 2017 à 22:47:44

                      • Partager sur Facebook
                      • Partager sur Twitter
                      "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                        13 septembre 2017 à 11:36:07

                        Tu as deux connection_complete et un attemtp_fail quand même...

                        Il est temps de s'interesser au contenu de la structure en parametre pour connaitre le details!

                        https://msdn.microsoft.com/en-us/library/windows/desktop/dd815254(v=vs.85).aspx

                        wlan_notification_acm_connection_complete
                        
                            A connection has completed.
                            The pData member of the WLAN_NOTIFICATION_DATA structure points to a WLAN_CONNECTION_NOTIFICATION_DATA structure that identifies the network information for the connection attempt that completed. The connection succeeded if the wlanReasonCode in WLAN_CONNECTION_NOTIFICATION_DATA is WLAN_REASON_CODE_SUCCESS. Otherwise, the connection has failed.

                        wlan_notification_acm_connection_attempt_fail
                        
                            A connection attempt has failed.
                            A connection consists of one or more connection attempts. An application may receive zero or more wlan_notification_acm_connection_attempt_fail notifications between receiving the wlan_notification_acm_connection_start notification and the wlan_notification_acm_connection_complete notification.
                            The pData member of the WLAN_NOTIFICATION_DATA structure points to a WLAN_CONNECTION_NOTIFICATION_DATA structure that identifies the network information for the connection attempt that failed.
                        



                        • Partager sur Facebook
                        • Partager sur Twitter
                        ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                          14 septembre 2017 à 18:54:31

                          	case wlan_notification_acm_connection_attempt_fail:
                          		printf("wlan_notification_acm_connection_attempt_fail\n");
                          		WCHAR buffer[100];
                          		WlanReasonCodeToString(reinterpret_cast<PWLAN_CONNECTION_NOTIFICATION_DATA> (wlanNotifData->pData)->wlanReasonCode, 100, buffer, NULL);
                          		wprintf(L"%s\n", buffer);
                          		break;

                          alors j'ai réussi à remonter tout ca jusqu’au wlanRaisonCode qui m'affiche :

                          "code de raison non valide"... je suis bien avancé...

                          • Partager sur Facebook
                          • Partager sur Twitter
                          "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                            14 septembre 2017 à 19:23:10

                            Utilisez le débogueur pour avoir les vraies valeurs et arrêtez de faire des sorties console qui pose plus de problème qu'autre chose.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                              14 septembre 2017 à 22:43:38

                              certes, mais ca ne change pas grand chose...

                              • Partager sur Facebook
                              • Partager sur Twitter
                              "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                                14 septembre 2017 à 23:19:37

                                raphaeldesaintalbin a écrit:

                                certes, mais ca ne change pas grand chose...


                                en même temps

                                https://msdn.microsoft.com/en-us/library/windows/desktop/ms706848(v=vs.85).aspx

                                wlanReasonCode
                                
                                    (...) -> This field has a value of WLAN_REASON_CODE_SUCCESS for all connection-related notifications except wlan_notification_acm_connection_complete <-. If the connection fails, this field indicates the reason for the failure.
                                

                                C'est que pour le connection_complete que tu dois vérifier , il semblerait...

                                -
                                Edité par breizhbugs 14 septembre 2017 à 23:19:57

                                • Partager sur Facebook
                                • Partager sur Twitter
                                ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                  15 septembre 2017 à 11:59:29

                                  >certes, mais ca ne change pas grand chose...

                                  Pas utiliser le résultat de la tambouille pour afficher un message d'erreur approximatif juste bon pour l'utilisateur final.

                                  C'est le champ wlanReasonCode qu'il faut regarder.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                    18 septembre 2017 à 9:23:11

                                    excusez moi de mon absence, j'ai eu un WE très chargé...

                                    j'éditerais mon message dans l'après midi pour vous mettre une capture d'écran mais je peux vous dire que l’erreur renvoyée est quelque chose comme "le réseau n'est pas disponible".

                                    Merci pour votre patience,

                                    Raphaël

                                    EDIT : voici un aperçu du débogeur :

                                    un problème d'encodage de ma variable SSID ? je vérifie ca

                                    EDIT 2 : évidemment ! comme nous avons envoyé un zeromemory a la structure pDot11Ssid, on ne spécifie même pas le réseau !

                                    EDIT 3 : bon... voici la dernière version de mon code...

                                    DWORD connexionWifi(std::string choixCoo)
                                    {
                                    	HANDLE handle(recupHandle());
                                    	std::string GUIDString(recupGUID());
                                    	std::wstring GUIDWstring = s2ws(GUIDString);
                                    	LPCWSTR GUIDStringUni(GUIDWstring.c_str());
                                    	GUID GUID;
                                    	IIDFromString(GUIDStringUni, &GUID);
                                    	LPCWSTR profilXML(creerProfil(choixCoo));
                                    	_DOT11_SSID structSSID;
                                    	std::string strSSID(recupSSID());
                                    	structSSID.uSSIDLength = strSSID.size();
                                    	memcpy(structSSID.ucSSID, strSSID.data(), structSSID.uSSIDLength);
                                    	WLAN_CONNECTION_PARAMETERS connect;
                                    	memset(&connect, 0, sizeof(WLAN_CONNECTION_PARAMETERS));
                                    
                                    	connect.wlanConnectionMode = wlan_connection_mode_profile;
                                    	connect.strProfile = profilXML;
                                    	connect.dwFlags = WLAN_CONNECTION_IGNORE_PRIVACY_BIT;
                                    	connect.pDot11Ssid = &structSSID;
                                    	connect.pDesiredBssidList = 0;
                                    	connect.dot11BssType = dot11_BSS_type_infrastructure;
                                    	DWORD error;
                                    	HANDLE handle2(recupHandle());
                                    	DWORD dwReason;
                                    	if ((error = WlanRegisterNotification(handle2, WLAN_NOTIFICATION_SOURCE_ALL, true, (WLAN_NOTIFICATION_CALLBACK)WlanNotification, &WlanNotification, 0, &dwReason)) != ERROR_SUCCESS)
                                    	{
                                    		std::cout << "CANNOT ACIVATE !\n" << std::endl;
                                    		switch (error)
                                    		{
                                    		case ERROR_INVALID_HANDLE:
                                    			std::cout << "handle invalide" << std::endl;
                                    			break;
                                    		case ERROR_NOT_ENOUGH_MEMORY:
                                    			std::cout << "pb memoire" << std::endl;
                                    			break;
                                    		case ERROR_INVALID_PARAMETER:
                                    			std::cout << "parametre invalide" << std::endl;
                                    			break;
                                    		}
                                    	}
                                    	else
                                    	{
                                    		std::cout << "ACTIVATE SUCESS" << std::endl;
                                    	}
                                    	if ((error = WlanConnect(handle, &GUID, &connect, NULL)) != ERROR_SUCCESS)
                                    	{
                                    		std::cout << "CANNOT CONNECT !\n" << std::endl;
                                    		switch (error)
                                    		{
                                    		case ERROR_INVALID_HANDLE:
                                    			std::cout << "handle invalide" << std::endl;
                                    			break;
                                    		case ERROR_ACCESS_DENIED:
                                    			std::cout << "acces refusé" << std::endl;
                                    			break;
                                    		case ERROR_INVALID_PARAMETER:
                                    			std::cout << "parametre invalide" << std::endl;
                                    			break;
                                    		}
                                    	}
                                    	else
                                    	{
                                    		std::cout << "CONNECT SUCCESS !\n" << std::endl;
                                    	}
                                    	return error;
                                    }

                                    et INVALID_PARAMETER ! youpi !

                                    -
                                    Edité par raphaeldesaintalbin 18 septembre 2017 à 23:21:27

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                                      21 septembre 2017 à 18:15:52

                                      up !
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                                        21 septembre 2017 à 18:20:59

                                        Une petite vue mémoire de ce que vous envoyez à l'API, SVP.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                          21 septembre 2017 à 19:16:58

                                          quelles parties ? structSSID?

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                                            21 septembre 2017 à 19:31:35

                                            Toutes
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                              21 septembre 2017 à 19:58:00

                                              connect :

                                              structSSID :

                                              vous voyez les images ? C'est moi qui bugge ?

                                              -
                                              Edité par raphaeldesaintalbin 21 septembre 2017 à 19:59:49

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                                                22 septembre 2017 à 10:49:43

                                                Je ne vois que pas les images.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                                  22 septembre 2017 à 19:19:34

                                                  Ah...

                                                  donc je n'arrive pas a envoyer des images.

                                                  je refais un test :

                                                  connect :

                                                  et structSSID :

                                                  EDIT : chez moi ca marche !

                                                  EDIT 2 : au fait, comment passer une structure renvoyée par une fonction à une autre. par exemple de listWifi à connexionWifi ? c'etait une autre justification de la création d'une classe bien que ce soit visiblement une mauvaise idée

                                                  -
                                                  Edité par raphaeldesaintalbin 22 septembre 2017 à 19:39:34

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                                                    25 septembre 2017 à 9:33:19

                                                    up !

                                                    au fait, j'ai un doute ici : https://msdn.microsoft.com/en-us/library/ms705996(v=vs.85).aspx

                                                    je ne comprend pas ce que représentent ces variables...

                                                    -
                                                    Edité par raphaeldesaintalbin 25 septembre 2017 à 11:30:47

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                                                      25 septembre 2017 à 16:00:56

                                                      uNumOfEntrie, c'est le nombre d'entré "initialisée", uTotalNumOfEntries, c'est le nombre d'entré qui a été allouée, mais pas forcement initialisée.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                                        25 septembre 2017 à 16:39:42

                                                        bah justement je comprend pas ce qu'on appelle le "nombre d'entrées"...

                                                        le nombre d'entrées dans la structure ?

                                                        -
                                                        Edité par raphaeldesaintalbin 25 septembre 2017 à 16:49:55

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                                                          25 septembre 2017 à 16:56:13

                                                          C'est une structure "List", c'est une structure C à taille variable.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                                            25 septembre 2017 à 18:44:47

                                                            ben oui mais laquelle ? je vois pas de structure list dans le coin !
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            "La valeur n'attend point le nombre des années" Le Cid, Pierre Corneille, Don Rodrigue parlant au Comte
                                                              25 septembre 2017 à 19:30:58

                                                              Le champ BSSIDS, même s'il est indiqué avec une taille de 1, c'est faux, c'est uTotalNumOfEntries, dont uNumOfEntrie initialisés.
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                                                              lister les wifis disponibles et s'y connecter

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown