2009-09-27 7 views
2

Pour une raison étrange, lorsque je marshal les paramètres LogonUser DLLImport je ne parviens plus à me connecter avec succès lorsque j'utilise le type de connexion INTERACTIVE, cela fonctionne pour le type de connexion NETWORK.Quel est le problème avec mon DLLImport de LogonUser avec String Marshaling? [C#]

Ceci est mon code:

[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
    public static extern bool LogonUser 
     (
     [MarshalAs(UnmanagedType.LPStr)] 
     String lpszUsername, 
     [MarshalAs(UnmanagedType.LPStr)] 
     String lpszDomain, 
     [MarshalAs(UnmanagedType.LPStr)] 
     String lpszPassword, 
     int dwLogonType, 
     int dwLogonProvider, 
     out IntPtr hToken 
     ); 

    bResult = LogonUser(
     "username", 
     ".", 
     "password", 
     (int)LogonType.INTERACTIVE,  // = 2 
     (int)LogonProvider.DEFAULT,  // = 0 
     out hToken 
     ); 

Maintenant, as-est mon appel à LogonUser échoue (Logon Exception: Logon failure: unknown user name or bad password), mais si je retire les [MarshalAs(UnmanagedType.LPStr)] s du DLLImport il fonctionne très bien, même si je passe à LogonType.NETWORK cela fonctionne bien, pourquoi est-ce différent avec INTERACTIVE? Malheureusement j'ai besoin de le garder comme je l'utilise avec d'autres fonctions telles que LoadUserProfile qui a besoin d'être Marshalled (seulement comment je pourrais le faire fonctionner et ne pas afficher les caractères inconnus de Windows [carrés]). Ai-je besoin de faire un marshaling funky de cordes ou quelque chose pour le faire valider correctement?

Toute aide serait appréciée. Merci,

Répondre

2

LogonUser prend un LP T STR, pas un LPSTR, comme paramètres. Vous devriez simplement utiliser le marshaling par défaut, et cela fonctionnera correctement.

Voir LogonUser et pinvoke.net's declaration for a property P/Invoke of LogonUser.

+0

chose étrange est - quand j'appelle LoadUserProfile (...) avec le jeton obtenu à partir LogonUser, est-il pas fait avec Marshalling le nom de profil créer a caractères non reconnus (ces carrés) vu de l'explorateur - mais fonctionne bien Je les marshal comme indiqué. Étrange non? – Shaitan00

0

J'ai eu le même problème, mais la cause était différente. Ensuite, j'ai réalisé que dans l'endroit où je travaille, nous devons nous connecter à nos machines avec un certificat numérique au lieu de l'utilisateur et mot de passe. J'avais oublié que nous avions cette restriction sur notre domaine.

Je dois donc utiliser un autre compte de domaine, au lieu du mien, pour tester mon application.

Je ne sais pas si ces informations vous aideront, mais elles pourraient être utiles à d'autres personnes.

Questions connexes