PnpAllocateCriticalMemory

VOID **__fastcall PnpAllocateCriticalMemory(int a1, POOL_TYPE a2, UINT64 a3, unsigned int a4){
  INT64 i; 
  VOID **result; 
  _LARGE_INTEGER Interval; 

  for( i = a4; ; i = a4 )
  {
    result = ExAllocatePoolWithTag((unsigned int)a2, a3, i);
    if( result || (a1 & 0xFFFFFFFB) == 0 )
      break;
    Interval.QuadPart = -10000i64;
    KeDelayExecutionThread(0, 0, &Interval);
  }
  return result;
}

Referenced by:

IopAllocateRelationList
PiAllocateDeviceObjectList
PiEventAllocateVetoBuffer
PiEventBuildPdoList
PiProcessQueryAndCancelRemoval
PnpCompileDeviceInstancePaths
PnpQueuePendingSurpriseRemoval
PnpResizeTargetDeviceBlock
PnpSetTargetDeviceRemove