AVCSTRM_CLOSE
AVCSTRM_CLOSE函数代码关闭指定的流,并释放AVCSTRM_OPEN中分配的任何资源。
I/O 状态块
如果成功, avcstrm.sys将 Irp-IoStatus.Status> 设置为 STATUS_SUCCESS。
可能的错误返回值包括:
错误状态 | 说明 |
---|---|
STATUS_DEVICE_REMOVED | 与 AVCSTRM_READ 操作对应的设备不再存在。 |
STATUS_CANCELLED | 请求无法完成。 |
STATUS_INVALID_PARAMETER | IRP 中指定的参数不正确, |
STATUS_INSUFFICIENT_RESOURCES | 系统资源不足,无法完成请求。 |
STATUS_PENDING | 已收到请求,但需要进一步处理。 I/O 完成例程将处理最终响应。 |
AVC_STREAM_REQUEST_BLOCK输入
SizeOfThisBlock、版本和函数
使用 INIT_AVCSTRM_HEADER 宏初始化这些成员。 在宏的 Request 参数中传递 AVCSTRM_CLOSE 。
AVCStreamContext
指定流上下文 (处理要关闭的流) 。 如果 AVCSTRM_CLOSE 成功返回,则此值不再有效。
以下示例演示如何指定要关闭的流:
pAVCStrmReq = &pStrmExt->AVCStrmReq;
RtlZeroMemory(pAVCStrmReq, sizeof(AVC_STREAM_REQUEST_BLOCK));
INIT_AVCSTRM_HEADER(pAVCStrmReq, AVCSTRM_CLOSE);
pAVCStrmReq->AVCStreamContext = pStrmExt->AVCStreamContext;
Status =
AVCStrmReqSubmitIrpSynch (
pDevExt->pBusDeviceObject,
pStrmExt->pIrpReq,
pAVCStrmReq
);
子单元驱动程序必须首先分配 IRP 和 AVC_STREAM_REQUEST_BLOCK 结构。
接下来,它应使用 INIT_AVCSTRM_HEADER 宏来初始化AVC_STREAM_REQUEST_BLOCK结构,并将 AVCSTRM_CLOSE 作为 Request 参数传递给宏。
接下来,子单元驱动程序将 AVCStreamContext 成员设置为要关闭的流。
若要发送此请求,子单元提交 一个IRP_MJ_INTERNAL_DEVICE_CONTROL IRP,其中 IRP 的 IoControlCode 成员设置为 IOCTL_AVCSTRM_CLASS IRP 的 Argument1 成员设置为描述要发生的关闭操作的AVC_STREAM_REQUEST_BLOCK结构。
子单元驱动程序预期此命令同步完成。 结果立即返回,而不会在 avcstrm.sys中挂起操作。
必须在 IRQL = PASSIVE_LEVEL 调用此函数代码。
注释
此函数在 AVC_STREAM_REQUEST_BLOCK 结构中使用 CommandData 联合的 AVCStreamContext 成员,如下所示。
typedef struct _AVC_STREAM_REQUEST_BLOCK {
ULONG SizeOfThisBlock;
ULONG Version;
AVCSTRM_FUNCTION Function;
.
.
PVOID AVCStreamContext;
.
.
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;
要求
头: 在 avcstrm.h 中声明。 包括 avcstrm.h。