0

我在调用 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 大小/对齐(我使用默认值)等有关,但找不到原因。

谢谢。

4

1 回答 1

1

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

于 2013-06-02T18:49:33.573 回答