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