调用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/