IoAttachDevice

NTSTATUS __stdcall IoAttachDevice(
        PDEVICE_OBJECT SourceDevice,
        _UNICODE_STRING *TargetDevice,
        PDEVICE_OBJECT *AttachedDevice,
        INT64 a4,
        INT64 a5,
        INT64 a6,
        INT64 a7,
        INT64 a8){
  NTSTATUS result; 
  int v11; 
  _DEVICE_OBJECT *v12; 
  _DEVICE_OBJECT *v13; 
  PVOID *Object; 
  UINT64 OpenOptions; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  VOID *FileHandle; 
  PVOID v19; 

  *(&ObjectAttributes.Length + 1) = 0;
  memset(&ObjectAttributes.Attributes + 1, 0, 20);
  FileHandle = 0i64;
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.ObjectName = TargetDevice;
  LODWORD(OpenOptions) = -2147483584;
  ObjectAttributes.Length = 48;
  LODWORD(Object) = 0;
  ObjectAttributes.Attributes = IopCaseInsensitive != 0 ? 576 : 512;
  IoStatusBlock = 0i64;
  result = ZwOpenFile(&FileHandle, 0x80ui64, &ObjectAttributes, &IoStatusBlock, (UINT64)Object, OpenOptions);
  if( result >= 0 )
  {
    v19 = 0i64;
    v11 = ObReferenceObjectByHandle(FileHandle, 0i64, (_OBJECT_TYPE *)IoFileObjectType, 0, &v19, 0i64);
    if( v11 < 0 )
    {
      ZwClose((_HANDLE)FileHandle);
    }
    else
    {
      LODWORD(v12) = IoGetRelatedDeviceObject((INT64)v19);
      v13 = v12;
      ZwClose((_HANDLE)FileHandle);
      v11 = IoAttachDeviceToDeviceStackSafe(SourceDevice, v13, AttachedDevice);
      HalPutDmaAdapter((PADAPTER_OBJECT)v19);
    }
    return v11;
  }
  return result;
}

Referenced by:

No references.