How to write Microsoft Audio Compression Manager Codec (Installable Driver)

Создание проекта

Для начала разработки кодека создайте в MS Visual Studio проект типа DLL.

Структура кодека(драйвера)

Инстоллируемый драйвер это бинарный файл, который экспортирует вызов DriverProc.
В DriverProc приходят все сообщения, которые ACM посылает кодеку.
Рекомендуется в этой подпрограмме не размещать какой-либо код помимо switch с вызовами к сервисным функциям кодека.
LRESULT WINAPI DriverProc(args)
{
	switch(uMsg)
	{
		case MSG_XXX:
			return ServiceRoutine_XXX(args);
		break;
		case MSG_YYY:
			ServiceRoutine_YYY(args);
		break;
		...
	}
	return DefDriverProc(args);
}
Также драйвер должен реализовывать поток(Thread) и "очередь запросов на обработку данных", в случае, если Вы планируете поддерживать асинхронный режим работы с драйвером.

Сообщения(windows messages) ACM для кодека(драйвера)

Стандартные сообщения инстоллируемого драйвера

О них достаточно подробно написано в MSDN. Дублировать эту информацию я не буду.

Специфические для ACM сообщения

Эти сообщения начинаются со значения 0x6000. В заголовках они не описаны (кроме 2х базовых).

Взаимодействие кодека и ACM

Загрузка и выгрузка кодека происходит стандартно, как для любого инстоллируемого драйвера.
Между этими "стандартными" процедурами есть стадии специфические для ACM.
  1. ACM запрашивает информацию о кодеке
  2. ACM запрашивает информацию о форматах, по числу указанному в (1)
  3. ACM запрашивает информацию о фильтрах, по числу указанному в (1)
Эта информация будет использоваться в ответах на запросы приложения на перечисление кодеков, форматов, тэгов форматов, фильтров, НО уже БЕЗ обращения к драйверу т.к. ACM кэширует у себя эту информацию.
В большинстве случаев возвращать какое-либо значение после выполнения запроса на обработку сообщения не требуется, за исключением случаев, когда необходимо вернуть код ошибки.

Хэндлы

Выделением хэндлов занимается ACM и передает в драйвер при обращениях, а драйвер лишь использует их для идентификации внутренних сущностей.

Пример - код ACM Dummy Codec

В этом проекте Вы найдёте заголовок с основными сообщениями из диапазона ACM User Messages и простые обработчики этих сообщений в теле DriverProc
Скачать код ACM Dummy Codec версии 1.0 ( )