IoConvertFileHandleToKernelHandle

NTSTATUS __stdcall IoConvertFileHandleToKernelHandle(
        PVOID Handle,
        INT8 PreviousMode,
        UINT64 DesiredAccess,
        UINT8 OverrideAccessCheck,
        PVOID *KernelHandle){
  PVOID *v5; 
  int v7; 
  NTSTATUS result; 
  int v10; 
  struct _DMA_ADAPTER *v11; 
  int v12; 
  HANDLE v13; 
  struct _OBJECT_HANDLE_INFORMATION HandleInformation; 
  HANDLE Handlea; 
  PVOID Object; 
  v5 = KernelHandle;
  Handlea = 0i64;
  v7 = DesiredAccess;
  HandleInformation = 0i64;
  *KernelHandle = 0i64;
  if( !Handle )
    return 0;
  KernelHandle = 0i64;
  result = ObReferenceObjectByHandle(
             Handle,
             0,
             (POBJECT_TYPE)IoFileObjectType,
             PreviousMode,
             (PVOID *)&KernelHandle,
             &HandleInformation);
  if( result >= 0 )
  {
    if( OverrideAccessCheck || (v7 & HandleInformation.GrantedAccess) == v7 )
    {
      v10 = ObDuplicateObject(
              *((_QWORD *)KeGetCurrentThread() + 23),
              Handle,
              PsInitialSystemProcess,
              &Handlea,
              v7,
              512,
              0,
              0);
      v11 = (struct _DMA_ADAPTER *)KernelHandle;
      v12 = v10;
      if( v10 >= 0 )
      {
        v13 = Handlea;
        Object = 0i64;
        v12 = ObReferenceObjectByHandle(Handlea, 0, (POBJECT_TYPE)IoFileObjectType, 0, &Object, 0i64);
        if( v12 < 0 )
        {
          ObCloseHandle(v13, 0);
        }
        else
        {
          if( Object == v11 )
          {
            *v5 = v13;
          }
          else
          {
            v12 = -1073741788;
            ObCloseHandle(v13, 0);
          }
          HalPutDmaAdapter((PADAPTER_OBJECT)Object);
        }
      }
    }
    else
    {
      v11 = (struct _DMA_ADAPTER *)KernelHandle;
      v12 = -1073741790;
    }
    HalPutDmaAdapter(v11);
    return v12;
  }
  return result;
}

Referenced by:

CmpNameFromAttributes
ExpQueryCodeIntegrityCertificateInfo
ExpQueryElamCertInfo
IopOpenLinkOrRenameTarget
NtRestoreKey
NtSaveKeyEx
NtSaveMergedKeys