Index: /trunk/src/VBox/Devices/Storage/ATAController.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/ATAController.cpp	(revision 35594)
+++ /trunk/src/VBox/Devices/Storage/ATAController.cpp	(revision 35595)
@@ -2922,5 +2922,5 @@
         case ATA_READ_SECTORS:
         case ATA_READ_SECTORS_WITHOUT_RETRIES:
-            if (!s->pDrvBlock)
+            if (!s->pDrvBlock || s->fATAPI)
                 goto abort_cmd;
             s->cSectorsPerIRQ = 1;
@@ -2931,4 +2931,6 @@
         case ATA_WRITE_SECTORS:
         case ATA_WRITE_SECTORS_WITHOUT_RETRIES:
+            if (!s->pDrvBlock || s->fATAPI)
+                goto abort_cmd;
             s->cSectorsPerIRQ = 1;
             ataStartTransfer(s, ataGetNSectors(s) * 512, PDMBLOCKTXDIR_TO_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_WRITE_SECTORS, false);
@@ -2937,5 +2939,5 @@
             s->fLBA48 = true;
         case ATA_READ_MULTIPLE:
-            if (!s->cMultSectors)
+            if (!s->pDrvBlock || !s->cMultSectors || s->fATAPI)
                 goto abort_cmd;
             s->cSectorsPerIRQ = s->cMultSectors;
@@ -2945,5 +2947,5 @@
             s->fLBA48 = true;
         case ATA_WRITE_MULTIPLE:
-            if (!s->cMultSectors)
+            if (!s->pDrvBlock || !s->cMultSectors || s->fATAPI)
                 goto abort_cmd;
             s->cSectorsPerIRQ = s->cMultSectors;
@@ -2954,5 +2956,5 @@
         case ATA_READ_DMA:
         case ATA_READ_DMA_WITHOUT_RETRIES:
-            if (!s->pDrvBlock)
+            if (!s->pDrvBlock || s->fATAPI)
                 goto abort_cmd;
             s->cSectorsPerIRQ = ATA_MAX_MULT_SECTORS;
@@ -2964,5 +2966,5 @@
         case ATA_WRITE_DMA:
         case ATA_WRITE_DMA_WITHOUT_RETRIES:
-            if (!s->pDrvBlock)
+            if (!s->pDrvBlock || s->fATAPI)
                 goto abort_cmd;
             s->cSectorsPerIRQ = ATA_MAX_MULT_SECTORS;
Index: /trunk/src/VBox/Devices/Storage/DevATA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/DevATA.cpp	(revision 35594)
+++ /trunk/src/VBox/Devices/Storage/DevATA.cpp	(revision 35595)
@@ -3654,5 +3654,5 @@
         case ATA_READ_SECTORS:
         case ATA_READ_SECTORS_WITHOUT_RETRIES:
-            if (!s->pDrvBlock)
+            if (!s->pDrvBlock || s->fATAPI)
                 goto abort_cmd;
             s->cSectorsPerIRQ = 1;
@@ -3663,4 +3663,6 @@
         case ATA_WRITE_SECTORS:
         case ATA_WRITE_SECTORS_WITHOUT_RETRIES:
+            if (!s->pDrvBlock || s->fATAPI)
+                goto abort_cmd;
             s->cSectorsPerIRQ = 1;
             ataStartTransfer(s, ataGetNSectors(s) * 512, PDMBLOCKTXDIR_TO_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_WRITE_SECTORS, false);
@@ -3669,5 +3671,5 @@
             s->fLBA48 = true;
         case ATA_READ_MULTIPLE:
-            if (!s->cMultSectors)
+            if (!s->pDrvBlock || !s->cMultSectors || s->fATAPI)
                 goto abort_cmd;
             s->cSectorsPerIRQ = s->cMultSectors;
@@ -3677,5 +3679,5 @@
             s->fLBA48 = true;
         case ATA_WRITE_MULTIPLE:
-            if (!s->cMultSectors)
+            if (!s->pDrvBlock || !s->cMultSectors || s->fATAPI)
                 goto abort_cmd;
             s->cSectorsPerIRQ = s->cMultSectors;
@@ -3686,5 +3688,5 @@
         case ATA_READ_DMA:
         case ATA_READ_DMA_WITHOUT_RETRIES:
-            if (!s->pDrvBlock)
+            if (!s->pDrvBlock || s->fATAPI)
                 goto abort_cmd;
             s->cSectorsPerIRQ = ATA_MAX_MULT_SECTORS;
@@ -3696,5 +3698,5 @@
         case ATA_WRITE_DMA:
         case ATA_WRITE_DMA_WITHOUT_RETRIES:
-            if (!s->pDrvBlock)
+            if (!s->pDrvBlock || s->fATAPI)
                 goto abort_cmd;
             s->cSectorsPerIRQ = ATA_MAX_MULT_SECTORS;
