FsRtlInsertPerStreamContext

NTSTATUS __stdcall FsRtlInsertPerStreamContext(
        _FSRTL_ADVANCED_FCB_HEADER *AdvFcbHeader,
        _FSRTL_PER_STREAM_CONTEXT *Ptr){
  _ETHREAD *CurrentThread; 
  _LIST_ENTRY *p_FilterContexts; 
  _LIST_ENTRY *Flink; 

  if( !AdvFcbHeader || (AdvFcbHeader->Flags2 & 2) == 0 )
    return -1073741808;
  if( (*((_BYTE *)AdvFcbHeader + 7) & 0xF0u) < 0x10 )
  {
    ExAcquireFastMutex(AdvFcbHeader->FastMutex);
  }
  else
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    ExAcquirePushLockExclusiveEx(&AdvFcbHeader->PushLock, 0i64);
  }
  p_FilterContexts = &AdvFcbHeader->FilterContexts;
  Flink = AdvFcbHeader->FilterContexts.Flink;
  if( Flink->Blink != &AdvFcbHeader->FilterContexts )
    __fastfail(3u);
  Ptr->Links.Blink = p_FilterContexts;
  Ptr->Links.Flink = Flink;
  Flink->Blink = &Ptr->Links;
  p_FilterContexts->Flink = &Ptr->Links;
  if( (*((_BYTE *)AdvFcbHeader + 7) & 0xF0u) < 0x10 )
  {
    KeReleaseGuardedMutex(AdvFcbHeader->FastMutex);
  }
  else
  {
    ExReleasePushLockEx((_DWORD)AdvFcbHeader + 72, 0);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
  }
  return 0;
}

Referenced by:

No references.