📄 basetopo.cpp
字号:
Arguments:
PropertyRequest - property request structure
Return Value:
NT status code.
--*/
{
PAGED_CODE();
DPF_ENTER(("[CMiniportTopologyMSVAD::PropertyHandlerCpuResources]"));
NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST;
if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET)
{
ntStatus = ValidatePropertyParams(PropertyRequest, sizeof(ULONG));
if (NT_SUCCESS(ntStatus))
{
*(PLONG(PropertyRequest->Value)) = KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU;
PropertyRequest->ValueSize = sizeof(LONG);
}
}
else if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT)
{
ntStatus =
PropertyHandler_BasicSupport
(
PropertyRequest,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
VT_ILLEGAL
);
}
return ntStatus;
} // PropertyHandlerCpuResources
//=============================================================================
NTSTATUS
CMiniportTopologyMSVAD::PropertyHandlerGeneric
(
IN PPCPROPERTY_REQUEST PropertyRequest
)
/*++
Routine Description:
Handles all properties for this miniport.
Arguments:
PropertyRequest - property request structure
Return Value:
NT status code.
--*/
{
PAGED_CODE();
NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST;
switch (PropertyRequest->PropertyItem->Id)
{
case KSPROPERTY_AUDIO_VOLUMELEVEL:
ntStatus = PropertyHandlerVolume(PropertyRequest);
break;
case KSPROPERTY_AUDIO_CPU_RESOURCES:
ntStatus = PropertyHandlerCpuResources(PropertyRequest);
break;
case KSPROPERTY_AUDIO_MUTE:
ntStatus = PropertyHandlerMute(PropertyRequest);
break;
case KSPROPERTY_AUDIO_MUX_SOURCE:
ntStatus = PropertyHandlerMuxSource(PropertyRequest);
break;
default:
DPF(D_TERSE, ("[PropertyHandlerGeneric: Invalid Device Request]"));
}
return ntStatus;
} // PropertyHandlerGeneric
//=============================================================================
NTSTATUS
CMiniportTopologyMSVAD::PropertyHandlerMute
(
IN PPCPROPERTY_REQUEST PropertyRequest
)
/*++
Routine Description:
Property handler for KSPROPERTY_AUDIO_MUTE
Arguments:
PropertyRequest - property request structure
Return Value:
NT status code.
--*/
{
PAGED_CODE();
DPF_ENTER(("[CMiniportTopologyMSVAD::PropertyHandlerMute]"));
NTSTATUS ntStatus;
LONG lChannel;
PBOOL pfMute;
if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT)
{
ntStatus =
PropertyHandler_BasicSupport
(
PropertyRequest,
KSPROPERTY_TYPE_ALL,
VT_BOOL
);
}
else
{
ntStatus =
ValidatePropertyParams
(
PropertyRequest,
sizeof(BOOL),
sizeof(LONG)
);
if (NT_SUCCESS(ntStatus))
{
lChannel = * PLONG (PropertyRequest->Instance);
pfMute = PBOOL (PropertyRequest->Value);
if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET)
{
*pfMute =
m_AdapterCommon->MixerMuteRead
(
PropertyRequest->Node
);
PropertyRequest->ValueSize = sizeof(BOOL);
ntStatus = STATUS_SUCCESS;
}
else if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET)
{
m_AdapterCommon->MixerMuteWrite
(
PropertyRequest->Node,
*pfMute
);
ntStatus = STATUS_SUCCESS;
}
}
else
{
DPF(D_TERSE, ("[PropertyHandlerMute - Invalid parameter]"));
ntStatus = STATUS_INVALID_PARAMETER;
}
}
return ntStatus;
} // PropertyHandlerMute
//=============================================================================
NTSTATUS
CMiniportTopologyMSVAD::PropertyHandlerMuxSource
(
IN PPCPROPERTY_REQUEST PropertyRequest
)
/*++
Routine Description:
PropertyHandler for KSPROPERTY_AUDIO_MUX_SOURCE.
Arguments:
PropertyRequest - property request structure
Return Value:
NT status code.
--*/
{
PAGED_CODE();
DPF_ENTER(("[CMiniportTopologyMSVAD::PropertyHandlerMuxSource]"));
NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST;
//
// Validate node
// This property is only valid for WAVEIN_MUX node.
//
// TODO if (WAVEIN_MUX == PropertyRequest->Node)
{
if (PropertyRequest->ValueSize >= sizeof(ULONG))
{
PULONG pulMuxValue = PULONG(PropertyRequest->Value);
if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET)
{
*pulMuxValue = m_AdapterCommon->MixerMuxRead();
PropertyRequest->ValueSize = sizeof(ULONG);
ntStatus = STATUS_SUCCESS;
}
else if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET)
{
m_AdapterCommon->MixerMuxWrite(*pulMuxValue);
ntStatus = STATUS_SUCCESS;
}
else if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT)
{
ntStatus =
PropertyHandler_BasicSupport
(
PropertyRequest,
KSPROPERTY_TYPE_ALL,
VT_I4
);
}
}
else
{
DPF(D_TERSE, ("[PropertyHandlerMuxSource - Invalid parameter]"));
ntStatus = STATUS_INVALID_PARAMETER;
}
}
return ntStatus;
} // PropertyHandlerMuxSource
//=============================================================================
NTSTATUS
CMiniportTopologyMSVAD::PropertyHandlerVolume
(
IN PPCPROPERTY_REQUEST PropertyRequest
)
/*++
Routine Description:
Property handler for KSPROPERTY_AUDIO_VOLUMELEVEL
Arguments:
PropertyRequest - property request structure
Return Value:
NT status code.
--*/
{
PAGED_CODE();
DPF_ENTER(("[CMiniportTopologyMSVAD::PropertyHandlerVolume]"));
NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST;
LONG lChannel;
PULONG pulVolume;
if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT)
{
ntStatus = PropertyHandlerBasicSupportVolume(PropertyRequest);
}
else
{
ntStatus =
ValidatePropertyParams
(
PropertyRequest,
sizeof(ULONG),
sizeof(KSNODEPROPERTY_AUDIO_CHANNEL)
);
if (NT_SUCCESS(ntStatus))
{
lChannel = * (PLONG (PropertyRequest->Instance));
pulVolume = PULONG (PropertyRequest->Value);
if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET)
{
*pulVolume =
m_AdapterCommon->MixerVolumeRead
(
PropertyRequest->Node,
lChannel
);
PropertyRequest->ValueSize = sizeof(ULONG);
ntStatus = STATUS_SUCCESS;
}
else if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET)
{
m_AdapterCommon->MixerVolumeWrite
(
PropertyRequest->Node,
lChannel,
*pulVolume
);
ntStatus = STATUS_SUCCESS;
}
}
else
{
DPF(D_TERSE, ("[PropertyHandlerVolume - Invalid parameter]"));
ntStatus = STATUS_INVALID_PARAMETER;
}
}
return ntStatus;
} // PropertyHandlerVolume
#pragma code_seg()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -