AuthzBasepGetInternalSecurityAttributesCopyoutBufferSize

NTSTATUS __stdcall AuthzBasepGetInternalSecurityAttributesCopyoutBufferSize(
        _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *pInfo,
        UINT64 *pBufferSize){
  unsigned __int64 v4; 
  unsigned int v5; 
  unsigned int v6; 
  NTSTATUS InternalSecurityAttributeValueCopyoutBufferSize; 
  _LIST_ENTRY *p_SecurityAttributesList; 
  _LIST_ENTRY *Flink; 
  unsigned int v10; 
  unsigned int v11; 
  unsigned int v12; 
  unsigned int v14; 
  if( !pInfo || !pBufferSize )
    return -1073741811;
  v4 = 112i64 * pInfo->SecurityAttributeCount;
  if( v4 > 0xFFFFFFFF )
    return -1073741675;
  v5 = v4 + 48;
  v6 = -1;
  if( v5 >= 0x30 )
    v6 = v5;
  InternalSecurityAttributeValueCopyoutBufferSize = v5 < 0x30 ? 0xC0000095 : 0;
  if( v5 >= 0x30 )
  {
    p_SecurityAttributesList = &pInfo->SecurityAttributesList;
    Flink = pInfo->SecurityAttributesList.Flink;
    while( Flink != p_SecurityAttributesList )
    {
      v10 = (v6 + 1) & 0xFFFFFFFE;
      if( v10 < v6 )
        return -1073741675;
      v11 = -1;
      v12 = v10 + LOWORD(Flink[2].Flink);
      if( v12 >= v10 )
        v11 = v10 + LOWORD(Flink[2].Flink);
      InternalSecurityAttributeValueCopyoutBufferSize = v12 < v10 ? 0xC0000095 : 0;
      v14 = v11;
      if( v12 < v10 )
        return InternalSecurityAttributeValueCopyoutBufferSize;
      InternalSecurityAttributeValueCopyoutBufferSize = AuthzBasepGetInternalSecurityAttributeValueCopyoutBufferSize(
                                                          (__int64)Flink,
                                                          &v14);
      if( InternalSecurityAttributeValueCopyoutBufferSize < 0 )
        return InternalSecurityAttributeValueCopyoutBufferSize;
      Flink = Flink->Flink;
      v6 = v14;
    }
    *(_DWORD *)pBufferSize = v6;
  }
  return InternalSecurityAttributeValueCopyoutBufferSize;
}

Referenced by:

No references.