1

プログラム特権に関するトークン情報を取得することになっているCで書かれた次のコードスニペットがあります。

char buffer[1000]; //Declaring the buffer where the token information will be stored
int size = sizeof(buffer); //Storing the size of the buffer
DWORD required_size; //A variable storing return information from the GetTokenInformation() method

HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, GetCurrentProcessId()); //Opening the current process
HANDLE token; //Creating a handle for the token
OpenProcessToken(process, TOKEN_ADJUST_PRIVILEGES, &token); //Opening the process token

GetTokenInformation(token, TokenPrivileges, buffer, size, &required_size); //Obtaining the token information
printf("The following information was obtained with regards to the token privileges: \n\n");
printf("%s\n\n", buffer);

主な問題は、「バッファ」の内容を印刷しようとすると、ゴミの情報だけが画面に表示されることです:sこれを解決するにはどうすればよいですか?

4

1 に答える 1

3

あなたが持っていないデータはC文字列ではなく、生のバイナリデータであるため、ゴミを印刷しています。の場合TokenPrivileges、データは実際にはTOKEN_PRIVILEGES構造体です。

そのため、バイト バッファーを構造体へのポインターにキャストする必要がありますTOKEN_PRIVILEGES柔軟な配列メンバーで終わることに注意してください-Privileges配列には可変数の配列要素が含まれます。そのためTOKEN_PRIVILEGES、スタックに a を割り当てるだけでなく、合計サイズを照会して十分な大きさのバイトバッファーを使用する必要があります。複数のエントリを保持するのに十分な大きさであってはなりません。

于 2012-11-08T15:48:40.617 に答える