2015-03-09 1 views
0

J'ai une application qui doit vérifier le mot de passe de session Windows de l'utilisateur. Pour cela, j'utilise la fonction LogonUser de Windows API. L'utilisateur peut être connecté à un domaine.LogonUser renvoie ERROR_NO_LOGON_SERVERS

result = LogonUserW(wUsername, wDomain, wPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, pH); 

Lorsque l'utilisateur est connecté au domaine, la fonction fonctionne bien, cependant, lorsque l'utilisateur désactive le wifi, ou débranchez le câble LAN afin qu'il est hors ligne, la fonction retourne toujours avec l'erreur Le code 1311, qui a la signification "Il n'y a actuellement aucun serveur d'ouverture de session disponible pour traiter la demande d'ouverture de session".

La fonction LogonUser a comme quatrième paramètre le type d'opération d'ouverture de session à effectuer. The documentation indique que si la valeur de ce paramètre est "LOGON32_LOGON_INTERACTIVE", le type d'ouverture de session entraîne des frais supplémentaires de mise en cache des informations de connexion pour les opérations déconnectées. Cela ne devrait-il pas fonctionner si l'utilisateur est sur le terrain?

Merci d'avance pour votre aide.

Répondre

0

J'ai fini à l'aide de l'interface Security Support Provider (SSPI) comme décrit comme une alternative à l'API LogonUser dans cette page: How to validate user credentials on Microsoft operating systems

Utilisation de la fonction SSPLogonUser comme il est prévu dans l'extrait de code m'a permis de vérifier la les informations d'identification de l'utilisateur lors de la connexion au domaine, mais également lorsque le contrôleur de domaine n'était pas accessible (dans ce cas, il a échoué avec l'API LogonUser).