EVT_ACX_OBJECT_PROCESS_REQUEST回调函数 (acxrequest.h)
驱动程序使用EVT_ACX_OBJECT_PROCESS_REQUEST回调来处理 WDFREQUEST。
语法
EVT_ACX_OBJECT_PROCESS_REQUEST EvtAcxObjectProcessRequest;
void EvtAcxObjectProcessRequest(
ACXOBJECT Object,
WDFREQUEST Request
)
{...}
参数
Object
与请求关联的 ACX 对象。 驱动程序通常将此句柄强制转换为此属性所属的 ACX 对象类型。 有关 ACX 对象的详细信息,请参阅 ACX 对象的摘要。
Request
I/O WDFREQUEST 对象。
有关使用 WDF 请求对象的详细信息,请参阅 Creating Framework Request Objects 和 wdfrequest.h header。
返回值
无
备注
示例
示例用法如下所示。
EVT_ACX_OBJECT_PROCESS_REQUEST C_EvtAckMessageCallback;
...
VOID
C_EvtAckMessageCallback(
_In_ WDFOBJECT Object,
_In_ WDFREQUEST Request
)
{
NTSTATUS status = STATUS_NOT_SUPPORTED;
ACXCIRCUIT This = (ACXCIRCUIT)Object;
CAPTURE_CTRL_CIRCUIT_CONTEXT * ctrlCtx = GetCaptureCtrlCircuitContext(This);;
CAPTURE_DEVICE_CONTEXT * ctx = GetCaptureDeviceContext(ctrlCtx->Device);
PAPX_ACK_MESSAGE args = nullptr;
ULONG argsCb = sizeof(APX_ACK_MESSAGE);
PLIST_ENTRY le = nullptr;
PAPX_SYNC_MESSAGE message = nullptr;
ACX_REQUEST_PARAMETERS params;
PAGED_CODE();
//
// Get request parameters.
//
ACX_REQUEST_PARAMETERS_INIT(¶ms);
AcxRequestGetParameters(Request, ¶ms);
ASSERT(params.Type == AcxRequestTypeMethod);
ASSERT(params.Parameters.Method.Verb == AcxMethodVerbSend);
ASSERT(params.Parameters.Method.ArgsCb >= argsCb);
args = (PAPX_ACK_MESSAGE)params.Parameters.Method.Args;
argsCb = params.Parameters.Method.ArgsCb; // use real value.
if (args->Size != argsCb)
{
status = STATUS_INVALID_PARAMETER;
ASSERT(FALSE);
goto exit;
}
//
// Find the message to ack.
//
KeWaitForSingleObject(&ctx->Lock, Executive, KernelMode, FALSE, NULL);
for (le = ctx->ApxPendingMessages.Flink; le != &ctx->ApxPendingMessages; le = le->Flink)
{
message = CONTAINING_RECORD(le, APX_SYNC_MESSAGE, ListEntry);
if (message->MessageId == args->MessageId)
{
message->Result = args->Result;
KeSetEvent(&message->Event, 0, FALSE);
break;
}
message = nullptr;
}
KeReleaseMutex(&ctx->Lock, FALSE);
if (message)
{
status = STATUS_SUCCESS;
}
else
{
// The pending message must have timeout out and thus got cancelled.
status = STATUS_CANCELLED;
}
exit:
WdfRequestComplete(Request, status);
}
ACX 要求
最低 ACX 版本: 1.0
有关 ACX 版本的详细信息,请参阅 ACX 版本概述。
要求
要求 | 值 |
---|---|
Header | acxrequest.h |
IRQL | PASSIVE_LEVEL |