IoCreateSystemThread

NTSTATUS __stdcall IoCreateSystemThread(
        PVOID IoObject,
        PHANDLE ThreadHandle,
        UINT32 DesiredAccess,
        POBJECT_ATTRIBUTES ObjectAttributes,
        HANDLE ProcessHandle,
        PCLIENT_ID ClientId,
        PKSTART_ROUTINE StartRoutine,
        PVOID StartContext){
  CHAR *Pool_1; 
  CHAR *v13; 
  int SystemThread; 
  if( (unsigned __int16)(*(_WORD *)IoObject - 3) > 1u )
    KeBugCheckEx(0x148u, 0i64, (ULONG_PTR)StartRoutine, (ULONG_PTR)IoObject, 0i64);
  Pool_1 = IopVerifierExAllocatePool_1(PagedPool, 0x18ui64);
  v13 = Pool_1;
  if( !Pool_1 )
    return -1073741670;
  *(_QWORD *)Pool_1 = IoObject;
  *((_QWORD *)Pool_1 + 1) = StartRoutine;
  *((_QWORD *)Pool_1 + 2) = StartContext;
  ObfReferenceObject(IoObject);
  SystemThread = PsCreateSystemThreadEx(
                   ThreadHandle,
                   DesiredAccess,
                   ObjectAttributes,
                   ProcessHandle,
                   ClientId,
                   IopThreadStart,
                   v13,
                   0i64,
                   0i64);
  if( SystemThread < 0 )
  {
    HalPutDmaAdapter((PADAPTER_OBJECT)IoObject);
    ExFreePoolWithTag(v13, 0);
  }
  return SystemThread;
}

Referenced by:

No references.