Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

API LogonUser

5 réponses
Avatar
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

5 réponses

Avatar
Gilles TOURREAU
Le Fri, 25 May 2007 11:01:23 +0200, Sebastien Curutchet
a écrit:

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
Avatar
Sebastien Curutchet
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
Avatar
Emmanuel Dreux [MS]
Bonjour,

que vaut votre variable strDomain ?

--
Cordialement,

Emmanuel Dreux.

"Sebastien Curutchet" wrote in message
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


Avatar
Emmanuel Dreux [MS]
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" wrote in message
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


Avatar
Sebastien Curutchet
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