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.