Здравствуйте, уважаемые!
Пытаюсь написать драйвер для собственного аудио-адаптера, на котором установлен кодек HDAudio.
В общих чертах, нужен простой WaveRT драйвер с одним лишь wave out интерфейсом, но...
Процесс остановился в самом начале. Создал примитивный WDM "драйвер", где всего лишь три функции.
#pragma code_seg("PAGE")
NTSTATUS StartDevice(
IN PDEVICE_OBJECT DeviceObject, // Device object.
IN PIRP Irp, // IO request packet.
IN PRESOURCELIST ResourceList // List of hardware resources.
)
{
PAGED_CODE ();
ASSERT (DeviceObject);
ASSERT (Irp);
ASSERT (ResourceList);
NTSTATUS ntStatus = STATUS_SUCCESS;
DOUT (DBG_PRINT, ("[StartDevice] Resources count: %d"
, ResourceList->NumberOfEntries()));
return ntStatus;
}
#pragma warning(disable:28152)
#pragma code_seg("PAGE")
NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject)
{
PAGED_CODE ();
DOUT (DBG_PRINT, ("[AddDevice]"));
// Tell portcls (the class driver) to add the device.
return PcAddAdapterDevice (DriverObject,
PhysicalDeviceObject,
(PCPFNSTARTDEVICE)StartDevice,
MAX_MINIPORTS,
0);
}
#pragma code_seg("INIT")
extern "C" DRIVER_INITIALIZE DriverEntry;
extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPathName)
{
PAGED_CODE ();
DOUT (DBG_PRINT, ("[DriverEntry]"));
// Tell the class driver to initialize the driver.
NTSTATUS RetValue = PcInitializeAdapterDriver (DriverObject,
RegistryPathName,
(PDRIVER_ADD_DEVICE)AddDevice);
return RetValue;
}
Набросал к нему простенький INF-файл, в котором в качестве железяки указал аудио-устройство из VirtualBox.
Ну и попытался запустить. Запускается и появляется в списке устройств, однако, ResourceList->NumberOfEntries() == 0!
Вот, собственно, и всё! Дальнейшая разработка невозможна, т.к. без ресурсов я не могу получить доступ к регистрам шины и кодека.
Люди добрые, помогите кто сталкивался?! Почему такое может быть? Примеры рабочих (реальных) INF-файлов изрыл вдоль и поперек.
На их основе написал свой, который, на мой взгляд, должен быть достаточен для запуска — ан нет. Гугол молчит по теме, что не удивительно.
Не знаю даже в какую сторону начать копать. В общем, нужна помощь.
Спасибо!