调用AcceptSecurityContext时,如何查询输出缓冲区所需的大小



我尝试了通常的Windows方式,将nullptr作为输出缓冲区指针,大小为0。AcceptSecurityContext失败,出现错误SEC_E_INSUFFICIENT_MEMORY。我本来希望在OutSecBuff.cbBuffer中得到所需的大小,但它是0。我用巨大的缓冲区再次调用它。调用成功,但上下文无效,以后的调用失败。

// Query needed buffer size
secStatus = AcceptSecurityContext(&hcred,&hctxt, &InBuffDesc,attr,SECURITY_NATIVE_DREP,
&hctxt,&OutBuffDesc,&attr,nullptr);
if(SEC_E_INSUFFICIENT_MEMORY == ss)
{
// Allocate buffer of needed size, big enough
OutSecBuff.cbBuffer = *pcbOut;
OutSecBuff.pvBuffer = pOut;
// Call with buffer of required size
secStatus = AcceptSecurityContext(&hcred,&hctxt, InBuffDesc,
attr,SECURITY_NATIVE_DREP,&hctxt,&OutBuffDesc,&attr,nullptr);
}

如果我预先分配了巨大的缓冲区,一切都会很好
我想动态分配所需大小的缓冲区。

SSAPI采用不同的方法。查询安全包QuerySecurityPackageInfo时,在字段cbMaxToken中返回输出缓冲区的最大大小。您只需分配一次缓冲区,就可以确保缓冲区大小足以满足所有请求。

相关内容

  • 没有找到相关文章

最新更新