API LogonUser

Le
Sebastien Curutchet
Bonjour,

Je cherche à utiliser l'API LogonUser pour me connecter sur un poste
avec un compte local du poste distant.
J'ai essayé avec un compte du domaine, cela fonctionne parfaitement par
contre si j'utilise un compte local à la machine cela ne marche plus.


Quelqu'un aurait il des pistes à ce sujet ?

Pour info voici mon code :

if (LogonUser(_strUsername, _strDomain, _strPassword,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out lnToken))
{
System.Diagnostics.Trace.TraceInformation(" Logon succeed!");

if (DuplicateToken(lnToken, 2, out hTokenDuplicate))
{
WindowsIdentity windowsIdentity = new WindowsIdentity(lnToken);
WindowsImpersonationContext impersonationContext =
windowsIdentity.Impersonate();

// Mon Traitement
.

impersonationContext.Undo();
}

if (lnToken != IntPtr.Zero) CloseHandle(lnToken);
if (hTokenDuplicate != IntPtr.Zero) CloseHandle(hTokenDuplicate);
}
else
{
System.Diagnostics.Trace.TraceWarning(" Logon failed : " +
GetLastError());
blnCheckOK = false;
}



D'avance merci

-
Sebastien Curutchet
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilles TOURREAU
Le #12190041
Le Fri, 25 May 2007 11:01:23 +0200, Sebastien Curutchet

Bonjour,

Je cherche à utiliser l'API LogonUser pour me connecter sur un poste
avec un compte local du poste distant.
J'ai essayé avec un compte du domaine, cela fonctionne parfaitement par
contre si j'utilise un compte local à la machine cela ne marche plus.


Quelqu'un aurait il des pistes à ce sujet ?

Pour info voici mon code :

if (LogonUser(_strUsername, _strDomain, _strPassword,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out lnToken))
{
System.Diagnostics.Trace.TraceInformation(" Logon succeed!");

if (DuplicateToken(lnToken, 2, out hTokenDuplicate))
{
WindowsIdentity windowsIdentity = new WindowsIdentity(lnToken);
WindowsImpersonationContext impersonationContext =
windowsIdentity.Impersonate();

// Mon Traitement
....

impersonationContext.Undo();
}

if (lnToken != IntPtr.Zero) CloseHandle(lnToken);
if (hTokenDuplicate != IntPtr.Zero)
CloseHandle(hTokenDuplicate);
}
else
{
System.Diagnostics.Trace.TraceWarning(" Logon failed : " +
GetLastError());
blnCheckOK = false;
}



D'avance merci

-------------------------------------------------------
Sebastien Curutchet



Pouvez-vous indiquer à quel moment de votre code cela ne fonctionne pas ?
Pouvez-vous indiquer le code de l'erreur retourner par un
Marshal.GetLastWin32Error() ?

Avez-vous regardez au niveau des paramètres de stratégie locale de la
machine si l'utilisateur à le droit d'arrêter le système ? (Stratégies
locales>Attributions des droits utilisateur>Arrêter le système).

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Sebastien Curutchet
Le #12190031
Gilles TOURREAU a écrit :

Pouvez-vous indiquer à quel moment de votre code cela ne fonctionne pas ?
Pouvez-vous indiquer le code de l'erreur retourner par un
Marshal.GetLastWin32Error() ?

Avez-vous regardez au niveau des paramètres de stratégie locale de la
machine si l'utilisateur à le droit d'arrêter le système ? (Stratégies
locales>Attributions des droits utilisateur>Arrêter le système).

Cordialement





Bonjour,

L'erreur se produit sur la fonction LogonUser et l'erreur m'indique que
le compte ou le mot de passe est incorrect. Côté stratégie locale,
tout est bon. J'effectue mes tests avec un compte adminitrateur local
pour retirer tous les problèmes de stratégie.

Merci pour votre aide.

------------------------------------------------------------------
Sébastien Curutchet
Emmanuel Dreux [MS]
Le #12190021
Bonjour,

que vaut votre variable strDomain ?

--
Cordialement,

Emmanuel Dreux.

"Sebastien Curutchet" news:%
Gilles TOURREAU a écrit :

Pouvez-vous indiquer à quel moment de votre code cela ne fonctionne pas ?
Pouvez-vous indiquer le code de l'erreur retourner par un
Marshal.GetLastWin32Error() ?

Avez-vous regardez au niveau des paramètres de stratégie locale de la
machine si l'utilisateur à le droit d'arrêter le système ? (Stratégies
locales>Attributions des droits utilisateur>Arrêter le système).

Cordialement





Bonjour,

L'erreur se produit sur la fonction LogonUser et l'erreur m'indique que le
compte ou le mot de passe est incorrect. Côté stratégie locale, tout est
bon. J'effectue mes tests avec un compte adminitrateur local pour retirer
tous les problèmes de stratégie.

Merci pour votre aide.

------------------------------------------------------------------
Sébastien Curutchet


Emmanuel Dreux [MS]
Le #12190011
J'avais mal lu votre post.

LogonUser logue un utilisateur sur le poste local.
Le compte local de l'ordinateur distant n'existe donc pas sur le poste ou
est éxécuté LogonUser.

--
Cordialement,

Emmanuel Dreux.

"Sebastien Curutchet" news:
Bonjour,

Je cherche à utiliser l'API LogonUser pour me connecter sur un poste avec
un compte local du poste distant.
J'ai essayé avec un compte du domaine, cela fonctionne parfaitement par
contre si j'utilise un compte local à la machine cela ne marche plus.


Quelqu'un aurait il des pistes à ce sujet ?

Pour info voici mon code :

if (LogonUser(_strUsername, _strDomain, _strPassword,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out lnToken))
{
System.Diagnostics.Trace.TraceInformation(" Logon succeed!");

if (DuplicateToken(lnToken, 2, out hTokenDuplicate))
{
WindowsIdentity windowsIdentity = new WindowsIdentity(lnToken);
WindowsImpersonationContext impersonationContext =
windowsIdentity.Impersonate();

// Mon Traitement
....

impersonationContext.Undo();
}

if (lnToken != IntPtr.Zero) CloseHandle(lnToken);
if (hTokenDuplicate != IntPtr.Zero) CloseHandle(hTokenDuplicate);
}
else
{
System.Diagnostics.Trace.TraceWarning(" Logon failed : " +
GetLastError());
blnCheckOK = false;
}



D'avance merci

-------------------------------------------------------
Sebastien Curutchet


Sebastien Curutchet
Le #12190001
Emmanuel Dreux [MS] a écrit :
J'avais mal lu votre post.

LogonUser logue un utilisateur sur le poste local.
Le compte local de l'ordinateur distant n'existe donc pas sur le poste
ou est éxécuté LogonUser.




Bonjour,

Je viens de trouver.
Le problème provenait des paramètres de LogonUser. En fait pour que la
connexion fonctionne que ce soit par authentification domaine ou bien
compte local, j'ai remplacé le LOGON32_LOGON_INTERACTIVE (2)par
LOGON32_LOGON_NEW_CREDENTIALS (9).
La connexion s'effectue alors correctement dans les 2 cas.


Dans le cas d'une authentification domaine, la variable _strDomain
contient le domain NT, dans le cas d'une authentification via un compte
local, _strDomain contient le nom de la machine.

Merci pour votre aide.

--------------------------------------------------------------------------------------
Sébastien Curutchet
Publicité
Poster une réponse
Anonyme