Быстрый вопрос (надеюсь), как правильно вызвать функцию win32 CreateProfile () из C # (управляемый код)?Я пытался найти решение самостоятельно, но безрезультатно.
Синтаксис CreateProfile ():
HRESULT WINAPI CreateProfile(
__in LPCWSTR pszUserSid,
__in LPCWSTR pszUserName,
__out LPWSTR pszProfilePath,
__in DWORD cchProfilePath
);
С подтверждающими документами можно ознакомиться в библиотека MSDN .
Код, который у меня есть, размещен ниже.
Импорт 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.