Со времен MS DOS не очень много чего изменилось. Как были устройства так они и есть. Как была идея использование прерываний так она и осталась. Сейчас нельзя напрямую получить доступ к устройствам. Для этого существуют VXD драйвера. Подробнее читайте "Шаг 151 - Что такое VXD". Основывается работа на использовании прерываний. Тут бы я посоветовал, если Вы вообще не знаете ассемблера прочитать шаги от "Шаг 1 - Где взять и установка" до "Шаг 19 - Функция 44H подфункция 08H INT 21H проверка носителя". Если ассемблер Вы знаете, то достаточно "Шаг 19 - Функция 44H подфункция 08H INT 21H проверка носителя". Итак, функция DeviceIoControl описанная в прошлом шаге может нам дать доступ к функциям прерывания INT21H 44H. Для этого нужно использовать код операции VWIN32_DIOC_DOS_IOCTL. То есть мы получаем доступ и функция контроля ввода вывода IOCTL по идеологии похожими на ДОС. Подробнее о IOCTL читайте "Шаг 15 - Что такое IOCTL". Смотрим код:
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
typedef struct DIOCRegs {
DWORD reg_EBX;
DWORD reg_EDX;
DWORD reg_ECX;
DWORD reg_EAX;
DWORD reg_EDI;
DWORD reg_ESI;
DWORD reg_Flags;
} DIOC_REGISTERS;
#define VWIN32_DIOC_DOS_IOCTL 1
void main()
{
HANDLE hDevice;
hDevice = CreateFile("\\\\.\\vwin32", 0, 0, NULL,
0,FILE_FLAG_DELETE_ON_CLOSE, NULL);
if (hDevice != INVALID_HANDLE_VALUE)
{
DWORD dw;
BOOL result;
for (unsigned int x=15;x>0;x--)
{
DIOC_REGISTERS reg;
reg.reg_EAX = 0x8;
reg.reg_EBX = x;
result = DeviceIoControl(hDevice,VWIN32_DIOC_DOS_IOCTL,
®, sizeof(reg), ®, sizeof(reg), &dw, 0);
if (result != 0)
{
cout << x << "Ok - " << reg.reg_EAX << endl;
if (reg.reg_EAX==0)
cout << " removable " << endl;
if (reg.reg_EAX==1)
cout << " not removable" << endl;
if (reg.reg_EAX==0x0F)
cout << " error " << endl;
}
else
{
cout << GetLastError() << endl;
cout << "Error" << endl;
}
}
CloseHandle(hDevice);
}
else cout << "Error Open " << endl;
}
Мы вызываем функцию 08H которая может нам вернуть является ли диск извлекаемым или нет. Подробнее в шаге Функция 44H подфункция 08H INT 21H проверка носителя. А вот и результат.

В отличии от версии 16 разрядной созданной на TASM мы смогли узнать что диск 2 (B) это ERROR и правда у меня он не установлен. А дисков у меня и правда 7.

Диск C или первый жесткий имеет номер 3 а дальше по порядку. Думаю, что теперь смысл этой функции становить понятен. Мы может непосредственно обращаться к драйверам устройств. Для этого нам нужно знать правила, регистры и все прочее. Это оговаривается в документации и спецификациях.