VrpIncrementSiloCount
NTSTATUS __stdcall VrpIncrementSiloCount(){
_ETHREAD *CurrentThread;
NTSTATUS v1;
__int64 v2;
char v3;
const VOID *v5[3];
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v1 = 0;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(&VrpActiveSilosLock, 0i64);
if( VrpNumActiveSilos
|| (v5[0] = (const VOID *)917516, v5[1] = &stru_1407CDE30._Xmm15, v1 = CmRegisterInternalCallback(v2, v5), v1 >= 0) )
{
++VrpNumActiveSilos;
}
v3 = _InterlockedExchangeAdd64(&VrpActiveSilosLock._bf_0, 0xFFFFFFFFFFFFFFFFui64);
if( (v3 & 2) != 0 && (v3 & 4) == 0 )
ExfTryToWakePushLock(&VrpActiveSilosLock);
KeAbPostRelease(&VrpActiveSilosLock);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v1;
}Referenced by:
VrpHandleIoctlInitializeJobForVreg