+
+int rawdisk_eject(HANDLE hdev)
+{
+ DWORD sz;
+ return DeviceIoControl(hdev, IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, &sz, 0) == 0 ? -1 : 0;
+}
+
+int rawdisk_load(HANDLE hdev)
+{
+ DWORD sz;
+ return DeviceIoControl(hdev, IOCTL_STORAGE_LOAD_MEDIA, 0, 0, 0, 0, &sz, 0) == 0 ? -1 : 0;
+}
+
+void rawdisk_refresh(HANDLE hdev)
+{
+ DWORD sz;
+ char *buf;
+
+ /* try to rock the boat so hopefully windows will re-read the disk and it'll show up */
+ DeviceIoControl(hdev, IOCTL_DISK_UPDATE_PROPERTIES, 0, 0, 0, 0, &sz, 0);
+
+ sz = sizeof(DRIVE_LAYOUT_INFORMATION) + sizeof(PARTITION_INFORMATION) * 32;
+ buf = alloca(sz);
+
+ DeviceIoControl(hdev, IOCTL_DISK_GET_DRIVE_LAYOUT, 0, 0, buf, sz, &sz, 0);
+}
\ No newline at end of file