CmConvertHandleToKernelHandle

NTSTATUS __stdcall CmConvertHandleToKernelHandle(
        PVOID Handle,
        INT8 PreviousMode,
        UINT64 DesiredAccess,
        PVOID *KernelHandle){
  _OBJECT_TYPE *v4; 
  _ACCESS_MASK v5; 
  int v7; 
  _KPROCESSOR_MODE AccessMode; 
  PVOID Object; 
  VOID **v10; 

  Object = (PVOID)PreviousMode;
  v4 = (_OBJECT_TYPE *)CmKeyObjectType;
  v5 = (int)KernelHandle;
  if( Handle )
  {
    Object = 0i64;
    v7 = ObReferenceObjectByHandle(
           Handle,
           (unsigned int)KernelHandle,
           (_OBJECT_TYPE *)CmKeyObjectType,
           DesiredAccess,
           &Object,
           0i64);
    if( v7 >= 0 )
    {
      LOBYTE(AccessMode) = 0;
      v7 = ObOpenObjectByPointer(Object, 0x200ui64, 0i64, v5, v4, AccessMode, v10);
      HalPutDmaAdapter((PADAPTER_OBJECT)Object);
    }
    return v7;
  }
  else
  {
    *v10 = 0i64;
    return 0;
  }
}

Referenced by:

CmLoadDifferencingKey
CmUnloadKey
NtSaveMergedKeys