PnpAllocateCriticalMemory

CHAR *__fastcall PnpAllocateCriticalMemory(INT64 a1, POOL_TYPE a2, UINT64 a3, UINT64 a4){
  unsigned int v5; 
  UINT64 v6; 
  int v8; 
  CHAR *result; 
  union _LARGE_INTEGER Interval; 
  v5 = a4;
  v6 = (unsigned int)a4;
  v8 = a1;
  while( 1 )
  {
    result = (CHAR *)ExAllocatePoolWithTag(a2, a3, v6);
    if( result || (v8 & 0xFFFFFFFB) == 0 )
      break;
    Interval.QuadPart = -10000i64;
    KeDelayExecutionThread(0, 0, &Interval);
    v6 = v5;
  }
  return result;
}

Referenced by:

IopAllocateRelationList
PiAllocateDeviceObjectList
PiEventAllocateVetoBuffer
PiEventBuildPdoList
PiProcessQueryAndCancelRemoval
PnpCompileDeviceInstancePaths
PnpQueuePendingSurpriseRemoval
PnpResizeTargetDeviceBlock
PnpSetTargetDeviceRemove