gpt4 book ai didi

c# - 从 C# 托管代码调用 win32 CreateProfile()

转载 作者:行者123 更新时间:2023-11-30 15:44:50 26 4
gpt4 key购买 nike

快速提问(希望如此),如何从 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。我们非常欢迎任何关于此事的有用信息。

谢谢,
-肖恩


更新:解决了!pszProfilePath 的字符串缓冲区的长度不能超过 260。

最佳答案

对于 out 参数,您应该设置编码。更重要的是,通过传递 StringBuilder,您已经隐式地拥有了一个输出参数。因此,它应该变成:

[DllImport("userenv.dll", CharSet = CharSet.Auto)]
private static extern int CreateProfile(
[MarshalAs(UnmanagedType.LPWStr)] string pszUserSid,
[MarshalAs(UnmanagedType.LPWStr)] string pszUserName,
[Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszProfilePath,
uint cchProfilePath);

调用此方法:

int MAX_PATH = 260;
StringBuilder pathBuf = new StringBuilder(MAX_PATH);
uint pathLen = (uint)pathBuf.Capacity;

int result = CreateProfile(sidString, "TestUser", pathBuf, pathLen);

关于c# - 从 C# 托管代码调用 win32 CreateProfile(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5813550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com