В Windows 11 для дисков отведено двадцать шесть букв и первые две система до сих пор придерживает для устройства, которое в серийные компьютеры перестали ставить где-то в середине нулевых. Любой ребенок, впервые открывший «Этот компьютер», рано или поздно спрашивает «а где A и B?», взрослый рядом отвечает одним словом «дискеты» и на этом разговор обычно заканчивается, хотя вопрос был хороший и заслуживал большего.

Вместе с буквами в системе лежит и фраза «Вставьте диск в устройство», к которой Windows сама дописывает в кавычках название вроде «Съемный диск (A:)». Она переведена на все языки интерфейса и готова выскочить в окошке, как только кто-нибудь даст ей повод, а те, кто застал дисководы, выучили ее примерно тогда же, когда таблицу умножения. Достаточно было промахнуться мышкой по значку «Диск 3,5 (A:)», чтобы пустой привод зарычал, подумал несколько секунд и вежливо попросил то, чего у тебя в руках в этот момент не было.

Мой первый A: случился в начале 90-х на ЕС-1841 в вычислительном центре маминого НИИ, куда меня пускали по субботам при условии, что я ничего не трогаю. Я трогал: пытался запустить с пятидюймовой дискеты «Принца Персии», забыл опустить рычажок-защелку на приводе и получил «Not ready reading drive A». Следующие десять минут ушли на то, чтобы опытным путем выяснить, чем Abort отличается от Fail, и ответ мне не понравился.

Дисковода у меня давно нет, зато есть SSD, в который вставить ничего нельзя даже при большом желании, и я попробовал усадить его на букву A: и добиться от Windows 11 той самой просьбы в его адрес. Занятие бесполезное ровно настолько, чтобы на него было не жалко выходных. Стенд у меня домашний: Ryzen 7 5700X, система на NVMe Samsung 980 Pro, а подопытным стал второй диск, SATA SSD Samsung 870 EVO на терабайт, где живут фотографии, дистрибутивы и библиотека Steam, все это под Windows 11 Pro 25H2. Но чтобы было понятно, во что именно я полез и чего от системы можно было ждать, сначала придется отмотать лет на пятьдесят назад, потому что буква с двоеточием старше и Windows, и MS-DOS, и самого IBM PC.

Буквы для дисков придумали на мейнфреймах, в конце шестидесятых, когда в системе CP/CMS от IBM у каждого пользователя виртуальной машины появились свои минидиски и обращаться к ним стали по буквам. Гэри Килдалл в 1974 году писал CP/M для первых микрокомпьютеров и взял эту схему почти как есть, а двоеточие после буквы подсмотрел у DEC, где в TOPS-10 им заканчивалось имя любого устройства. Получилось A:, B: и так далее, причем набранная в командной строке буква с двоеточием просто переключала текущий диск, и за следующие полвека в этом месте не поменялось вообще ничего.

Дальше буквы переезжали с платформы на платформу по одной и той же причине. В 1980 году Тим Патерсон из Seattle Computer Products писал свою систему для процессора 8086 и сознательно скопировал у CP/M и вызовы, и повадки, потому что под CP/M уже существовала куча программ и переносить их было проще, когда новая система ведет себя как старая. Microsoft эту систему купила, IBM получила ее под именем PC DOS, и буквы оказались в самом известном компьютере десятилетия уже как готовая привычка, за которую никто специально не голосовал. Это был первый взнос за совместимость и далеко не последний.

Человек в роли привода

IBM PC образца августа 1981 года жесткого диска не имел вообще. Самая дешевая комплектация шла совсем без дисководов, с 16 килобайтами памяти и разъемом под бытовой кассетный магнитофон, а нормальной считалась машина с одним или двумя пятидюймовыми приводами, куда вставлялись дискеты на 160 килобайт. Раскладка сложилась сама собой: в A: живет дискета с системой и программой, в B: дискета с данными, и какой-нибудь текстовый редактор грузился с первой, а тексты складывал на вторую.

Второй дисковод стоил заметных денег и был далеко не у всех, поэтому DOS научилась изображать его самостоятельно. На машине с одним приводом диск B: все равно существовал, только логически, поверх той же железки, и когда программа обращалась к нему, система останавливалась и просила вставить дискету для дисковода B:, а потом точно так же просила вернуть дискету для A:. Копирование одной дискеты на другую превращалось в физкультуру, потому что в память влезал только кусок, и человек в этой схеме работал механизмом смены дисков, самым медленным в компьютере и единственным, который мог обидеться.

Вот отсюда и растет интонация нашей фразы. Система разговаривает с человеком в повелительном наклонении, как с исполнителем, потому что человек в то время был штатной частью подсистемы хранения и без него она просто не работала. Рядом жило и знаменитое «Abort, Retry, Fail?» на случай, когда дискету забыли вставить совсем, и разницу между первым и третьим вариантом большинство пользователей так и не выяснило, потому что выбирать все равно приходилось второй.

Десять мегабайт на третьей букве

В марте 1983 года вышел IBM PC XT с жестким диском на 10 мегабайт и PC DOS 2.0, в которой ради него появились каталоги. Диску досталась буква C: потому что первые две были заняты дисководами, причем заняты обе даже на машине с одним приводом, ведь B: там числилась за тем самым призраком. Третья буква алфавита досталась главному диску по той же логике, по какой достается место в маршрутке, она была первой свободной.

А потом C: начала прорастать во все, до чего дотянулась. Она попала в AUTOEXEC.BAT и CONFIG.SYS, в установщики, в бумажные руководства, в школьные учебники информатики и в голову каждого бухгалтера, откуда ее уже ничем не достать. К началу девяностых написать в программе путь с жестко прошитой C: было примерно так же естественно, как сейчас написать localhost, и вся эта масса кода и привычек стала причиной, по которой занимать A: и B: чем-то кроме дисководов было уже себе дороже.

При этом сама DOS относилась к буквам довольно легкомысленно и раздавала их заново при каждой загрузке, по порядку обнаружения. Сначала шли основные разделы всех жестких дисков, потом логические, потом все остальное, и стоило воткнуть в компьютер второй винчестер, как прежний D: становился E:, а игра, установленная в D:\GAMES, переставала находить саму себя. То есть буква в те годы была ближе к номерку в очереди, чем к имени, кто раньше пришел, тот и C.

Кстати заставить жесткий диск отзываться на букву A: умели уже тогда. В DOS со второй версии была команда ASSIGN, которая перенаправляла обращения с одной буквы на другую, и строчкой ASSIGN A=C лечили установщики, желавшие ставиться только с дискеты и только из первого дисковода. Так что идея моего эксперимента старше многих читателей Хабра, я всего лишь повторяю ее на железе, которое авторам той команды показалось бы фантастикой.

Что порядок букв мог быть другим, показывает Япония. На компьютерах NEC PC-98, которые там долго держали большую часть рынка, своя версия MS-DOS раздавала буквы начиная с устройства, с которого загрузилась, и если система стояла на жестком диске, то именно он и становился A:. Windows вставала туда же, в японском установщике Windows 95 был даже отдельный ключ, чтобы принудительно посадить систему на C:, и миллионы людей жили с винчестером на первой букве, не видя в этом ничего странного. За совместимость с программами IBM PC остальной мир заплатил двумя буквами из двадцати шести, а японцы за свою раскладку платили тем, что перенос софта в обе стороны каждый раз спотыкался на путях.

Дисковод при этом уходил долго и неохотно. Apple убрала его из первого iMac в 1998 году и выслушала за это все положенное, производители PC тянули еще лет пять-семь, а Windows XP до самого конца требовала дискету в совершенно конкретной ситуации: чтобы поставить систему на новый SATA- или RAID-контроллер, нужно было в начале установки нажать F6 и подсунуть драйвер именно на дискете. Оказывалось, что самому современному диску в компьютере для знакомства с системой требовался самый древний, и люди покупали флоппик ради одной операции раз в два года, примерно как держат дома дрель.

Где буква живет сейчас

В линейке Windows NT буквы перестали вычислять при загрузке. Для ядра том называется как-нибудь вроде \Device\HarddiskVolume3, а привычная C: это символическая ссылка в пространстве имен диспетчера объектов, которая на этот том указывает. Раздает и помнит ссылки отдельный драйвер, Mount Manager, а записи он хранит в реестре в ключе HKLM\SYSTEM\MountedDevices, где у каждой буквы есть значение с именем вроде \DosDevices\C: и двоичным идентификатором тома внутри. Заодно там оседает каждая флешка, которую когда-либо втыкали в компьютер, так что ключ со временем превращается в гостевую книгу.

