Начальная точка для кодирования виртуального устройства - PullRequest
8 голосов
/ 19 января 2012

Я хочу написать что-то вроде DaemonTools : программное обеспечение, которое представляется системе как реальное устройство (DVD-ROM в предыдущем примере), но вместо этого считывает данные из файла. Мое требование не ограничивается DVD-ROM. Первая цель - джойстик / геймпад для Windows.

Я веб-разработчик, поэтому я не знаю, откуда я мог бы начать такой проект. Я считаю, что это должно быть написано на C / C ++, но кроме этого, я понятия не имею, с чего начать.

Кто-нибудь пробовал что-то подобное и может дать мне несколько стартовых советов?

1 Ответ

8 голосов
/ 19 января 2012

Большинство драйверов написаны на C или C ++, поэтому, если вы недостаточно хорошо знаете эти языки, вам следует ознакомиться с ними перед началом работы.Программирование Windows использует много интересных комбинаций клавиш, которые могут сбить с толку новичка - например, PVOIDs (typedef void* PVOID) и LPVOIDs (typedef void* far LPVOD;).Вы должны быть довольны указателями как концепциями, так и структурами, потому что вы будете использовать их много.Я бы посоветовал написать действительно простое приложение для win32 в качестве упражнения, чтобы овладеть стилем Windows C / C ++.

Тогда вам следует перейти к Windows Driver Kit - в частности, он понадобится вам для сборки драйверов для Windows.На этом этапе моя способность консультировать действительно зависит от того, что вы делаете, от того, какое у вас есть оборудование и т. Д., А также от того, действительно ли вы используете оборудование.Вам нужно будет знать, как управлять вашим оборудованием, и оттуда вам нужно будет выбрать подходящий способ написания драйвера - есть несколько различных типов драйверов в зависимости от того, что вам нужно для достижения, и это может быть, вы можете подключить кодин из них.

Комплект драйверов для Windows содержит довольно большое количество примеров, включая драйвер, который реализует виртуальный тостер.Это должно дать вам отправную точку.

Я настоятельно рекомендую вам протестировать это на виртуальной машине.Если ваш драйвер успешно собирается, но вызывает ошибку во время выполнения, результат вполне может привести к сбою окон полностью, если вы находитесь в режиме ядра.Поэтому вы избавите себя от некоторой боли, имея возможность вернуть виртуальную машину, если вы ее повредите, а также не нужно ждать перезагрузки системы.Это также упростит отладку, так как могут использоваться виртуальные последовательные кабели.


Это довольно сложное мероприятие, поэтому перед началом я бы более тщательно изучил разработку Windows - проверьте, что вы не можетесначала сделайте это с помощью API-интерфейсов Windows, затем посмотрите на структуру драйвера пользовательского режима, а затем, наконец, и только если вам нужно, посмотрите на материал уровня ядра.

...