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