Из этого следует, что буква теперь приклеена к тому и не уезжает, когда в системе появляется еще один диск, а назначить можно почти любую, потому что это просто запись в таблице. Автоматика при этом начинает раздачу с C: и первые две буквы пропускает, оставляя их дисководам, сетевые диски по традиции берут буквы с конца алфавита, но руками занять A: можно, если она свободна. Половина инструкций в интернете при этом уверяет, что нельзя, вторая половина советует не делать так никогда, а в консоли вся операция выглядит примерно так:

diskpart
list volume
rem номер тома свой, корзины тут нет
select volume 3
assign letter=A

Раз буква это всего лишь ссылка, то и обязательной она быть перестала. С Windows 2000 том можно подключить в пустую папку на NTFS вообще без буквы, а на уровне диспетчера объектов перед двоеточием может стоять чуть ли не любой символ, хоть плюс, хоть знак евро, что в конце прошлого года подробно разобрал в своем блоге Райан Липтак. Проводник такие диски показывать отказывается, и латинский алфавит тут держится на привычке и на огромном количестве кода, который проверяет первую букву пути и ничего другого там увидеть не готов.

SSD на первой букве

Пересаживал я весь второй диск: единственный том на нем жил под буквой D: с меткой «Данные». Делал через «Управление дисками»: правой кнопкой по тому, «Изменить букву диска или путь к диску». Буквы A и B стояли в выпадающем списке первыми как ни в чем не бывало, никто их не прятал. На «ОК» система задала ровно один вопрос: «Некоторые программы, использующие буквы дисков, могут работать неправильно. Вы хотите продолжить?». После «Да» том переехал за пару секунд. Предупреждение оказалось не формальностью: Steam тут же решил, что половина игр не установлена, и вернуть их удалось, только заново добавив папку A:\SteamLibrary.

По документации тип диска определяется устройством, а буква на него никак не влияет, так что SSD на A: обязан остаться для системы обычным несъемным томом. Так и вышло. В Проводнике том выглядит совершенно буднично: «Данные (A:)», обычная иконка диска, никакой дискеты. В «Этом компьютере» он встал первым, перед C:, потому что список сортируется по букве. Команда fsutil fsinfo drivetype A: ответила «A: - Несъемный диск», то есть для системы не изменилось ничего, кроме таблички на двери. Перезагрузку буква пережила, а в MountedDevices запись \DosDevices\D: сменилась на \DosDevices\A: с тем же двоичным идентификатором.

У первых двух букв есть как минимум одна настоящая странность, на которую жаловались еще во времена Windows 7 и 8: служба поиска отказывается индексировать тома на A: и B:, потому что по старой памяти считает их дискетами, а дискеты индексировать не положено. Диск при этом может быть хоть терабайтным винчестером, поиску достаточно буквы. Я завел на A: папку с документами и положил туда текстовый файл со словом «шпроты», которое больше нигде на машине не встречается. В дереве расположений в «Параметрах индексирования» диска A: просто нет: C: есть, папки пользователя есть, а первой буквы будто не существует. Через сутки поиск по «шпротам» находил файл только медленным перебором, с зеленой полосой, ползущей по адресной строке. Поиск по-прежнему уверен, что на A: живет дискета, и терабайтом его не переубедить.

Отдельный жанр это программы, которые помнят девяностые лучше самой системы. В старых установщиках и утилитах встречается логика уровня «A: это дисковод, сюда пишем загрузочную дискету», и буква для них весит больше любых сведений о железе. WinRAR и 7-Zip распаковали и запаковали архивы на A: без единого вопроса: они спрашивают у системы тип диска, слышат «несъемный» и больше ничем не интересуются. А вот старый установщик на InstallShield, когда-то ехавший на трех дискетах и разложенный теперь по папкам DISK1–DISK3, запущенный с A:, не стал заглядывать в соседнюю папку и вежливо попросил вставить диск 2. Пришлось перенести его на C:, где он прошел насквозь, ни разу не вспомнив про дискеты.

