Функция VideoPortGetDeviceBase (video.h)
Функция VideoPortGetDeviceBase сопоставляет диапазон памяти устройства или адресов ввода-вывода относительно шины в системное пространство.
Синтаксис
VIDEOPORT_DEPRECATED VIDEOPORT_API PVOID VideoPortGetDeviceBase(
PVOID HwDeviceExtension,
PHYSICAL_ADDRESS IoAddress,
ULONG NumberOfUchars,
UCHAR InIoSpace
);
Параметры
HwDeviceExtension
Указатель на расширение устройства драйвера мини-порта.
IoAddress
Базовый физический адрес сопоставляемого диапазона. Это значение относительно шины можно получить, вызвав VideoPortGetDeviceData, VideoPortGetRegistryParameters или VideoPortGetAccessRanges. В противном случае это значение является предоставленным драйвером базовым адресом по умолчанию для памяти устройства или портов ввода-вывода.
Вы должны успешно запросить диапазон, описанный IoAddress и NumberOfUchars в реестре, с помощью предыдущего вызова VideoPortVerifyAccessRanges или VideoPortGetAccessRanges.
NumberOfUchars
Число байтов, начиная с IoAddress, для сопоставления.
InIoSpace
Расположение диапазона IoAddress . Этот параметр может быть одним из следующих флагов или ORed, совместимым сочетанием этих флагов.
Пометить | Значение |
---|---|
VIDEO_MEMORY_SPACE_DENSE | Является устаревшей. |
VIDEO_MEMORY_SPACE_IO | Диапазон адресов находится в пространстве ввода-вывода, а не в памяти. |
VIDEO_MEMORY_SPACE_MEMORY | Диапазон адресов находится в пространстве памяти, а не в пространстве ввода-вывода. |
VIDEO_MEMORY_SPACE_P6CACHE | Процессор объединяет последовательность операций записи, отправляет их в строку кэша, а затем очищает кэш. Этот флаг имеет смысл только в том случае, если VIDEO_MEMORY_SPACE_IO не задан. Обозначает видеопамять как объединенную запись (WC). Сведения о кэшировании WC см. в статье о комбинировании памяти для записи в драйверах видео минипорта . |
Возвращаемое значение
В случае успешного выполнения VideoPortGetDeviceBase возвращает базовый виртуальный адрес сопоставления. Если не удается сопоставить указанный диапазон относительно шины, VideoPortGetDeviceBase возвращает значение NULL.
Комментарии
Сопоставленные виртуальные адреса можно передать в функции ПамятиVideoPortReadXxx, VideoPortWriteXxx и VideoPortXxx, за исключением VideoPortMapMemory и VideoPortUnmapMemory.
Необходимо вызвать VideoPortGetDeviceBase из функции HwVidFindAdapter драйвера мини-порта, HwVidQueryDeviceCallback или HwVidQueryNamedValueCallback .
Прежде чем HwVidFindAdapter возвращает элемент управления, необходимо сохранить сопоставленный базовый адрес, возвращенный VideoPortGetDeviceBase , и длину сопоставленного диапазона доступа в расширении устройства адаптера (на который указывает HwDeviceExtension) для последующего использования.
Доступ к сопоставленным адресным пространствам должен соответствовать следующим правилам:
- Если inIoSpace имеет значение VIDEO_MEMORY_SPACE_IO, что означает, что адрес находится в пространстве ввода-вывода, виртуальный адрес, возвращаемый этой функцией, должен передаваться функциям VideoPortReadPortXxx, VideoPortWritePortXxx, VideoPortReadPortBufferXxx и VideoPortWritePortBufferXxx , где xxx — Uchar, Ushort или Ulong.
- Если inIoSpace имеет VIDEO_MEMORY_SPACE_MEMORY, что означает, что адрес находится не в пространстве ввода-вывода, а в пространстве памяти, виртуальный адрес, возвращаемый этой функцией, должен передаваться функциям VideoPortReadRegisterXxx, VideoPortWriteRegisterXxx, VideoPortReadRegisterBufferXxx и VideoPortWriteRegisterBufferXxx , где xxx — Uchar, Ushort или Ulong.
- Драйвер не должен обращаться к адресам, которые находятся за пределами диапазона, разделенного NumberOfUchars.
Каждое устройство отображения универсальной архитектуры памяти (UMA) использует буфер кадров, расположенный в main памяти, а не на шине PCI. В этом случае не вызывайте VideoPortMapMemory для сопоставления буфера кадров. Чтобы сопоставить буфер кадров UMA с системным пространством, вызовите MmMapIoSpace.
Если драйвер мини-порта не поддерживает адаптер, для которого сопоставлен логический диапазон, ему необходимо выполнить два шага, прежде чем он вернет управление функцией DriverEntry : вызовите VideoPortFreeDeviceBase , чтобы отменить сопоставление ранее сопоставленного диапазона из системного пространства, и вызов videoPortGetAccessRanges или VideoPortVerifyAccessRanges , чтобы освободить свои утверждения в диапазоне в реестре.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно в Windows 2000 и более поздних версиях операционных систем Windows. |
Целевая платформа | Персональный компьютер |
Верхняя часть | video.h (включая Video.h) |
Библиотека | Videoprt.lib |
DLL | Videoprt.sys |
IRQL | PASSIVE_LEVEL |