IopCreatePassiveInterruptRealtimeThreads

NTSTATUS __fastcall IopCreatePassiveInterruptRealtimeThreads(void *a1){
  int v1; 
  NTSTATUS result; 
  NTSTATUS v3; 
  OBJECT_ATTRIBUTES ObjectAttributes; 
  PVOID Object; 
  HANDLE Handle; 
  Object = a1;
  memset(&ObjectAttributes.Length + 1, 0, 20);
  v1 = 0;
  memset(&ObjectAttributes.Attributes + 1, 0, 20);
  Handle = 0i64;
  ObjectAttributes.Length = 48;
  ObjectAttributes.Attributes = 512;
  if( !PassiveInterruptRealtimeWorkerCount )
    return 0;
  while( 1 )
  {
    result = PsCreateSystemThreadEx(
               &Handle,
               0x1FFFFFui64,
               &ObjectAttributes,
               0i64,
               0i64,
               IopPassiveInterruptRealtimeWorker,
               &PassiveInterruptRealtimeWorkQueue,
               0i64,
               0i64);
    if( result < 0 )
      break;
    Object = 0i64;
    v3 = ObReferenceObjectByHandle(Handle, 0x1FFFFFu, (POBJECT_TYPE)PsThreadType, 0, &Object, 0i64);
    ZwClose(Handle);
    if( v3 >= 0 )
    {
      KeSetActualBasePriorityThread((__int64)Object, (unsigned __int8)PassiveInterruptRealtimeWorkerPriority);
      HalPutDmaAdapter((PADAPTER_OBJECT)Object);
    }
    if( ++v1 >= (unsigned int)(unsigned __int8)PassiveInterruptRealtimeWorkerCount )
      return 0;
  }
  return result;
}

Referenced by:

IopInitializePassiveInterruptServices