Есть и совсем дешевый способ получить A: поверх SSD, это команда subst, младшая родственница того самого ASSIGN, которая вешает букву на обычную папку. Для этого опыта том пришлось вернуть на D:, потому что занятую букву subst не отдает. Команда subst A: D:\Distrib\old дала в Проводнике диск «Данные (A:)» с меткой и свободным местом от настоящего тома, то есть подделку видно только по содержимому. По дороге всплыла классическая ловушка: диск, созданный из обычной консоли, не виден из консоли, запущенной от администратора, и наоборот, а перезагрузку subst не переживает вовсе. Переименовать папку система дала спокойно, subst ее не держит. Клик по A: после этого вернул «Нет доступа к A:. Системе не удается найти указанный путь». Никакого «вставьте диск»: Windows прекрасно понимает, что дискеты тут не было и не будет.

Откуда берется окно

Сама фраза появляется в ответ на совершенно конкретное событие: программа обращается к устройству со сменным носителем, носителя внутри нет, и драйвер возвращает статус STATUS_NO_MEDIA_IN_DEVICE с кодом 0xC0000013. Проводник в ответ рисует свое окошко с просьбой вставить диск, а если обращалась обычная программа, которая не попросила систему молчать, окно за нее показывает сама Windows.

Попросить молчать можно вызовом SetErrorMode с флагом SEM_FAILCRITICALERRORS, и тогда программа получит обычный код ошибки и разберется сама. Те, кто про этот вызов забывал, подарили владельцам картридеров времен XP и Vista всплывающее на ровном месте окно «Windows - No Disk» со строчкой «Exception Processing Message c0000013» и набором шестнадцатеричных параметров, которое можно было закрывать по двадцать раз подряд. Картридер с четырьмя пустыми слотами для системы выглядел как четыре дисковода без дискет, и любая программа, решившая пройтись по всем буквам подряд, становилась автором этого спектакля.

С SSD все упирается в одно свойство: несъемный диск не умеет быть на месте и при этом пустым, он либо есть целиком вместе с томом, либо его нет, и тогда буква исчезает вместе с ним, а программа получает сообщение о ненайденном пути. Чтобы система попросила вставить диск в A:, устройство за этой буквой должно назваться сменным и при этом заявить, что внутри пусто, так что вторая половина эксперимента сводится к поиску способа научить SSD притворяться.

Сначала контрольный опыт. Образец нашелся в ящике с проводами: безымянный китайский картридер на четыре слота, под которые Windows сразу раздала четыре буквы. Один слот я пересадил на A:. Сначала пришлось снять галочку «Скрывать пустые диски» в параметрах папок, иначе Windows 11 пустой слот вообще не показывает. Двойной щелчок дал ровно то, что нужно: «Вставьте диск в устройство "USB-накопитель (A:)"». Фраза жива, переведена и только ждет повода.

Дорог к этому я насчитал три, и первая идет через внешний корпус, потому что некоторые USB-мосты представляют диск системе как сменный, и тогда после команды «Извлечь» устройство может остаться в списке с буквой, но уже без носителя. Мой SSD переехал в корпус Orico на мосту JMicron JMS578 и сменным не стал. На вкладке «Политика» в свойствах диска стоит «Быстрое удаление», но это про кэш записи, а не про тип устройства, и fsutil по-прежнему отвечает «Несъемный диск». После «Извлечь» диск исчез из Проводника целиком вместе с буквой, кликать стало не по чему, а dir A: в консоли ответила «Системе не удается найти указанный путь». Мост честно сообщает, что за ним жесткий диск, а не картридер. Прошивку с выставленным битом сменности, которая заставила бы его соврать, под свой корпус я не нашел.

Вторая дорога программная, через драйверы виртуальных дисков, которые умеют создавать устройство любого типа, в том числе сменное и даже дисковод гибких дисков. Файл образа при этом лежит на том самом SSD, так что формально данные с него никуда не уходят. Здесь SSD снова пришлось вернуть на D:, потому что A: понадобилась виртуальному устройству. Первым был ImDisk: imdisk -a -f D:\img\floppy.img -m A: -o fd,rem. Он создал на A: самый настоящий дисковод гибких дисков, но при отключении образа удалял устройство вместе с буквой, так что пустого привода не получалось, а значит, и окна тоже. Сработал старый Virtual Floppy Drive Кена Като: у него есть команда close, которая вынимает образ, оставляя привод на месте. Ради этого пришлось на вечер выключить Secure Boot и включить тестовый режим подписи драйверов, потому что 64-битный драйвер VFD ничем не подписан. Зато после vfd close 0 клик по A: дал «Вставьте диск в устройство "Дисковод гибких дисков (A:)"», и образ, с которого этот диск только что читался, лежал на SSD.

