VideoPortVerifyAccessRanges 函数 (video.h)
VideoPortVerifyAccessRanges 函数检查注册表中是否有另一个驱动程序已声明对指定的总线相对访问范围和VIDEO_PORT_CONFIG_INFO结构中指定的任何其他硬件资源的所有权。 如果不是,此函数会为调用方声明给定的资源。
语法
VIDEOPORT_DEPRECATED VIDEOPORT_API VP_STATUS VideoPortVerifyAccessRanges(
PVOID HwDeviceExtension,
ULONG NumAccessRanges,
[in, optional] PVIDEO_ACCESS_RANGE AccessRanges
);
参数
HwDeviceExtension
指向微型端口驱动程序的设备扩展的指针。
NumAccessRanges
指定 AccessRanges 数组中的元素数或零。
[in, optional] AccessRanges
指向微型端口驱动程序的访问范围数组的指针,或 NULL。 此数组中的每个 VIDEO_ACCESS_RANGE 类型元素指定设备内存、I/O 端口或适配器的注册地址的总线相对范围。
返回值
VideoPortVerifyAccessRanges 返回以下值之一:
返回代码 | 说明 |
---|---|
ERROR_INVALID_PARAMETER | 发生错误或发现冲突;也就是说,另一个驱动程序已经为其设备声明了一个或多个给定硬件资源。 |
NO_ERROR | 给定的 AccessRanges 有效,并且已声明供调用方使用。 |
注解
每个视频微型端口驱动程序都必须调用 VideoPortVerifyAccessRanges,或者在驱动程序 (和系统) 初始化过程中尝试访问视频适配器之前,使用 VideoPortGetAccessRanges 返回的访问范围。
VideoPortVerifyAccessRanges 只能由微型端口驱动程序的 HwVidFindAdapter 函数调用。
每个视频微型端口驱动程序都必须为其设备定义相对于总线的访问范围,在驱动程序的头文件或代码中或堆栈上静态分配的内存。 大多数微型端口驱动程序在堆栈上设置其视频访问范围,但使用电脑标准地址范围的视频内存的驱动程序(如 VGA 兼容 SVGA 微型端口驱动程序)除外。
HwVidFindAdapter 函数应尝试通过调用 VideoPortGetAccessRanges 或通过调用 VideoPortGetDeviceData 或 VideoPortGetRegistryParameters 来获取相对于总线的访问范围信息。 如果 HwVidFindAdapter 无法获取此信息,微型端口驱动程序应具有一组相对于总线的访问范围的默认值。
如果微型端口驱动程序的访问范围可在外部配置,则安装程序在注册表中为适配器设置访问范围。 此类微型端口驱动程序的 HwVidFindAdapter 函数可以使用处理从注册表检索到的信息的微型端口驱动程序提供的 HwVidQueryNamedValueCallback 函数调用 VideoPortGetRegistryParameters。
HwVidFindAdapter 不得将任何访问范围地址传递给 VideoPortGetDeviceBase ,除非它首先调用 VideoPortVerifyAccessRanges 或 VideoPortGetAccessRanges ,并且相应的函数返回NO_ERROR。
如果VIDEO_PORT_CONFIG_INFO中的初始 AccessRanges 规范或值(例如中断向量)导致其返回指示另一个驱动程序已声明资源 () ERROR_XXX,则可以再次调用 VideoPortVerifyAccessRanges。
如果 VideoPortVerifyAccessRanges 返回NO_ERROR,则对同一适配器的后续调用将覆盖微型端口驱动程序对注册表中该适配器的资源的声明。
请注意,微型端口驱动程序无法与其视频适配器通信,除非将 VideoPortGetDeviceBase 返回的映射地址与 VideoPortRead/WriteXxx 函数配合使用。
如果 HwVidFindAdapter 函数声明了适配器的总线相对访问范围和可能的其他硬件资源,但随后确定它不支持适配器,则微型端口驱动程序必须通过调用 VideoPortVerifyAccessRanges 或 VideoPortGetAccessRanges ( NumAccessRanges 设置为零且 AccessRanges 设置为 NULL)来放弃对注册表中的硬件资源的声明。
若要放弃微型端口驱动程序不再使用的声明访问范围的子集的声明,请执行以下操作:
- 修改适配器的 AccessRanges 规范,使描述要释放的范围的每个元素仍将 RangeStart 设置为声明范围的总线相对基数,但 RangeLength 重置为零。
- 使用此修改后的 AccessRanges 数组调用 VideoPortVerifyAccessRanges。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 适用于 Windows 2000 及更高版本的 Windows 操作系统。 |
目标平台 | 桌面 |
标头 | video.h (包括 Video.h) |
Library | Videoprt.lib |
DLL | Videoprt.sys |
IRQL | PASSIVE_LEVEL |