TOKEN_USER结构中Sid的内存生命周期、存储位置及指针有效性问询
关于
TOKEN_USER中SID内存生命周期的疑问 TOKEN_USER结构包含指向Sid结构的指针,请问该SID的内存存活时长是多久(存储在内存的何处)?SID是否存储在TOKEN_USER结构中(即随该结构释放而失效)?
背景信息
为获取当前用户SID,我通过OpenProcessToken()打开进程令牌,随后以TokenUser作为令牌信息类,通过GetTokenInformation()将用户TOKEN_USER写入已分配的缓冲区。User.Sid字段中包含指向SID的指针,但文档未说明该SID的存储位置。关闭进程令牌后,该SID指针是否仍有效?或是仅在TOKEN_USER结构未被释放时有效?
回答
当你调用GetTokenInformation()并指定TokenUser类别时,TOKEN_USER结构和它指向的SID数据是连续存储在你提供的缓冲区中的。也就是说,User.Sid指针指向的是缓冲区内部的一块内存区域,并非独立分配的外部内存。
具体规则:
- 只要你自行分配的缓冲区未被释放或回收,
User.Sid指针就始终有效,和进程令牌是否关闭没有关系。 - 当你释放该缓冲区时,
User.Sid指向的内存会被一同释放,此时指针失效。
简言之,SID是嵌入在你管理的缓冲区里的,其生命周期完全由缓冲区的存活状态决定,与进程令牌的状态无关。
内容的提问来源于stack exchange,提问作者beehive
相关产品推荐
相关产品推荐

