ObpPreInterceptHandleCreate
NTSTATUS __stdcall ObpPreInterceptHandleCreate(
PVOID Object,
INT8 KernelHandle,
INT64 *DesiredAccess,
_LIST_ENTRY *ThreadCallbackListHead){
unsigned __int64 v6;
int v8;
_OBJECT_TYPE *v9;
unsigned int RetainAccess;
int v11;
NTSTATUS result;
int v13[2];
__int128 v14;
_OB_PRE_OPERATION_INFORMATION PreOperationInfo;
v6 = (unsigned __int8)*((char *)Object - 24) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)((_WORD)Object - 48) >> 8);
PreOperationInfo.Flags = 0;
v8 = *(_DWORD *)DesiredAccess;
v14 = 0i64;
v9 = (_OBJECT_TYPE *)ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ v6];
RetainAccess = v9->TypeInfo.RetainAccess;
PreOperationInfo.Parameters = (POB_PRE_OPERATION_PARAMETERS)v13;
v11 = v8 & RetainAccess;
v13[1] = v8;
v13[0] = v8;
PreOperationInfo.Operation = 1;
PreOperationInfo.Object = Object;
PreOperationInfo.Flags = KernelHandle & 1;
PreOperationInfo.CallContext = 0i64;
v14 = 0i64;
PreOperationInfo.ObjectType = v9;
result = ObpCallPreOperationCallbacks(v9, &PreOperationInfo, ThreadCallbackListHead);
if( result >= 0 && !KernelHandle )
*(_DWORD *)DesiredAccess &= v11 | v13[0];
return result;
}Referenced by:
ObpCreateHandle