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.