ExpWaitForBootDevices
VOID __stdcall __noreturn ExpWaitForBootDevices(VOID *Context){
int v1;
__int64 *v2;
unsigned __int8 v3;
unsigned __int64 v4;
while( 1 )
{
KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent, 0, 0, 0, 0i64);
v1 = 60;
while( 1 )
{
v2 = &ExBootDeviceList;
while( 1 )
{
v3 = KeAcquireSpinLockRaiseToDpc(&ExBootDeviceListSpinLock);
v2 = (__int64 *)v2[1];
v4 = v3;
KxReleaseSpinLock(&ExBootDeviceListSpinLock);
if( v2 == &ExBootDeviceList )
break;
__writecr8(v4);
if( *((_DWORD *)v2 - 1)
&& ((unsigned __int8(__fastcall *)(__int64, __int64))v2[5])(v2[4], v2[6])
&& _InterlockedExchangeAdd((volatile signed __int32 *)v2 - 1, 0xFFFFFFFF) == 1
&& _InterlockedExchangeAdd(&ExNumMissingBootDevices, 0xFFFFFFFF) == 1 )
{
goto LABEL_10;
}
}
__writecr8(v4);
LABEL_10:
if( !ExNumMissingBootDevices )
break;
KeFreezeExecution(0i64, 0i64);
KeStallExecutionProcessor(0xF4240u);
KeThawExecution(1u);
if( !--v1 )
KeBugCheckEx(0x7Bu, 0i64, 0i64, (PVOID)3, 0i64);
}
}
}Referenced by:
No references.