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