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