FsRtlLookupPerFileContext
_FSRTL_PER_FILE_CONTEXT *__stdcall FsRtlLookupPerFileContext(
VOID **PerFileContextPointer,
VOID *OwnerId,
VOID *InstanceId){
_EX_PUSH_LOCK *v3;
_FSRTL_PER_FILE_CONTEXT *bf_0;
_EX_PUSH_LOCK *v8;
_ETHREAD *CurrentThread;
_FSRTL_PER_FILE_CONTEXT *i;
v3 = (_EX_PUSH_LOCK *)*PerFileContextPointer;
bf_0 = 0i64;
if( !*PerFileContextPointer )
return 0i64;
v8 = v3 + 1;
if( (_EX_PUSH_LOCK *)v8->_bf_0 == v8 )
return 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx(v3, 0i64);
if( InstanceId )
{
for( i = (_FSRTL_PER_FILE_CONTEXT *)v8->_bf_0;
i != (_FSRTL_PER_FILE_CONTEXT *)v8;
i = (_FSRTL_PER_FILE_CONTEXT *)i->Links.Flink )
{
if( i->OwnerId == OwnerId && i->InstanceId == InstanceId )
{
LABEL_9:
bf_0 = i;
break;
}
}
}
else if( OwnerId )
{
for( i = (_FSRTL_PER_FILE_CONTEXT *)v8->_bf_0;
i != (_FSRTL_PER_FILE_CONTEXT *)v8;
i = (_FSRTL_PER_FILE_CONTEXT *)i->Links.Flink )
{
if( i->OwnerId == OwnerId )
goto LABEL_9;
}
}
else if( (_EX_PUSH_LOCK *)v8->_bf_0 != v8 )
{
bf_0 = (_FSRTL_PER_FILE_CONTEXT *)v8->_bf_0;
}
ExReleasePushLockEx((ULONG_PTR)v3, 0);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return bf_0;
}Referenced by:
No references.