ObpCallPostOperationCallbacks

NTSTATUS __stdcall ObpCallPostOperationCallbacks(
        _OB_POST_OPERATION_INFORMATION *PostOperationInfo,
        _LIST_ENTRY *PostCallbackListHead){
  _LIST_ENTRY *Blink; 
  _LIST_ENTRY *v5; 
  _LIST_ENTRY *Flink; 

  while( PostCallbackListHead->Flink != PostCallbackListHead )
  {
    Blink = PostCallbackListHead->Blink;
    if( Blink->Flink != PostCallbackListHead || (v5 = Blink->Blink, v5->Flink != Blink) )
      __fastfail(3u);
    PostCallbackListHead->Blink = v5;
    v5->Flink = PostCallbackListHead;
    Flink = Blink[1].Flink;
    PostOperationInfo->CallContext = Blink[1].Blink;
    ((void(__fastcall *)(_LIST_ENTRY *, _OB_POST_OPERATION_INFORMATION *))Flink[3].Flink)(
      Flink[1].Blink->Blink,
      PostOperationInfo);
    ExReleaseRundownProtection((_EX_RUNDOWN_REF *)&Flink[3].Blink);
    ExFreePoolWithTag(Blink, 0);
  }
  ObfDereferenceObjectWithTag(PostOperationInfo->Object, 0x6243624Fui64);
  KeLeaveCriticalRegion();
  return 0;
}

Referenced by:

ObpCallPreOperationCallbacks
ObpPostInterceptHandleCreate
ObpPostInterceptHandleDuplicate