UsePositionLock
Значение реестра UsePositionLock изменяет способ сериализации операций ввода-вывода в PortCls. Включение этого параметра может быть полезно, если звуковой драйвер страдает от сбоев, которые связаны с глобальной блокировкой устройства, которую portcls использует для сериализации. Имейте в виду, что при включении UsePositionLock аудиодрайв будет применять сериализацию между перечисленными ниже обратными вызовами и другими обратными вызовами свойств (при необходимости). Этот флаг не включен по умолчанию. Прежде чем включить его, обязательно проверьте водителя на наличие любых условий гонки между обратными вызовами вашего водителя.
Используйте следующий параметр INF, чтобы включить это поведение.
[MyAudioDevice.AddReg]
HKR, DispatchSettings, UsePositionLock, 3, 01, 00, 00, 00
Если это значение равно 1 или выше, portcls использует блокировку позиции потоковой передачи для сериализации обратных вызовов, перечисленных ниже. Если она отсутствует или имеет нулевое значение, по умолчанию используется глобальная блокировка устройства. Это значение считывается при первом добавлении устройства.
Этот параметр INF будет храниться в экземпляре устройства в реестре, путь которого содержит GUID носителя {4d36e96c-e325-11ce-bfc1-08002be10318}.
Этот параметр INF создает значение реестра, содержащее GUID носителя {4d36e96c-e325-11ce-bfc1-08002be10318}, включающее экземпляр звукового устройства.
Параметр UsePositionLock поддерживается только в фильтрах WaveRT и топологии. Portcls считывает это значение реестра во время добавления устройства, и параметр сохраняется до тех пор, пока не будет удален объект функционального устройства (FDO).
Если portcls обнаруживает, что этот флаг включен, он не сериализует следующие свойства с глобальной блокировкой устройства.
{KSPROPSETID_RtAudio, KSPROPERTY_RTAUDIO_GETREADPACKET}
{KSPROPSETID_RtAudio, KSPROPERTY_RTAUDIO_SETWRITEPACKET}
{KSPROPSETID_RtAudio, KSPROPERTY_RTAUDIO_PRESENTATION_POSITION}
{KSPROPSETID_RtAudio, KSPROPERTY_RTAUDIO_PACKETCOUNT}
{KSPROPSETID_Audio, KSPROPERTY_AUDIO_POSITIONEX}
Это означает, что обратные вызовы следующего мини-порта не сериализуются с другими запросами свойств (включая запросы set-state).