Поделиться через


функция обратного вызова DXGKDDI_STOP_DEVICE_AND_RELEASE_POST_DISPLAY_OWNERSHIP (dispmprt.h)

ОС вызывает функцию драйвера в режиме ядра (KMD) DxgkddiStopDeviceAndReleasePostDisplayOwnership, чтобы запросить, чтобы KMD сбросил устройство отображения и освободить владение текущим устройством самопроверки (POST).

Синтаксис

DXGKDDI_STOP_DEVICE_AND_RELEASE_POST_DISPLAY_OWNERSHIP DxgkddiStopDeviceAndReleasePostDisplayOwnership;

NTSTATUS DxgkddiStopDeviceAndReleasePostDisplayOwnership(
  [in]  PVOID MiniportDeviceContext,
  [in]  D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
  [out] PDXGK_DISPLAY_INFORMATION DisplayInfo
)
{...}

Параметры

[in] MiniportDeviceContext

Дескриптор к блоку контекста, связанному с адаптером отображения. Функция KMD DxgkDdiAddDevice ранее предоставила этот дескриптор подсистеме ядра графики DirectX (Dxgkrnl).

[in] TargetId

Значение D3DDDI_VIDEO_PRESENT_TARGET_ID, указывающее идентификатор текущего видео на адаптере дисплея, к которому подключено устройство отображения. Этот идентификатор может быть для целевого объекта, который был оставлен в текущем состоянии текущей сети (VidPN) во время предыдущего вызова DxgkDdiCommitVidPn.

Дополнительные сведения об использовании параметра TargetId см. в разделе "Примечания".

[out] DisplayInfo

Указатель на DXGK_DISPLAY_INFORMATION структуру, выделенную ОС.

Возвращаемое значение

Возвращает STATUS_SUCCESS, если он выполнен успешно. В противном случае возвращается один из кодов ошибок, определенных в Ntstatus.h. Дополнительные сведения см. в разделе "Примечания".

Замечания

Начиная с Windows 8 (WDDM 1.2), ОС вызывает эту функцию во время остановки операции plug and Play (PnP).

Чтобы указать операционной системе, что эта функция поддерживается, драйвер должен задать nonVGASupport член структуры DXGK_DRIVERCAPS при вызове функции dxgkDdiQueryAdapterInfo.

Допустимые форматы цветов

KMD должен сообщать только 32-разрядный формат цвета. Поэтому член ColorFormat DisplayInfo-должен включать только один из следующих двух форматов D3DDDIFORMAT:

  • D3DDDIFMT_X8R8G8B8
  • D3DDDIFMT_A8R8G8B8

Инициализация целевого объекта представления видео

KmD должен задать элемент DisplayInfo->TargetId целевому идентификатору дисплея, который остается активным. Как правило, этот идентификатор будет значением параметра TargetId, переданного ос драйверу.

Аналогичным образом kmD должен задать элемент DisplayInfo->AcpiId идентификатор ACPI дисплея, который остается активным.

Обязательные шаги kmD