Третья дорога это попросить систему напрямую, потому что окно критической ошибки можно вызвать и самому, передав нужный статус и имя устройства, и Windows послушно нарисует что велено. Хватило пары десятков строк на C:

#include <windows.h>
#include <winternl.h>

typedef NTSTATUS (NTAPI *pNtRaiseHardError)(NTSTATUS, ULONG, ULONG, PULONG_PTR, ULONG, PULONG);

int main(void)
{
    pNtRaiseHardError NtRaiseHardError = (pNtRaiseHardError)
        GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "NtRaiseHardError");

    UNICODE_STRING dev = { 4, 6, (PWSTR)L"A:" };
    ULONG_PTR params[1] = { (ULONG_PTR)&dev };
    ULONG response;

    // 0xC0000013 = STATUS_NO_MEDIA_IN_DEVICE, маска 1: параметр 0 это UNICODE_STRING,
    // 8 = OptionCancelTryContinue
    NtRaiseHardError((NTSTATUS)0xC0000013, 1, 1, params, 8, &response);
    return 0;
}

Windows нарисовала классическое окно «Нет диска» с текстом «Отсутствует диск в устройстве. Вставьте диск в устройство A:» и кнопками «Отмена», «Повторить», «Продолжить». Засчитывать такое как победу я не готов: система просто прочитала вслух то, что я ей продиктовал, и к SSD окно отношения не имеет. Но как доказательство, что механизм критических ошибок со времен XP никуда не делся, получилось наглядно.

За два выходных и примерно двенадцать часов чистого времени окно с буквой A: в Windows 11 я получил тремя способами: от пустого картридера, от виртуального дисковода с образом на SSD и от собственного вызова, который в зачет не идет. Сам SSD к фразе так и не подпустили. Пока он остается SSD, Windows видит в нем несъемный диск на любой букве, и честнее всего это признал USB-корпус, который при извлечении просто исчезал. Ближе всего к цели подобрался Virtual Floppy Drive: буква A:, пустой дисковод и образ, мирно лежащий на SSD. По дороге сломались библиотека Steam, пара ярлыков на рабочем столе, смотревших в D:, и на один вечер Secure Boot, а поиск, похоже, до сих пор считает, что на A: живет дискета.

Sony, которая в начале восьмидесятых вывела дискету на 3,5 дюйма на рынок, свернула ее выпуск в 2011 году, дисководы пропали из корпусов еще раньше, а резерв из двух букв и готовая фраза к ним пережили и носитель, и привод, и завод. Это, пожалуй, самый дешевый налог на совместимость из всех, что платит Windows: две буквы из двадцати шести и одна строчка в ресурсах, которую не жалко держать еще сорок лет на случай, если кто-нибудь принесет коробку с архивом бухгалтерии за девяносто шестой год.

Мне в этой истории больше всего нравится, что ничего из перечисленного никто не проектировал. Буквы взяли у мейнфрейма, потому что так было привычно, третью выдали жесткому диску, потому что она была свободна, а дальше каждое следующее поколение систем платило за право не трогать решение предыдущего и на совещаниях наверняка звучало «давайте пока оставим как есть». Обещанного, как известно, три года ждут, а буква A: ждет свою дискету уже пятый десяток, и я бы на ее месте давно согласился на SSD. Напишите в комментариях, на какой букве живет ваша система и какая самая странная буква доставалась вашим дискам, у меня есть подозрение что коллекция выйдет богаче алфавита.

Комментарии (1)


  1. JBFW
    03.10.2026 18:08

    Еще не очень давно дискеты требовали в налоговой, для сдачи отчетности.

    Все уже пользовались флешками, особо продвинутые отправляли в электронном виде (ну, это отдельные пляски с бубном, ведь нельзя просто так взять и отправить зашифрованный файл /s), а налоговые инспекторы требовали дискету.
    На которую непременно подсаживался вирус-автозагрузчик.