NtSaveMergedKeys

NTSTATUS __stdcall NtSaveMergedKeys(PVOID HighPrecedenceKeyHandle, PVOID LowPrecedenceKeyHandle, PVOID FileHandle){
  _ETHREAD *CurrentThread; 
  NTSTATUS v7; 
  CHAR v8; 
  _OBJECT_TYPE *v9; 
  INT8 v10; 
  _OBJECT_TYPE *v11; 
  INT8 v12; 
  PADAPTER_OBJECT DmaAdapter; 
  PADAPTER_OBJECT v15; 
  HANDLE FileHandlea; 
  HANDLE LowPrecedenceKeyHandlea; 
  HANDLE HighPrecedenceKeyHandlea; 
  KAPC_STATE ApcState; 
  LowPrecedenceKeyHandlea = 0i64;
  HighPrecedenceKeyHandlea = 0i64;
  v15 = 0i64;
  DmaAdapter = 0i64;
  FileHandlea = 0i64;
  memset(&ApcState, 0, sizeof(ApcState));
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  if( ExAcquireRundownProtection((PEX_RUNDOWN_REF)&CmpShutdownRundown) )
  {
    v7 = CmCheckNoTxContext();
    if( v7 >= 0 )
    {
      v8 = *((_BYTE *)KeGetCurrentThread() + 562);
      if( SeSinglePrivilegeCheck(*(_QWORD *)&SeBackupPrivilege, v8) )
      {
        if( v8 )
        {
          v7 = CmConvertHandleToKernelHandle(HighPrecedenceKeyHandle, v9, v8, 0i64, &HighPrecedenceKeyHandlea);
          if( v7 >= 0 )
          {
            v7 = CmConvertHandleToKernelHandle(LowPrecedenceKeyHandle, v11, v8, 0i64, &LowPrecedenceKeyHandlea);
            if( v7 >= 0 )
            {
              v7 = IoConvertFileHandleToKernelHandle(FileHandle, v8, 2ui64, 0, &FileHandlea);
              if( v7 >= 0 )
                v7 = ZwSaveMergedKeys(HighPrecedenceKeyHandlea, LowPrecedenceKeyHandlea, FileHandlea);
            }
          }
        }
        else
        {
          v7 = CmObReferenceObjectByHandle(HighPrecedenceKeyHandle, 0i64, v10, 0i64, (OBJECT_HANDLE_INFORMATION *)&v15);
          if( v7 >= 0 )
          {
            v7 = CmObReferenceObjectByHandle(
                   LowPrecedenceKeyHandle,
                   0i64,
                   v12,
                   0i64,
                   (OBJECT_HANDLE_INFORMATION *)&DmaAdapter);
            if( v7 >= 0 )
            {
              CmpAttachToRegistryProcess(&ApcState);
              v7 = CmSaveMergedKeys((_CM_KEY_BODY *)v15, (_CM_KEY_BODY *)DmaAdapter, FileHandle);
              KiUnstackDetachProcess(&ApcState, 0i64);
            }
          }
        }
      }
      else
      {
        v7 = -1073741727;
      }
    }
    ExReleaseRundownProtection((PEX_RUNDOWN_REF)&CmpShutdownRundown);
    KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
    if( DmaAdapter )
      HalPutDmaAdapter(DmaAdapter);
    if( v15 )
      HalPutDmaAdapter(v15);
    if( FileHandlea )
      ZwClose(FileHandlea);
  }
  else
  {
    KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
    v7 = -1073741431;
  }
  if( LowPrecedenceKeyHandlea )
    ZwClose(LowPrecedenceKeyHandlea);
  if( HighPrecedenceKeyHandlea )
    ZwClose(HighPrecedenceKeyHandlea);
  return v7;
}

Referenced by:

No references.