KMD должен выполнить следующие действия, когда вызывается функция DxgkDdiStopDeviceAndReleasePostDisplayOwnership:

  1. Остановите устройство отображения, связанное с целевым объектом видео, указанным параметром TargetId, но должно поддерживать отображение, связанное с этим целевым объектом, на основе и видимым.

  2. Проверьте подключение дисплея, связанного с этим целевым объектом. Если целевой объект не подключен к экрану, KMD должен завершить вызов этой функции и вернуть код ошибки STATUS_NOT_SUPPORTED.

  3. Отключите сигнал для всех остальных дисплеев, подключенных к адаптеру дисплея. Если это невозможно, драйвер должен попытаться разместить пустое изображение на всех остальных дисплеях. Если это невозможно, драйвер должен оставить последнее изображение на экране без изменений.

  4. Сохраните текущий режим отображения в указанном целевом объекте и предоставьте этот режим обратно в ОС в рамках этого вызова функции.

  5. Если драйвер не может поддерживать текущий режим отображения или если целевой объект не является частью активной топологии, драйвер должен выбрать альтернативный активный целевой объект и попытаться сохранить текущее разрешение этого целевого объекта. Если это невозможно, драйвер должен попытаться установить отображение в собственном разрешении или в режиме высокого разрешения. В этом случае разрешение дисплея должно иметь значение не менее 800 x 600 пикселей в D3DDDIFMT_R8G8B8 (24 бита на пиксель) или D3DDDIFMT_X8R8G8B8 (32 bpp) цветовых форматов.

  6. Если целевой объект не активен, драйвер должен попытаться включить целевой объект, предпочтительно внутреннюю панель, если она доступна.

  7. По возможности драйвер должен очистить текущий буфер кадра и отключить аппаратный курсор и все наложения дисплея.

  8. Если это возможно, драйвер должен задать гамма-пандус устройства значениям по умолчанию.

  9. Драйвер должен задать текущий буфер кадров в линейном режиме. Драйвер делает это либо с помощью диапазона swizzle по умолчанию, либо путем отключения режима swizzle.

  10. Драйвер должен сделать текущий буфер кадров доступным для ЦП, сопоставляя текущий буфер кадров линейно в адресное пространство ЦП.

  11. Драйвер должен убедиться, что видимость указанного целевого объекта имеет значение "включено".

После выполнения этих действий KMD необходимо вернуть текущие параметры отображения для устройства. Драйвер возвращает эти сведения, задав элементы структуры DXGK_DISPLAY_INFORMATION, на которую ссылается параметр DisplayInfo.

После остановки устройства эти сведения могут использоваться универсальным драйвером дисплея Windows для управления устройством отображения.

Другие требования

В системах, поддерживающих единый расширяемый интерфейс встроенного ПО (UEFI), базовая система ввода и вывода VGA (BIOS) не существует. Для поддержки операций остановки PnP в этих системах WDDM 1.2 и более поздних версий обеспечивает поддержку сброса устройства POST и получения сведений о его отображении во время операции остановки PnP. Ос делает это путем вызова функции KMD DXgkDdiStopDeviceAndReleasePostDisplayOwnership.

Операция остановки PnP может выполняться в ответ на запросы, такие как диспетчер устройств или во время процесса обновления драйвера.

Начиная с Windows 8 ОС вызывает драйвера DxgkDdiStopDeviceAndReleasePostDisplayOwnership только на устройстве POST во время операции остановки PnP.

Для вызова KMD DxgkCbAcquirePostDisplayOwnership. Однако ОС может по-прежнему вызывать функцию KMD DxgkDdiStopDeviceAndReleasePostDisplayOwnership независимо от того, сделал ли драйвер предыдущий вызов DxgkCbAcquirePostDisplayOwnership.

Если драйвер успешно завершает вызов этой функции, ОС не вызовет функцию KMD DxgkDdiStopDevice. Если драйвер не сможет выполнить вызов этой функции, ОС вызовет DxgkDdiStopDevice, а поведение устройства будет таким же, как и в Windows 7.

В системах, доступных только для UEFI, если kmD завершается сбоем вызова этой функции, отображается черный экран, а драйвер IHV не установлен. Решение для этого сценария — перезагрузка компьютера пользователем.

Дополнительные сведения о том, как эта функция используется в сценариях PnP, см. в разделе Plug and Play (PnP) в WDDM 1.2 и более поздних версиях.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 8 (WDDM 1.2)
минимальный поддерживаемый сервер Windows Server 2012
целевая платформа Настольный
заголовка dispmprt.h
IRQL PASSIVE_LEVEL

См. также

DXGKRNL_INTERFACE

DXGK_DISPLAY_INFORMATION

DXGK_DRIVERCAPS

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiQueryAdapterInfo

DxgkDdiStartDevice

DxgkDdiStopDevice