IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

API Windows LogonUserA : fonction non trouvée [WD10]


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 43
    Points : 38
    Points
    38
    Par défaut API Windows LogonUserA : fonction non trouvée
    Bonjour à tous !

    Je cherche à faire un appel vers l'API de Windows pour authentifier un utilisateur sur un domaine : je me suis donc tourné vers la fonction LogonUserA, normalement présente dans advapi32.dll.

    Seul souçi, quand j'exécute mon code, WinDev me renvoie l'erreur suivante :

    Vous avez appelé la fonction AppelDLL32.
    La fonction ' LogonUserA' n'a pas été trouvée dans la DLL advapi32.dll


    J'ai essayé avec "kernel32", "kernel32.dll", "advapi32", "advapi32.dll" comme arguments de Appel32 pour le nom de la DLL, rien n'y fait. J'ai toujours la même erreur, alors que DLL Export Viewer m'indique bien que la fonction est dispo dans advapi32.dll.

    Une idée ?

    Voici le code associé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    CAuthProvider est une classe
     
    	PRIVÉ
    		// Constantes API Windows : Logon Type
    		CONSTANT LOGON32_LOGON_INTERACTIVE 			= 2
    		CONSTANT LOGON32_LOGON_NETWORK          	= 3
    		CONSTANT LOGON32_LOGON_BATCH            	= 4
    		CONSTANT LOGON32_LOGON_SERVICE          	= 5
    		CONSTANT LOGON32_LOGON_UNLOCK           	= 7
    		CONSTANT LOGON32_LOGON_NETWORK_CLEARTEXT	= 8
     
    		// Constantes API Windows : Logon provider
    		CONSTANT LOGON32_PROVIDER_DEFAULT			= 0
    		CONSTANT LOGON32_PROVIDER_WINNT35			= 1
    		CONSTANT LOGON32_PROVIDER_WINNT40			= 2
    		CONSTANT LOGON32_PROVIDER_WINNT50			= 3	
    FIN
     
    PROCEDURE Check(sUserName est une chaîne, sClearPassword est une chaîne)
     
    lpszUserName est une chaîne = sUserName
    // TODO : Paramétrer domaine
    lpszDomain est une chaîne = "XXXXXX.XX"
    lpszPassword est une chaîne = sClearPassword
    phToken est un entier = 0
     
    // Tente de créer un user handle avec les identifiants fournis
    SI AppelDLL32("advapi32.dll", " LogonUserA" , &lpszUserName, &lpszDomain, &lpszPassword, ...
    	 ::LOGON32_LOGON_NETWORK_CLEARTEXT, ::LOGON32_PROVIDER_DEFAULT, &phToken) <> 0 ALORS
    	// Fermeture du handle créé
    	AppelDLL32("kernel32.dll", "CloseHandle" , &phToken) 
    	RENVOYER Vrai
    SINON 
    	// Echec de l'auth
    	RENVOYER Faux
    FIN
    Merci d'avance pour votre aide

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Essaie avec la syntaxe 'LogonUser' au lieu de 'LogonUserA'.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Bonsoir,

    A vrai dire, j'ai testé toutes les variantes de LogonUser et LogonUserEx que j'ai trouvée dans WinBase.h (ou WinUser.h, je sais plus je ne suis pas sur mon poste de dev) du SDK Windows... Sans succès... Je vais retester demain matin, on sait jamais, je suis peut-être allé trop vite.

    D'ailleurs, je n'ai rien trouvé dans la doc de WinDev 10 par rapport à l'utilisation du suffixe ".dll" pour le nom de librairie passé à AppelDLL32, et la liste des fonctions API présentes dans l'aide est inconsistante à ce sujet : des fois, y'a, des fois pas... Donc faut-il inclure ou non le ".dll" ?

    Merci de ta réponse

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut As-tu demandé à WDAPI ?
    Bonjour,

    @ mistertbo: quelle est ta version de WinDev ? As-tu utilisé WDAPI ?

    Quand je suis dans ta situation, je commence par regarder l'outil WDAPI fourni avec WinDev pour récupérer la syntaxe "recommandée" par PC Soft.
    Ce qui donne ceci:
    (attention, les propositions de WDAPI ne sont pas toujours parfaites, comme ici où les chaînes de caractères sont traitées via des pointeurs stockés dans des entiers... mais je suis encore en WD12 et apparemment WDAPI a été amélioré dans les versions suivantes)
    Code proposé par WDAPI : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    RetourFonction est un booléen // Type C :BOOL
    lpszUsername est un entier // Type C : LPSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
    lpszDomain est un entier // Type C : LPSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
    lpszPassword est un entier // Type C : LPSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
    dwLogonType est un entier // Type C : DWORD
    dwLogonProvider est un entier // Type C : DWORD
    phToken est un entier // Type C : PHANDLE
     
    RetourFonction=API("KERNEL32"," LogonUserA",lpszUsername,lpszDomain,lpszPassword,dwLogonType,dwLogonProvider,phToken)

    Et donc il s'agit de Kernel32.

    Ensuite, je vais peut être dire une bêtise...
    mais si on lit ton code on constate qu'il y a un caractère espace "parasite" juste avant le nom de l'API.
    Est-ce que le souci vient de là ?

    Citation Envoyé par mistertbo Voir le message
    Voici le code associé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Tente de créer un user handle avec les identifiants fournis
    SI AppelDLL32("advapi32.dll", " LogonUserA" , &lpszUserName, &lpszDomain, &lpszPassword, ...
    	 ::LOGON32_LOGON_NETWORK_CLEARTEXT, ::LOGON32_PROVIDER_DEFAULT, &phToken) <> 0 ALORS
    Peut-être suffit-il de bien respecter le nom de l'API, tel que donné par WDAPI ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Tente de créer un user handle avec les identifiants fournis
    SI AppelDLL32("kernel32", "LogonUserA" , &lpszUserName, &lpszDomain, &lpszPassword, ...
    	 ::LOGON32_LOGON_NETWORK_CLEARTEXT, ::LOGON32_PROVIDER_DEFAULT, &phToken) <> 0 ALORS
    _

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Ca roule, je vais tester avec ta version... Pour l'espace parasite je vais vérifier demain matin, car je m'en suis rendu compte en répondant à mail.spam, et n'ayant plus le code source sous les yeux, impossible de dire si c'est une erreur au niveau du post ici ou dans le code source.

    Je vais voir avec WDAPI, mais à l'origine, j'avais copié/collé la déclaration de l'aide de WinDev (page Déclaration des fonctions API ou quelque chose comme ça), et ça n'avait pas marché...

    Merci pour ton conseil

    @=JBO= : WD10, mais je n'ai pas trouvé, sans avoir vraiment cherché, WDAPI... Le copier/coller provenait de l'aide F1.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut ... erreurs dans WDAPI et dans l'aide en ligne !
    Citation Envoyé par mistertbo Voir le message
    Je vais voir avec WDAPI, mais à l'origine, j'avais copié/collé la déclaration de l'aide de WinDev (page Déclaration des fonctions API ou quelque chose comme ça), et ça n'avait pas marché...
    Merci pour l'info, j'avais oublié l'existence de cette page:
    http://doc.pcsoft.fr/fr-FR/?6510002&...ns-api-windows.

    Effectivement, la déclaration y est erronée !

    Et puis, j'ai voulu vérifier, j'ai donc consulté MSDN et... finalement c'est pas kernel32 !

    Voila ce qui fonctionne très bien sur mon PC (en XP pro):
    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    AppelDLL32("advapi32", "LogonUserA" ...)
    Et je te confirme (après test) que si tu laisses l'espace parasite, il y a bien un bogue.
    _

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Ouf, je ne suis pas (encore) fou

    Je vérifie l'espace et testerai avec ton code demain matin, je te dirais si ça marche ou pas. En tout cas, merci pour ton aide !

    Bonne soirée

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Après vérification, je confirme que c'était bien l'espace en trop, présent dans la doc de Windev (du moins la version hors ligne)... D'ou l'erreur.

    Comme les aides, c'est bien pratique, mais faut faire attention :s

    Merci pour tout !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction non trouvée
    Par vivid dans le forum SFML
    Réponses: 10
    Dernier message: 28/08/2014, 10h05
  2. Fonction non trouvée sous ODBC
    Par schnee dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/03/2014, 23h10
  3. Réponses: 3
    Dernier message: 11/12/2009, 20h55
  4. Fonctions non trouvées à l'exécution
    Par remy_ dans le forum Ogre
    Réponses: 4
    Dernier message: 19/10/2009, 11h41
  5. problème de fonction non trouvées
    Par youp_db dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/09/2006, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo