SeCaptureSecurityQos
INT64 __fastcall SeCaptureSecurityQos(
_OBJECT_ATTRIBUTES *ObjectAttributes,
CHAR RequestorMode,
UINT8 *SecurityQosPresent,
_SECURITY_QUALITY_OF_SERVICE *CapturedSecurityQos){
_SECURITY_QUALITY_OF_SERVICE *v4;
INT64 result;
_SECURITY_QUALITY_OF_SERVICE *SecurityQualityOfService;
*SecurityQosPresent = 0;
if( RequestorMode )
{
if( ObjectAttributes )
{
if( ((unsigned __int8)ObjectAttributes & 3) == 0 )
{
SecurityQualityOfService = (_SECURITY_QUALITY_OF_SERVICE *)ObjectAttributes->SecurityQualityOfService;
if( !SecurityQualityOfService )
goto LABEL_6;
if( ((unsigned __int8)SecurityQualityOfService & 3) == 0 )
{
if( SecurityQualityOfService->Length != 12 )
return 3221225485i64;
*SecurityQosPresent = 1;
*CapturedSecurityQos = *SecurityQualityOfService;
CapturedSecurityQos->Length = 12;
goto LABEL_6;
}
}
ExRaiseDatatypeMisalignment();
}
}
else if( ObjectAttributes && ObjectAttributes->SecurityQualityOfService )
{
*SecurityQosPresent = 1;
v4 = (_SECURITY_QUALITY_OF_SERVICE *)ObjectAttributes->SecurityQualityOfService;
if( v4->Length != 12 )
return 3221225485i64;
*CapturedSecurityQos = *v4;
}
LABEL_6:
if( !*SecurityQosPresent )
return 0i64;
result = SeValidateSecurityQos(CapturedSecurityQos);
if( (int)result >= 0 )
return 0i64;
return result;
}Referenced by:
NtCreateTokenEx
NtDuplicateToken