GetTokenInformation()首先调用.做什么的?

Pha*_*tom 5 c c++ windows delphi winapi

查看GetTokenInformation()的 MSDN文档和获取登录SID示例,需要调用GetTokenInformation()两次.第一个调用是获取缓冲区大小.

那么,缓冲区大小是什么?只是说我使用TokenUser作为它的第二个参数,我看到第一次调用返回的dwReturnLength不是TOKEN_USER结构的大小.

提前致谢

Rob*_*edy 8

TOKEN_USER结构包含指针(特别是指向SID其本身具有可变长度的指针).那些指针必须指向某个地方.API函数将期望一个足够大的缓冲区,不仅可以容纳TOKEN_USER结构,还可以容纳结构所指向的所有内容.该函数告诉您一切所需的内存量.它将全部驻留在相邻的内存中.

  • 叫它两次有什么问题?这是实现它的惯用方法.如果你把它调用两次,没有人会看到你的代码会被混淆,但是人们*会对你的硬编码缓冲区大小持怀疑态度.你怎么知道你可能获得的每个可能的SID的长度? (5认同)