Sebt писал(а):
А как реализуется обмен сообщениями? Я уловил вашу аналогию с почтовым ящиком, идея очень интересно звучит, мне уже чисто из любопытства интересно стало как это) Получается создается некий дополнительный буфер для каждого нового процесса? И все равно не могу себе представить как именно обращаясь к драйверу мы сможем запросить чтото конкретное сделать. Поидее ведь нужно заранее знать что он может.
Любое сообщение должно состоять из кода (или типа) сообщения и последующих за ним данных, специфичных для данного сообщения. Соответственно для каждого типа сообщений должен быть заранее предопределён формат данных и их общий размер.
Возможности драйвера можно определять его дескриптором, который драйвер сообщает системе при своём запуске. В нём драйвер указывает тип устройства, класс, производителя, поддерживаемые функции, и т.д.
Если устройство стандартное, то набор и формат поддерживаемых сообщений определён операционной системой. В таком случае система самостоятельно сможет работать с устройством. Примером таких устройств являются дисковые накопители, HID-устройства.
Если устройство нестандартное, то система с ним сама работать не может (и не работает). Но приложение, которое должно работать с устройством, может узнать о его наличии в системе через системный механизм энумерации устройств. В этом случае формат сообщений закрыт для системы и поддерживается только на уровне соглашения между драйвером и прикладным ПО, работающим с этим драйвером. Примером таких устройств являются телевизионные тюнеры.