奇妙な理由で、LogonUser DLLImportパラメーターをマーシャリングすると、ログオン タイプを使用しているときに正常にログインできなくなりましたが、INTERACTIVEログオン タイプで機能しNETWORKます。
これは私のコードです:
[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
);
現在、LogonUser への呼び出しは失敗しています ( ) ですが、から sLogon Exception: Logon failure: unknown user name or bad passwordを削除すると正常に動作し、切り替えても正常に動作するのはなぜですか?[MarshalAs(UnmanagedType.LPStr)]DLLImportLogonType.NETWORKINTERACTIVE
悲しいことに、これをマーシャリングする必要があるなどの他の機能で使用するため、それを保持する必要がありLoadUserProfileます(それを機能させ、不明なウィンドウ文字[四角]を表示しない唯一の方法)。正しく検証するには、文字列のファンキーなマーシャリングなどを行う必要がありますか?
どんな助けでも大歓迎です。ありがとう、