ExRegisterHost
NTSTATUS __stdcall ExRegisterHost(_EX_HOST **Host, UINT64 RegistrationVersion, PVOID RegistrationInfo){
VOID **PoolWithTag;
NTSTATUS v6;
__int64 v7;
_ETHREAD *CurrentThread;
_BYTE *v9;
_BYTE *v10;
_EX_HOST *v11;
__int64 *v12;
char v13;
PoolWithTag = ExAllocatePoolWithTag(*((unsigned int *)RegistrationInfo + 2), 0x60ui64, 1212512325i64);
v6 = 0;
v7 = (__int64)PoolWithTag;
if( !PoolWithTag )
return -1073741670;
*((_BYTE *)PoolWithTag + 88) &= ~1u;
*((_DWORD *)PoolWithTag + 4) = 1;
PoolWithTag[10] = 0i64;
*(_OWORD *)(PoolWithTag + 3) = *(_OWORD *)RegistrationInfo;
*(_OWORD *)(PoolWithTag + 5) = *((_OWORD *)RegistrationInfo + 1);
PoolWithTag[7] = (VOID *)*((_QWORD *)RegistrationInfo + 4);
PoolWithTag[9] = 0i64;
PoolWithTag[8] = 0i64;
ExWaitForRundownProtectionRelease((_EX_RUNDOWN_REF *)PoolWithTag + 8);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
v9 = KeAbPreAcquire(&ExpHostListLock, 0i64, 0i64);
v10 = v9;
if( _interlockedbittestandset64((volatile signed __int32 *)&ExpHostListLock, 0i64) )
ExfAcquirePushLockExclusiveEx(&ExpHostListLock, v9, &ExpHostListLock);
if( v10 )
v10[26] |= 1u;
v11 = ExpFindHost(*(_WORD *)RegistrationInfo, *((_WORD *)RegistrationInfo + 1));
if( v11 )
{
v6 = -1073741771;
ExpDereferenceHost((_EX_HOST *)v7);
ExpDereferenceHost(v11);
}
else
{
v12 = (__int64 *)qword_140D2DBD8;
if( *(__int64 **)qword_140D2DBD8 != &ExpHostList )
__fastfail(3u);
*(_QWORD *)v7 = &ExpHostList;
*(_QWORD *)(v7 + 8) = v12;
*v12 = v7;
qword_140D2DBD8 = v7;
*Host = (_EX_HOST *)v7;
}
v13 = _InterlockedExchangeAdd64(&ExpHostListLock._bf_0, 0xFFFFFFFFFFFFFFFFui64);
if( (v13 & 2) != 0 && (v13 & 4) == 0 )
ExfTryToWakePushLock(&ExpHostListLock);
KeAbPostRelease(&ExpHostListLock);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v6;
}Referenced by:
EtwpInitializeProcessorTrace
ExpInitSystemPhase1
IopInitializeIoRate
KeInitSystem
PspInitializeBackgroundActivityModeratorCallouts
PspInitializeDesktopActivityModeratorCallouts
PspInitializeHwTraceCallouts
PspInitializeMMCSSCallouts
PspInitializeNetRateControl
PspInitializeOctagonExtensionHost
PspInitializeSecExtensionHost
SepInitializeAuthorizationCallbacks
VmInitSystem