我有以下用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我该如何解决?
答案 0 :(得分:3)
它打印垃圾,因为你没有的数据不是C字符串,它只是原始的二进制数据。在TokenPrivileges
的情况下,数据实际上是TOKEN_PRIVILEGES
结构。
因此,您应该将字节缓冲区转换为指向TOKEN_PRIVILEGES
结构的指针。请注意,它以灵活数组成员结束 - Privileges
数组将包含可变数量的数组元素,这就是为什么您必须查询总大小并使用足够大的字节缓冲而不是仅在堆栈上分配TOKEN_PRIVILEGES
,这不足以容纳多个条目。