C#(マネージコード)からWin32関数CreateProfile()を正しく呼び出すにはどうすればいいですか?私は役に立たずに私自身で解決策を考案しようとしました。C#のマネージコードからwin32 CreateProfile()を呼び出す
CreateProfileの構文は()です:
HRESULT WINAPI CreateProfile(
__in LPCWSTR pszUserSid,
__in LPCWSTR pszUserName,
__out LPWSTR pszProfilePath,
__in DWORD cchProfilePath
);
書類がMSDN libraryで見つけることができます。
私がこれまでに持っていたコードは以下の通りです。
DLLインポート:関数を呼び出す
[DllImport("userenv.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int CreateProfile(
[MarshalAs(UnmanagedType.LPWStr)] string pszUserSid,
[MarshalAs(UnmanagedType.LPWStr)] string pszUserName,
[Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszProfilePath,
uint cchProfilePath);
:
/* Assume that a user has been created using: net user TestUser password /ADD */
// Get the SID for the user TestUser
NTAccount acct = new NTAccount("TestUser");
SecurityIdentifier si = (SecurityIdentifier)acct.Translate(typeof(SecurityIdentifier));
String sidString = si.ToString();
// Create string buffer
StringBuilder pathBuf = new StringBuilder(260);
uint pathLen = (uint)pathBuf.Capacity;
// Invoke function
int result = CreateProfile(sidString, "TestUser", pathBuf, pathLen);
問題は、ユーザープロファイルが今まで作成されないことであり、CreateProfile()のエラーコードを返します:0x800706f7。この問題に関する有益な情報は、歓迎する以上のものです。
おかげで、
-Sean
更新: を解決! pszProfilePathため 文字列バッファが260
エラーcodfeの0x800706f7の意味:スタブは不正なデータを受信しました。それが役立つかどうかはわかりません。 – PVitt
@PVittはい、知っておきたいことですが、間違って入力していることはわかりません。 – Sean
デフォルトを繰り返すだけなので、MarshalAs属性は必要ありません。 –