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 回答