SmGetRegistrationInfo
NTSTATUS __stdcall SmGetRegistrationInfo(INT8 RequestorMode, _SM_REGISTRATION_REQUEST *RegRequest){
_ETHREAD *CurrentThread;
int v5;
_KPROCESSOR_MODE v6;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(&BugCheckParameter2, 0i64);
if( ((unsigned __int8)StoreProcess & 8) != 0 )
{
v5 = 0;
}
else
{
v5 = SmRegistrationCtxStart(&CachesUpdatedEvent);
if( v5 >= 0 )
LODWORD(StoreProcess) = (unsigned int)StoreProcess | 8;
}
if( (_InterlockedExchangeAdd64(&BugCheckParameter2._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(&BugCheckParameter2);
KeAbPostRelease(&BugCheckParameter2);
KeLeaveCriticalRegion();
if( v5 >= 0 )
{
LOBYTE(v6) = RequestorMode;
v5 = SmRegistrationInfoFill((VOID **)&CachesUpdatedEvent, v6, RegRequest + 2);
if( v5 >= 0 )
return 0;
}
return v5;
}Referenced by:
SmProcessRegistrationRequest