Call win32 CreateProfile () do código gerenciado em C #

Pergunta rápida (espero), como chamo corretamente a função win32 CreateProfile () de C # (código gerenciado)? Tentei criar uma solução sozinha, sem sucesso.

A sintaxe para CreateProfile () é:


HRESULT WINAPI CreateProfile(
  __in   LPCWSTR pszUserSid,
  __in   LPCWSTR pszUserName,
  __out  LPWSTR pszProfilePath,
  __in   DWORD cchProfilePath
);

Os documentos de suporte podem ser encontrados noiblioteca @MSDN.

O código que tenho até agora está publicado abaix

DLL Import:


[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);

Invocar a função:


/* 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);


O problema é que nenhum perfil de usuário é criado e CreateProfile () retorna um código de erro de: 0x800706f7. Qualquer informação útil sobre esse assunto é mais do que bem-vind

Obrigado
-Sean


Atualizar Resolvido! buffer de cadeia para pszProfilePath não pode ter um comprimento maior que 260.

questionAnswers(2)

yourAnswerToTheQuestion