作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在LogonUserW 失败后立即调用GetLastError() 来检查错误代码,它总是183,但我不知道为什么LogonUserW 会以这样的值失败。查了msdn,发现183 (ERROR_ALREADY_EXISTS) 的意思是“当那个文件已经存在时无法创建文件”,那么LogonUserW会创建什么文件呢?
任何人都可以在这里阐明一些问题吗?
if (LogonUserW(uniUserName, uniDomainName, uniPassword, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &token))
{
//do something when success
}
else
{
STI_LOG(LOG_AUTH_DETAILS, ("Login fail\n"), true);
DWORD ec = GetLastError();
String message;
switch (ec)
{
case ERROR_PRIVILEGE_NOT_HELD:
message = "Error Privilege not held\n";
break;
case ERROR_LOGON_FAILURE:
message = "Error Logon Failure\n";
break;
//...
default:
message = "Other errors\n";
}
STI_LOG(LOG_ERROR, ("Fail to log in user: %d-%s\n", ec, message.getCString()), true);
}
最佳答案
在调用 GetLastError
之前,您正在执行此宏中的一些日志记录代码:
STI_LOG(LOG_AUTH_DETAILS, ("Login fail\n"), true);
很可能此日志记录函数中的 API 调用之一也设置了最后一个错误标志。当然,像“文件已存在”这样的错误更符合日志功能而不是登录。
因此,首先您应该在函数调用失败后立即调用GetLastError
:
if (LogonUserW(uniUserName, uniDomainName,
uniPassword, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &token))
{
//do something when success
}
else
{
DWORD ec = GetLastError();
STI_LOG(LOG_AUTH_DETAILS, ("Login fail\n"), true);
// ... etc. ...
}
因为它says on MSDN :
进行此更改后,查看 GetLastError
的返回代码是否更符合您的预期。
关于c++ - 为什么 LogonUserW 失败并显示错误代码 183 (ERROR_ALREADY_EXISTS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20039075/
我是第一次尝试实现 C++ 应用程序,所以请保持温和 :)。 我安装了 CLion 并设置了 MinGW。 首先,我已经无法使用 Windows API LogonUserW() .我的应用程序遇到错
我在LogonUserW 失败后立即调用GetLastError() 来检查错误代码,它总是183,但我不知道为什么LogonUserW 会以这样的值失败。查了msdn,发现183 (ERROR_AL
我是一名优秀的程序员,十分优秀!