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

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

谢谢。

最佳答案

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

关于c++ - Windows Server 2003上的GetTokenInformation失败(错误998),但在2008年有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16886041/

10-11 17:50