Функция 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 , где xxxUchar, Ushort или Ulong.
  • Если inIoSpace имеет VIDEO_MEMORY_SPACE_MEMORY, что означает, что адрес находится не в пространстве ввода-вывода, а в пространстве памяти, виртуальный адрес, возвращаемый этой функцией, должен передаваться функциям VideoPortReadRegisterXxx, VideoPortWriteRegisterXxx, VideoPortReadRegisterBufferXxx и VideoPortWriteRegisterBufferXxx , где xxxUchar, Ushort или Ulong.
  • Драйвер не должен обращаться к адресам, которые находятся за пределами диапазона, разделенного NumberOfUchars.
VideoPortGetDeviceBase и VideoPortMapMemory могут вызываться драйвером видео минипорта для сопоставления видеопамяти с виртуальным адресным пространством. При вызове обеих этих функций для сопоставления одних и того же физического адреса или при повторном вызове одной из функций для сопоставления одинаковых физических адресов может быть несколько виртуальных диапазонов адресов, которые сопоставляют один и тот же диапазон физических адресов. В этом случае необходимо задать для флага VIDEO_MEMORY_SPACE_P6CACHE параметра InIoSpace одинаковое значение во всех этих вызовах.

Каждое устройство отображения универсальной архитектуры памяти (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

См. также раздел

HwVidFindAdapter

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VideoPortCompareMemory

VideoPortFreeDeviceBase

VideoPortGetAccessRanges

VideoPortGetDeviceData

VideoPortGetRegistryParameters

VideoPortMoveMemory

VideoPortVerifyAccessRanges

VideoPortZeroDeviceMemory

VideoPortZeroMemory