ObpPreInterceptHandleDuplicate

_KNOWN_CONTROLLER_TYPE __stdcall ObpPreInterceptHandleDuplicate(
        _KNOWN_CONTROLLER_TYPE a1,
        _KNOWN_CONTROLLER_TYPE a2,
        _KNOWN_CONTROLLER_TYPE a3){
  __int64 v3; 
  void *v4; 
  _DWORD *v5; 
  int v6; 
  char v7; 
  _OBJECT_TYPE *v8; 
  unsigned int RetainAccess; 
  int v10; 
  _KNOWN_CONTROLLER_TYPE result; 
  int v12[2]; 
  __int64 v13; 
  __int64 v14; 
  _OB_PRE_OPERATION_INFORMATION PreOperationInfo; 
  __int64 v16; 
  _LIST_ENTRY *PostCallbackListHead; 

  PreOperationInfo.Flags = 0;
  v4 = *(void **)&a1;
  v5 = *(_DWORD **)&a3;
  v6 = **(_DWORD **)&a3;
  v7 = a2;
  v8 = (_OBJECT_TYPE *)ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ *(unsigned __int8 *)(*(_QWORD *)&a1 - 24i64) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)(a1 - 48) >> 8)];
  RetainAccess = v8->TypeInfo.RetainAccess;
  PreOperationInfo.CallContext = 0i64;
  v10 = v6 & RetainAccess;
  PreOperationInfo.Parameters = (POB_PRE_OPERATION_PARAMETERS)v12;
  v12[1] = v6;
  v12[0] = v6;
  PreOperationInfo.Flags = a2 & 1;
  PreOperationInfo.Operation = 2;
  PreOperationInfo.Object = v4;
  PreOperationInfo.ObjectType = v8;
  v13 = v3;
  v14 = v16;
  result = ObpCallPreOperationCallbacks(v8, &PreOperationInfo, PostCallbackListHead);
  if( result >= InterruptControllerInvalid && !v7 )
    *v5 &= v10 | v12[0];
  return result;
}

Referenced by:

ObCompleteObjectDuplication