0

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 のサイズ/配置 (デフォルトを使用) などと関係があると思いますが、理由が見つかりませんでした。

ありがとう。

4

1 に答える 1

1

ReturnLength関数の注釈によると、最後のパラメーターはオプションではありません。2 番目の呼び出しで NULL を渡さないでください。Windows 2008でそれを回避しているようです。

于 2013-06-02T18:49:33.573 に答える