ObpPreInterceptHandleDuplicate

NTSTATUS __stdcall ObpPreInterceptHandleDuplicate(
        PVOID Object,
        UINT8 KernelHandle,
        UINT64 *DesiredAccess,
        PVOID SourceProcess,
        PVOID TargetProcess,
        LIST_ENTRY *ThreadCallbackListHead){
  int v8; 
  __int64 v10; 
  int v11; 
  int v12; 
  NTSTATUS result; 
  int v14[2]; 
  PVOID v15; 
  PVOID v16; 
  int v17; 
  int v18; 
  PVOID v19; 
  __int64 v20; 
  __int64 v21; 
  int *v22; 
  v18 = 0;
  v8 = *(_DWORD *)DesiredAccess;
  v10 = ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ (unsigned __int8)*((char *)Object - 24) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)((_WORD)Object - 48) >> 8)];
  v11 = *(_DWORD *)(v10 + 96);
  v21 = 0i64;
  v12 = v8 & v11;
  v22 = v14;
  v14[1] = v8;
  v14[0] = v8;
  v18 = KernelHandle & 1;
  v17 = 2;
  v19 = Object;
  v20 = v10;
  v15 = SourceProcess;
  v16 = TargetProcess;
  result = ObpCallPreOperationCallbacks(v10, (__int64)&v17, ThreadCallbackListHead);
  if( result >= 0 && !KernelHandle )
    *(_DWORD *)DesiredAccess &= v12 | v14[0];
  return result;
}

Referenced by:

ObCompleteObjectDuplication