NtRollbackRegistryTransaction

NTSTATUS __stdcall NtRollbackRegistryTransaction(VOID *TransactionHandle, UINT64 Flags){
  int v2; 
  _ETHREAD *CurrentThread; 
  NTSTATUS v5; 
  _ADAPTER_OBJECT *v6; 
  NTSTATUS v7; 
  PVOID Address; 
  _KAPC_STATE ApcState; 

  v2 = Flags;
  memset(&ApcState, 0, sizeof(ApcState));
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  if( ExAcquireRundownProtection((_EX_RUNDOWN_REF *)&CmpDummyThreadEvent + 132) )
  {
    if( v2 )
    {
      v7 = -1073741811;
    }
    else
    {
      Address = 0i64;
      v5 = ObReferenceObjectByHandle(
             TransactionHandle,
             0x10ui64,
             *(&CmpDummyThreadEvent + 6),
             KeGetCurrentThread()->PreviousMode,
             &Address,
             0i64);
      v6 = (_ADAPTER_OBJECT *)Address;
      v7 = v5;
      if( v5 >= 0 )
      {
        CmpAttachToRegistryProcess(&ApcState);
        v7 = CmpRollbackLightWeightTransaction((INT64)v6);
        KiUnstackDetachProcess(&ApcState, 0i64);
        if( v7 >= 0 )
          v7 = 0;
      }
      if( v6 )
        HalPutDmaAdapter(v6);
    }
    ExReleaseRundownProtection((_EX_RUNDOWN_REF *)&CmpDummyThreadEvent + 132);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
  }
  else
  {
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
    return -1073741431;
  }
  return v7;
}

Referenced by:

No references.