static int check_isatapi (int unitnum) { struct dev_info_spti *di = unitcheck (unitnum); if (!di) return 0; return di->isatapi; }
static struct dev_info_spti *unitisopen (int unitnum) { struct dev_info_spti *di = unitcheck (unitnum); if (!di) return NULL; if (di->open == false) return NULL; return di; }
static void close_device (int unitnum) { struct dev_info_ioctl *ciw = unitcheck (unitnum); if (!ciw) return; sys_cddev_close (ciw, unitnum); blkdev_cd_change (unitnum, ciw->drvlettername); unittable[unitnum] = 0; }
static struct device_info *info_device (int unitnum, struct device_info *di, int quick) { struct dev_info_spti *dispti = unitcheck (unitnum); if (!dispti) return NULL; if (!quick) update_device_info (unitnum); dispti->di.open = dispti->open; memcpy (di, &dispti->di, sizeof (struct device_info)); return di; }
static struct device_info *info_device (int unitnum, struct device_info *di, int quick, int session) { struct dev_info_ioctl *ciw = unitcheck (unitnum); if (!ciw) return 0; if (!quick) update_device_info (unitnum); ciw->di.open = ciw->open; memcpy (di, &ciw->di, sizeof (struct device_info)); return di; }
static void update_device_info (int unitnum) { struct dev_info_ioctl *ciw = unitcheck (unitnum); if (!ciw) return; struct device_info *di = &ciw->di; di->bus = unitnum; di->target = 0; di->lun = 0; di->media_inserted = 0; di->bytespersector = 2048; _stprintf (di->mediapath, _T("\\\\.\\%c:"), ciw->drvletter); if (fetch_geometry (ciw, unitnum, di)) { // || ioctl_command_toc (unitnum)) di->media_inserted = 1; } ioctl_command_toc2 (unitnum, &di->toc, true); di->removable = ciw->type == DRIVE_CDROM ? 1 : 0; di->write_protected = ciw->type == DRIVE_CDROM ? 1 : 0; di->type = ciw->type == DRIVE_CDROM ? INQ_ROMD : INQ_DASD; di->unitnum = unitnum + 1; _tcscpy (di->label, ciw->drvlettername); di->backend = _T("IOCTL"); }