IoCreateController

INT8 *__fastcall IoCreateController(UINT64 a1){
  char *v1; 
  int v2; 
  VOID *Flags; 
  UINT64 Flagsa; 
  UINT64 ObjectBodySize; 
  UINT64 PagedPoolCharge; 
  UINT64 NonPagedPoolCharge; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  PVOID NewObject; 
  PVOID Handle; 

  v1 = 0i64;
  v2 = a1;
  LODWORD(NonPagedPoolCharge) = 0;
  LODWORD(PagedPoolCharge) = 0;
  *(_QWORD *)&ObjectAttributes.Length = 48i64;
  memset(&ObjectAttributes.Attributes + 1, 0, 20);
  ObjectAttributes.Attributes = IopCaseInsensitive != 0 ? 576 : 512;
  NewObject = 0i64;
  Handle = 0i64;
  *(_OWORD *)&ObjectAttributes.RootDirectory = 0ui64;
  LODWORD(ObjectBodySize) = a1 + 72;
  if( ObCreateObjectEx(
         0i64,
         IoControllerObjectType,
         &ObjectAttributes,
         0i64,
         Flags,
         ObjectBodySize,
         PagedPoolCharge,
         NonPagedPoolCharge,
         &NewObject,
         0i64) >= 0 )
  {
    LODWORD(Flagsa) = 0;
    if( ObInsertObjectEx(NewObject, 0i64, 3ui64, 1ui64, Flagsa, &NewObject, &Handle) >= 0 )
    {
      ObCloseHandle(Handle, 0);
      v1 = (char *)NewObject;
      memset(NewObject, 0i64, v2 + 72);
      *(_WORD *)v1 = 2;
      *((_WORD *)v1 + 1) = v2 + 72;
      *((_QWORD *)v1 + 1) = v1 + 72;
      KeInitializeDeviceQueue((PKDEVICE_QUEUE)(v1 + 16));
    }
  }
  return v1;
}

Referenced by:

No references.