FsRtlLookupPerStreamContextInternal
_LIST_ENTRY *__fastcall FsRtlLookupPerStreamContextInternal(
_FSRTL_ADVANCED_FCB_HEADER *AdvFcbHeader,
VOID *OwnerId,
VOID *InstanceId){
_ETHREAD *CurrentThread;
_LIST_ENTRY *Flink;
_LIST_ENTRY *p_FilterContexts;
_LIST_ENTRY *v9;
_ETHREAD *v10;
bool v11;
if( (*((_BYTE *)AdvFcbHeader + 7) & 0xF0u) < 0x10 )
{
ExAcquireFastMutex(AdvFcbHeader->FastMutex);
}
else
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx(&AdvFcbHeader->PushLock, 0i64);
}
Flink = AdvFcbHeader->FilterContexts.Flink;
p_FilterContexts = &AdvFcbHeader->FilterContexts;
v9 = 0i64;
if( InstanceId )
{
if( Flink != p_FilterContexts )
{
while( Flink[1].Flink != OwnerId || Flink[1].Blink != InstanceId )
{
Flink = Flink->Flink;
if( Flink == p_FilterContexts )
goto LABEL_8;
}
LABEL_7:
v9 = Flink;
}
}
else
{
if( OwnerId )
{
if( Flink == p_FilterContexts )
goto LABEL_8;
while( Flink[1].Flink != OwnerId )
{
Flink = Flink->Flink;
if( Flink == p_FilterContexts )
goto LABEL_8;
}
goto LABEL_7;
}
if( Flink != p_FilterContexts )
v9 = AdvFcbHeader->FilterContexts.Flink;
}
LABEL_8:
if( (*((_BYTE *)AdvFcbHeader + 7) & 0xF0u) < 0x10 )
{
KeReleaseGuardedMutex(AdvFcbHeader->FastMutex);
}
else
{
ExReleasePushLockEx((_DWORD)AdvFcbHeader + 72, 0);
v10 = (_ETHREAD *)KeGetCurrentThread();
v11 = v10->Tcb.KernelApcDisable++ == -1;
if( v11
&& ($F25F8C4BA33AF922A5F1AF68CD89DDDF *)v10->Tcb.ApcState.ApcListHead[0].Flink != &v10->Tcb.152
&& !v10->Tcb.SpecialApcDisable )
{
KiCheckForKernelApcDelivery();
}
}
return v9;
}Referenced by:
No references.