C++ NetUserGetInfo失败

C++ NetUserGetInfo失败,c++,windows,winapi,C++,Windows,Winapi,我正在使用以下代码运行该函数: bool MyGetComputerName(std::wstring &ComputerName) { bool bReturn=false; WCHAR ComputerNameBuffer[MAX_COMPUTERNAME_LENGTH+1]={0}; DWORD dwComputerNameLength=MAX_COMPUTERNAME_LENGTH+1; DWORD dwReturn=GetComputerName

我正在使用以下代码运行该函数:

bool MyGetComputerName(std::wstring &ComputerName) {
    bool bReturn=false;
    WCHAR ComputerNameBuffer[MAX_COMPUTERNAME_LENGTH+1]={0};
    DWORD dwComputerNameLength=MAX_COMPUTERNAME_LENGTH+1;
    DWORD dwReturn=GetComputerNameExW(ComputerNameNetBIOS,ComputerNameBuffer,&dwComputerNameLength);
    if(dwReturn) {
        ComputerName=std::wstring(ComputerNameBuffer);
        bReturn=true;
    }
    return bReturn;
}
std::wstring ComputerName;
MyGetComputerName(ComputerName);
USER_INFO_1003* pUserInfo=0;    
NetUserGetInfo(ComputerName.c_str(),L"Gast",1003,reinterpret_cast<LPBYTE*>(&pUserInfo));
bool MyGetComputerName(std::wstring&ComputerName){
bool-bReturn=false;
WCHAR ComputerNameBuffer[MAX_COMPUTERNAME_LENGTH+1]={0};
DWORD DWComputerName长度=最大计算机名称长度+1;
DWORD dwReturn=GetComputerNameExW(ComputerNameNetBIOS、ComputerNameBuffer和dwComputerNameLength);
如果(返回){
ComputerName=std::wstring(ComputerNameBuffer);
bReturn=true;
}
回程;
}
std::wstring ComputerName;
MyGetComputerName(ComputerName);
用户信息1003*pUserInfo=0;
NetUserGetInfo(ComputerName.c_str(),L“Gast”,1003,重新解释cast(&pUserInfo));
函数NetUserGeInfo失败并返回错误124。GetLastError返回错误997。
我做错了什么?

您对
NetUserGetInfo
的第三个参数完全无效,这就是它返回错误124(
error\u invalid\u LEVEL
)的原因


如果希望
级别
参数有效,请在中指定的范围内传递一个数字。在这种情况下,您应该传递值1。

您的第三个参数到
NetUserGetInfo
是完全无效的,这就是它返回错误124的原因(
error\u invalid\u LEVEL


如果希望
级别
参数有效,请在中指定的范围内传递一个数字。在这种情况下,您应该传递值1。

1003结构的文档在哪里?此处未提及:。发现它只对
NetUserSetInfo
有效,如果我想确定用户帐户是否被禁用,我应该使用哪种结构?在注释中的第一个链接后,我花了30秒的时间。
NetUserGetInfo
没有设置最后一个错误代码。因此,调用
GetLastError
毫无意义。@HansPassant:“您需要的是缓冲区,而不是指针”-请阅读文档:“
bufptr
[out]指向接收数据的缓冲区的指针。此数据的格式取决于
级别
参数的值。此缓冲区由系统分配,必须使用
NetApiBufferFree
函数释放。因此,必须将指针传递给指针
NetUserGetInfo()
将分配一个合适的缓冲区并更新指针指向它,然后您可以使用它并释放它。1003结构的文档在哪里?此处未提及:。发现它只对
NetUserSetInfo
有效,如果我想确定用户帐户是否被禁用,我应该使用哪种结构?在注释中的第一个链接后,我花了30秒的时间。
NetUserGetInfo
没有设置最后一个错误代码。因此,调用
GetLastError
毫无意义。@HansPassant:“您需要的是缓冲区,而不是指针”-请阅读文档:“
bufptr
[out]指向接收数据的缓冲区的指针。此数据的格式取决于
级别
参数的值。此缓冲区由系统分配,必须使用
NetApiBufferFree
函数释放。因此,必须将指针传递给指针
NetUserGetInfo()
将分配一个合适的缓冲区,并更新指针指向它,然后您可以使用它并释放它。如果我将值1作为第三个参数传递,它将起作用。“我所能想到的是
NetUserGetInfo
只是查看级别的低位并返回一个
用户信息3
”-不,它没有。它返回错误124的事实证明,因为错误124是
error\u INVALID\u LEVEL
,这意味着它完全拒绝1003作为输入值。@RemyLebeau谢谢,我忽略了问题中的错误信息。适当地编辑。如果我将值1作为第三个参数传递,它将起作用。“我所能想到的只是
NetUserGetInfo
只查看级别的低位并返回
USER\u INFO\u 3
”-不,它没有。它返回错误124的事实证明,因为错误124是
error\u INVALID\u LEVEL
,这意味着它完全拒绝1003作为输入值。@RemyLebeau谢谢,我忽略了问题中的错误信息。适当编辑。