【发布时间】:2013-11-18 02:27:36
【问题描述】:
我在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);
}
【问题讨论】:
-
你能告诉我们你正在使用的代码吗?
-
上面这段代码我加了,很简单。
-
可能返回的令牌仍在使用中。 (我没有看到 CloseHandle)
标签: c++ windows security winapi authentication