SmKmKeyGenKeyDelete

VOID __fastcall SmKmKeyGenKeyDelete(PVOID Lock, PPRIVILEGE_SET Privileges){
  _ETHREAD *CurrentThread; 
  __int64 v5; 
  PPRIVILEGE_SET *Luid; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockExclusiveEx((UINT64)Lock, 0i64);
  v5 = *(_QWORD *)&Privileges->PrivilegeCount;
  if( *(PPRIVILEGE_SET *)(*(_QWORD *)&Privileges->PrivilegeCount + 8i64) != Privileges
    || (Luid = (PPRIVILEGE_SET *)Privileges->Privilege[0].Luid, *Luid != Privileges) )
  {
    __fastfail(3u);
  }
  *Luid = (PPRIVILEGE_SET)v5;
  *(_QWORD *)(v5 + 8) = Luid;
  CmSiFreeMemory(Privileges);
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)Lock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)Lock);
  KeAbPostRelease(Lock);
  KeLeaveCriticalRegion();
}

Referenced by:

SmKmKeyGenGenerate