GetTokenInformation を呼び出すときに問題が発生しました。何らかの理由で、Windows サーバー 2003 32 ビットでは失敗しますが、サーバー 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 への 2 回目の呼び出しは、エラー 998 (「メモリ ロケーションへの無効なアクセス」) で常に 0 を返します。pSIDTokenUser のサイズ/配置 (デフォルトを使用) などと関係があると思いますが、理由が見つかりませんでした。
ありがとう。