EVT_ACX_AUDIOMODULE_PROCESSCOMMAND fonction de rappel (acxelements.h)
Le rappel EVT_ACX_AUDIOMODULE_PROCESSCOMMAND indique au pilote de traiter une commande pour un élément de module audio.
Syntaxe
EVT_ACX_AUDIOMODULE_PROCESSCOMMAND EvtAcxAudiomoduleProcesscommand;
NTSTATUS EvtAcxAudiomoduleProcesscommand(
ACXAUDIOMODULE AudioModule,
PVOID InBuffer,
ULONG InBufferCb,
PVOID OutBuffer,
PULONG OutBufferCb
)
{...}
Paramètres
AudioModule
Objet ACXAUDIOMODULE. Pour plus d’informations sur les objets ACX, consultez Résumé des objets ACX.
InBuffer
Pointeur vers la mémoire tampon d’entrée.
InBufferCb
Taille de la mémoire tampon d’entrée en nombre d’octets.
OutBuffer
Pointeur vers la mémoire tampon de sortie.
OutBufferCb
Taille de la mémoire tampon de sortie en nombre d’octets.
Valeur retournée
Retourne STATUS_SUCCESS
si l’appel a réussi. Sinon, elle retourne un code d’erreur approprié. Pour plus d’informations, consultez Utilisation de valeurs NTSTATUS.
Remarques
Exemple
L’exemple d’utilisation est illustré ci-dessous.
EVT_ACX_AUDIOMODULE_PROCESSCOMMAND CodecR_EvtProcessCommand0;
NTSTATUS
CodecR_EvtProcessCommand0(
_In_ ACXAUDIOMODULE AudioModule,
_In_ PVOID InBuffer,
_In_ ULONG InBufferCb,
_In_ PVOID OutBuffer,
_Inout_ PULONG OutBufferCb
)
{
NTSTATUS status = STATUS_SUCCESS;
BOOL fNewValue = FALSE;
PVOID currentValue;
PVOID inBuffer = NULL;
ULONG inBufferCb = 0;
PCODEC_AUDIOMODULE0_CONTEXT audioModuleCtx;
AUDIOMODULE_PARAMETER_INFO * parameterInfo = NULL;
AUDIOMODULE_CUSTOM_COMMAND * command = NULL;
PAGED_CODE();
audioModuleCtx = GetCodecAudioModule0Context(AudioModule);
if (audioModuleCtx == NULL)
{
ASSERT(FALSE); // this should not happen.
status = STATUS_INTERNAL_ERROR;
goto exit;
}
//
// Basic parameter validation (module specific).
//
if (InBuffer == NULL || InBufferCb == 0)
{
return STATUS_INVALID_PARAMETER;
}
if (InBufferCb < sizeof(AUDIOMODULE_CUSTOM_COMMAND))
{
return STATUS_INVALID_PARAMETER;
}
command = (AUDIOMODULE_CUSTOM_COMMAND*)InBuffer;
if (command->ParameterId >= SIZEOF_ARRAY(AudioModule0_ParameterInfo))
{
return STATUS_INVALID_PARAMETER;
}
//
// Validate the parameter referenced in the command.
//
switch (command->ParameterId)
{
case AudioModuleParameter1:
currentValue = &audioModuleCtx->Parameter1;
parameterInfo = &AudioModule0_ParameterInfo[AudioModuleParameter1];
break;
case AudioModuleParameter2:
currentValue = &audioModuleCtx->Parameter2;
parameterInfo = &AudioModule0_ParameterInfo[AudioModuleParameter2];
break;
default:
status = STATUS_INVALID_PARAMETER;
goto exit;
}
//
// Update input buffer ptr/size.
//
inBuffer = (PVOID)((ULONG_PTR)InBuffer + sizeof(AUDIOMODULE_CUSTOM_COMMAND));
inBufferCb = InBufferCb - sizeof(AUDIOMODULE_CUSTOM_COMMAND);
if (inBufferCb == 0)
{
inBuffer = NULL;
}
status = AudioModule_GenericHandler(
command->Verb,
command->ParameterId,
parameterInfo,
currentValue,
inBuffer,
inBufferCb,
OutBuffer,
OutBufferCb,
&fNewValue);
if (!NT_SUCCESS(status))
{
goto exit;
}
if (fNewValue &&
(parameterInfo->Flags & AUDIOMODULE_PARAMETER_FLAG_CHANGE_NOTIFICATION))
{
AUDIOMODULE_CUSTOM_NOTIFICATION customNotification = {0};
customNotification.Type = AudioModuleParameterChanged;
customNotification.ParameterChanged.ParameterId = command->ParameterId;
status = AcxPnpEventGenerateEvent(audioModuleCtx->Event, &customNotification, (USHORT)sizeof(customNotification));
if (!NT_SUCCESS(status))
{
goto exit;
}
}
// Normalize error code.
status = STATUS_SUCCESS;
exit:
return status;
}
Configuration requise pour ACX
Version ACX minimale : 1.0
Pour plus d’informations sur les versions d’ACX, consultez Vue d’ensemble des versions d’ACX.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | acxelements.h |
IRQL | PASSIVE_LEVEL |