【问题标题】:GetTokenInformation fails (error 998) on windows server 2003 but works on 2008GetTokenInformation 在 Windows Server 2003 上失败(错误 998),但在 2008 上有效
【发布时间】:2013-06-02 18:41:49
【问题描述】:

我在调用 GetTokenInformation 时遇到问题, 由于某种原因,它在 windows server 2003 32bit 上失败,但在 server 2008 64bit 上成功。

    PTOKEN_USER pSIDTokenUser = NULL;
    DWORD       dwReturnLength;   

    if (!GetTokenInformation(hToken, TokenUser, NULL, 0, &dwReturnLength) && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
    {
           //handle error
    }

    pSIDTokenUser = (PTOKEN_USER)new BYTE[dwReturnLength];
    memset(pSIDTokenUser, 0, dwReturnLength); 


    if (!pSIDTokenUser)
           //handle error

    if (!GetTokenInformation(hToken, TokenUser, pSIDTokenUser, dwReturnLength, NULL))
           //handle error

在 Windows 2003 上对 GetTokenInformation 的第二次调用总是返回 0 并返回错误 998(“对内存位置的访问无效”)。 我认为它与 pSIDTokenUser 大小/对齐方式(我使用默认值)等有关,但找不到原因。

谢谢。

【问题讨论】:

    标签: c++ c windows winapi


    【解决方案1】:

    根据函数注释,最后一个参数ReturnLength不是可选的。不要在第二次调用中传递 NULL。您似乎在 Windows 2008 上侥幸成功。

    【讨论】:

    • 工作就像一个魅力,非常感谢!我想它有点微妙,尤其是自 2008 年开始工作以来。
    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2012-03-25
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多