PiPnpRtlApplyMandatoryFilters
NTSTATUS __fastcall PiPnpRtlApplyMandatoryFilters(
HPNPCTX *hPnpCtx,
WCHAR *ObjectName,
PNP_OBJECT_TYPE ObjectType,
VOID *ObjectBaseKey,
_SECURITY_SUBJECT_CONTEXT *SecuritySubjectContext,
UINT8 *Matched){
_SECURITY_SUBJECT_CONTEXT *v6;
void *ClientToken;
int SessionIdToken;
VOID *v13;
UINT8 *v14;
int v15;
int v16;
char v19;
char IsServiceSession[40];
v6 = SecuritySubjectContext;
IsServiceSession[0] = 0;
ClientToken = SecuritySubjectContext->ClientToken;
if( !SecuritySubjectContext->ClientToken )
ClientToken = SecuritySubjectContext->PrimaryToken;
SessionIdToken = SeQuerySessionIdTokenEx(ClientToken, (UINT64 *)&SecuritySubjectContext, (UINT8 *)IsServiceSession);
if( SessionIdToken >= 0 )
{
if( !IsServiceSession[0] )
goto LABEL_5;
LOBYTE(SecuritySubjectContext) = 0;
SessionIdToken = PiAuVerifyAccessToObject(
0xF0000ui64,
SecurityObject,
(_GENERIC_MAPPING *)&PiAuLocalSystemSecurityMapping,
v6,
(UINT8 *)&SecuritySubjectContext);
v19 = (char)SecuritySubjectContext;
if( SessionIdToken < 0 )
v19 = 0;
if( SessionIdToken >= 0 )
{
if( v19 )
{
v14 = Matched;
goto LABEL_15;
}
LABEL_5:
v14 = Matched;
v15 = ObjectType - 1;
if( !v15 )
return PiPnpRtlApplyMandatoryDeviceFilters(hPnpCtx, ObjectName, ObjectBaseKey, v6, Matched);
v16 = v15 - 2;
if( !v16 )
return PiPnpRtlApplyMandatoryDeviceInterfaceFilters(hPnpCtx, ObjectName, ObjectBaseKey, v6, Matched);
if( v16 == 2 )
return PiPnpRtlApplyMandatoryDeviceContainerFilters(hPnpCtx, ObjectName, v13, v6, Matched);
LABEL_15:
*v14 = 1;
}
}
return SessionIdToken;
}Referenced by:
IoGetDeviceInterfaceAlias
IopDeviceInterfaceFilterCallback
IopGetDeviceInterfaces
PiCMMandatoryFilterCallback
PiCMValidateDeviceInstance
PiDqQueryApplyObjectEvent
PiUEventApplyAdditionalFilters