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.