UsePositionLock 注册表值更改 PortCls 如何序列化其 I/O。 如果音频驱动程序的故障归因于 portcls 用于序列化的全局设备锁,则启用此设置可能会有所帮助。 请注意,启用 UsePositionLock 时,由音频驱动程序决定在下面列出的回调和其他属性回调(如果需要)之间应用任何序列化。 默认情况下不启用此标志。 在启动设备之前,请确保检查驱动程序的回调函数之间是否存在任何竞争条件。
使用以下 INF 设置启用此行为。
[MyAudioDevice.AddReg]
HKR, DispatchSettings, UsePositionLock, 3, 01, 00, 00, 00
当此值设置为 1 或更高时,portcls 使用流媒体位置锁序列化以下列出的回调。 如果不存在或设置为零,则默认行为是使用全局设备锁。 首次添加设备时,将读取此值。
此 INF 设置将存储在注册表中的设备实例下,其路径包含 {4d36e96c-e325-11ce-bfc1-08002be10318} 的媒体 GUID。
此 INF 设置创建一个注册表值,该值包含 {4d36e96c-e325-11ce-bfc1-08002be10318} 的媒体 GUID,其中包括音频设备的实例。
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}
这意味着以下微型端口的回调函数不进行与其他属性请求(例如设置状态请求)的串行化处理。