NtCompressKey

NTSTATUS __stdcall NtCompressKey(PVOID Key){
  NTSTATUS v2; 
  INT8 v3; 
  INT8 v4; 
  PVOID *v5; 
  unsigned int v6; 
  _ETHREAD *CurrentThread; 
  PADAPTER_OBJECT v8; 
  _DMA_OPERATIONS *DmaOperations; 
  int(__fastcall *AllocateAdapterChannel)(_DMA_ADAPTER *, _DEVICE_OBJECT *, unsigned int, _IO_ALLOCATION_ACTION(__fastcall *)(_DEVICE_OBJECT *, _IRP *, void *, void *), void *); 
  _HIVE_WRITE_WAIT_QUEUE *v11; 
  UINT64 v12; 
  PADAPTER_OBJECT DmaAdapter; 
  KAPC_STATE ApcState; 
  DmaAdapter = 0i64;
  memset(&ApcState, 0, sizeof(ApcState));
  v2 = CmCheckNoTxContext();
  if( v2 >= 0 )
  {
    v3 = *((_BYTE *)KeGetCurrentThread() + 562);
    if( SeSinglePrivilegeCheck(*(_QWORD *)&SeBackupPrivilege, v3) )
    {
      LOBYTE(v5) = v3;
      v6 = (unsigned __int8)Key & 3;
      v2 = CmObReferenceObjectByHandle(Key, 0x20006ui64, v4, v5, (OBJECT_HANDLE_INFORMATION *)&DmaAdapter);
      if( v2 >= 0 )
      {
        CurrentThread = (_ETHREAD *)KeGetCurrentThread();
        --*((_WORD *)CurrentThread + 242);
        if( ExAcquireRundownProtection((PEX_RUNDOWN_REF)&CmpShutdownRundown) )
        {
          v8 = DmaAdapter;
          while( 1 )
          {
            CmpLockRegistryExclusive();
            v2 = CmpPerformKeyBodyDeletionCheck((__int64)v8, 0i64);
            if( v2 < 0 )
              break;
            DmaOperations = v8->DmaOperations;
            AllocateAdapterChannel = DmaOperations->AllocateAdapterChannel;
            if( LODWORD(DmaOperations->FlushAdapterBuffers) != *(_DWORD *)(*((_QWORD *)AllocateAdapterChannel + 8)
                                                                          + 36i64) )
            {
              v2 = -1073741811;
              break;
            }
            v11 = (_HIVE_WRITE_WAIT_QUEUE *)((char *)AllocateAdapterChannel + 4248);
            if( !PoIsInitializedStopWatch((_QWORD *)AllocateAdapterChannel + 531) )
            {
              v11 = (_HIVE_WRITE_WAIT_QUEUE *)((char *)AllocateAdapterChannel + 4232);
              if( !PoIsInitializedStopWatch((_QWORD *)AllocateAdapterChannel + 529) )
              {
                CmpAttachToRegistryProcess(&ApcState);
                v2 = CmCompressKey((INT64)v8->DmaOperations->AllocateAdapterChannel, v6);
                KiUnstackDetachProcess(&ApcState, 0i64);
                break;
              }
            }
            ExAcquirePushLockExclusiveEx((UINT64)AllocateAdapterChannel + 72, 0i64);
            CmpWaitOnHiveWriteQueue((_CMHIVE *)AllocateAdapterChannel, v11, v12);
          }
          CmpUnlockRegistry();
          ExReleaseRundownProtection((PEX_RUNDOWN_REF)&CmpShutdownRundown);
          KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
        }
        else
        {
          KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
          v2 = -1073741431;
        }
      }
      if( DmaAdapter )
        HalPutDmaAdapter(DmaAdapter);
    }
    else
    {
      return -1073741727;
    }
  }
  return v2;
}

Referenced by:

No references.