从 LogonUser 函数获取最后一个错误并将其作为字符串返回?

Posted

技术标签:

【中文标题】从 LogonUser 函数获取最后一个错误并将其作为字符串返回?【英文标题】:Get Last Error from LogonUser function and return it as a String? 【发布时间】:2009-07-02 16:04:48 【问题描述】:

我只是想知道如何在我的 C++ 程序中获取导致 LoginUser 函数失败的错误并将其作为字符串返回?

JNIEXPORT jstring JNICALL Java_com_entrust_adminservices_urs_examples_authn_LdapAuthenticator2_takeInfo(JNIEnv *env, jobject obj, jstring domain, jstring id, jstring idca, jstring password) 

    const char *nt_domain;
    const char *nt_id;
    const char *nt_password;

    nt_domain = env->GetStringUTFChars(domain, NULL);
    nt_id = env->GetStringUTFChars(id, NULL);
    nt_password = env->GetStringUTFChars(password, NULL);
    HANDLE hToken = 0;
    char *otherString;
    bool aut = true;

    aut = LogonUser(nt_id, nt_domain, nt_password, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &hToken );

    if(aut)
    
        otherString = "true";
    
    else
    
        otherString = //how would i get the last error here?
    
    jstring newString = env->NewStringUTF((const char*)otherString);
    return newString;


int main()

    return 0;

谢谢 -皮特

编辑:

谢谢大家,用:

DWORD dwError = GetLastError();
LPVOID lpMsgBuf;

FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT ), (LPTSTR) &lpMsgBuf, 0, NULL );
otherString = (char*)lpMsgBuf;

【问题讨论】:

【参考方案1】:

在 Windows 中,您可以使用 GetLastError 检索错误,然后使用 FormatMessage 将其转换为您可以使用的字符串。

【讨论】:

该死的,8 秒...嗯,+1,你的答案是完美的 :)【参考方案2】:

使用GetLastError 检索错误代码。使用FormatMessage 获取其文字描述(页面底部有一个示例)。

【讨论】:

【参考方案3】:

我为此使用了 FormatMessage 函数。

【讨论】:

【参考方案4】:

看看函数FormatMessage。您可以传递 FORMAT_MESSAGE_FROM_SYSTEM 标志和 GetLastError() 返回的错误代码。

【讨论】:

以上是关于从 LogonUser 函数获取最后一个错误并将其作为字符串返回?的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库中获取最后插入的 id 并将其发送到组件?

如果登录失败,关闭 LogonUser 句柄?

如何获取 ADLS Gen2 文件的最后修改日期并将其保存到 python 中的 csv

如何从函数内部获取 JSON 数据并将其快速显示在文本字段上?

使用 http 客户端从服务器获取值并将其用于后续步骤

使用 LOGON32_LOGON_NETWORK 从 Delphi 反复调用 LogonUser 会导致帐户被锁定吗?