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,
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