SepDuplicateClaimAttributes
__int64 __fastcall SepDuplicateClaimAttributes(__int64 a1, _QWORD *a2){
__int64 result;
int v5;
_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *v6;
_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *v7;
char v8;
SID_AND_ATTRIBUTES *v9;
INT64 v10;
_DWORD *ClaimCollectionNoLists;
_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *v12;
_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION *v13;
_SID_AND_ATTRIBUTES *v14;
UINT64 v15;
int v16;
SID_AND_ATTRIBUTES *PoolWithTag;
UINT64 v18;
UINT64 CaptureBufferLength;
_POOL_TYPE v20;
UINT8 v21;
char v22;
SIZE_T NumberOfBytes;
_SID_AND_ATTRIBUTES *CapturedArray;
result = 0i64;
v22 = 0;
LODWORD(NumberOfBytes) = 0;
v5 = 0;
CapturedArray = 0i64;
v6 = 0i64;
v7 = 0i64;
v8 = 0;
v9 = 0i64;
if( !a2 )
return 3221225485i64;
*a2 = 0i64;
if( a1 )
{
ClaimCollectionNoLists = AuthzBasepAllocateClaimCollectionNoLists(a1, (UINT64)a2);
if( !ClaimCollectionNoLists )
return(unsigned int)-1073741670;
if( *(_QWORD *)(a1 + 576) )
{
AuthzBasepAllocateSecurityAttributesList(v10);
v6 = v12;
if( !v12 )
{
v5 = -1073741670;
LABEL_33:
ExFreePoolWithTag(ClaimCollectionNoLists, 0);
return(unsigned int)v5;
}
v5 = AuthzBasepDuplicateSecurityAttributes(*(_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION **)(a1 + 576), v12, 0i64);
if( v5 < 0 )
{
LABEL_23:
if( v6 )
{
if( v8 )
AuthzBasepFreeSecurityAttributesList(v6);
ExFreePoolWithTag(v6, 0);
}
if( v7 )
{
if( v22 )
AuthzBasepFreeSecurityAttributesList(v7);
ExFreePoolWithTag(v7, 0);
}
if( v9 )
ExFreePoolWithTag(v9, 0);
goto LABEL_33;
}
v8 = 1;
*((_QWORD *)ClaimCollectionNoLists + 72) = v6;
}
if( *(_QWORD *)(a1 + 584) )
{
AuthzBasepAllocateSecurityAttributesList(v10);
v7 = v13;
if( !v13 )
{
LABEL_13:
v5 = -1073741670;
goto LABEL_23;
}
v5 = AuthzBasepDuplicateSecurityAttributes(*(_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION **)(a1 + 584), v13, 0i64);
if( v5 < 0 )
goto LABEL_23;
v22 = 1;
*((_QWORD *)ClaimCollectionNoLists + 73) = v7;
}
v14 = *(_SID_AND_ATTRIBUTES **)(a1 + 8);
if( v14 )
{
v15 = *(unsigned int *)a1;
if( (_DWORD)v15 )
{
v5 = SepLengthSidAndAttributesArray(v14, v15, &NumberOfBytes);
if( v5 < 0 )
goto LABEL_23;
v16 = NumberOfBytes;
PoolWithTag = (SID_AND_ATTRIBUTES *)ExAllocatePoolWithTag(
PagedPool,
(unsigned int)NumberOfBytes,
0x64546553ui64);
v9 = PoolWithTag;
if( !PoolWithTag )
goto LABEL_13;
LODWORD(CaptureBufferLength) = v16;
v5 = SeCaptureSidAndAttributesArray(
*(_SID_AND_ATTRIBUTES **)(a1 + 8),
*(unsigned int *)a1,
0,
PoolWithTag,
CaptureBufferLength,
v20,
v21,
&CapturedArray,
&NumberOfBytes);
if( v5 < 0 )
goto LABEL_23;
v18 = *(unsigned int *)a1;
*ClaimCollectionNoLists = v18;
*((_QWORD *)ClaimCollectionNoLists + 1) = v9;
RtlSidHashInitialize(v9, v18, (SID_AND_ATTRIBUTES_HASH *)(ClaimCollectionNoLists + 8));
}
}
*a2 = ClaimCollectionNoLists;
if( v5 >= 0 )
return(unsigned int)v5;
goto LABEL_23;
}
return result;
}Referenced by:
SepConvertToOwnTokenClaims
SepDuplicateTokenClaims