SeCaptureSecurityQos
NTSTATUS __stdcall SeCaptureSecurityQos(
_OBJECT_ATTRIBUTES *ObjectAttributes,
INT8 RequestorMode,
UINT8 *SecurityQosPresent,
_SECURITY_QUALITY_OF_SERVICE *CapturedSecurityQos){
_SECURITY_QUALITY_OF_SERVICE *v4;
NTSTATUS 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 -1073741811;
*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 -1073741811;
*CapturedSecurityQos = *v4;
}
LABEL_6:
if( !*SecurityQosPresent )
return 0;
result = SeValidateSecurityQos(CapturedSecurityQos);
if( result >= 0 )
return 0;
return result;
}Referenced by:
NtCreateTokenEx
NtDuplicateToken