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


Обновления для IddCx версии 1.7 и более поздних версий

На этой странице описываются изменения, внесенные в IddCx 1.7. В Windows 10 версии 1803 и более поздних версиях можно запустить один двоичный файл драйвера непрямого отображения (IDD), созданный для iddCx 1.7, с помощью проверок среды выполнения, чтобы проверить, доступны ли изменения DDI в IddCx 1.7 в этой системе. Дополнительные сведения см. в статье о создании драйвера WDF для нескольких версий Windows .

Изменения IddCx 1.7 делятся на следующие категории:

  • Обновлена версия IddCxGetVersion (для консоли и удаленного доступа). Полный список сведений о версиях, связанных с IddCx, см . в версиях IddCx.
  • Добавлен улучшенный DDI курсора мыши (доступен для консоли и удаленного управления, но полезен только при удаленном доступе).
  • Флаг адаптера IDDCX_ADAPTER_FLAGS_CAN_USE_MOVE_REGIONS устарел (консоль и удалённый доступ).

Обновленная версия IddCxGetVersion

Версия IddCx, возвращенная IddCxGetVersion в Windows Server 2022, была обновлена до IDDCX_VERSION_IRON (0x1700).

Обновленный курсор мыши для удаленных драйверов

Удаленные идентификаторы в версиях IddCx до 1.7, получают обновления мыши только для процедурного перемещения курсора. Процедурное перемещение курсора — это изменение позиции, вызванное вызовом API из приложения или ОС на сервере, а не вводом мыши, внедренным в удаленный сеанс из удаленного клиента. Это приводит к некоторым проблемам, уникальным для удаленных сеансов. Рассмотрим пример.

  1. В IddCx 1.6 и более ранних версиях удаленный драйвер не может сказать, установил ли этот вызов API положение мыши на одну и ту же позицию дважды.
  2. Изменение фигуры курсора или видимости невозможно активировать без допустимой позиции. Это не проблема для идентификаторов консоли. Однако для удаленных драйверов, если не было каких-либо допустимых процедурных изменений позиции, DDI придется дать значение позиции, которое вызовет прыжок курсора в клиенте.

Для решения этих проблем были внесены следующие изменения, начиная с IddCx 1.7.

Флаг IDDCX_ADAPTER_FLAGS_REMOTE_ALL_CURSOR_POSITION был добавлен.

Флаг адаптера IDDCX_ADAPTER_FLAGS_REMOTE_ALL_CURSOR_POSITION добавлен в IDDCX_ADAPTER_FLAGS , чтобы разрешить удаленным драйверам получать все обновления положения мыши. Этот флаг позволяет удаленному драйверу указывать на адаптере, что он хочет получать все изменения положения курсора, а не только процедурные перемещения. Этот флаг действителен только в сочетании с IDDCX_ADAPTER_FLAGS_REMOTE_SESSION_DRIVER. IddCxAdapterInitAsync завершится ошибкой, если IDDCX_ADAPTER_FLAGS_REMOTE_ALL_CURSOR_POSITION задан без IDDCX_ADAPTER_FLAGS_REMOTE_SESSION_DRIVER.

DDI IddCxMonitorQueryHardwareCursor2 DDI добавлен для положения курсора

DDI IddCxMonitorQueryHardwareCursor2 предоставляет сведения о положении курсора. Этот DDI возвращает структуру IDARG_OUT_QUERY_HWCURSOR2. Как удаленные, так и консольные драйверы могут вызывать этот DDI, но сведения в структуре IDARG_OUT_QUERY_HWCURSOR2 не очень важны для драйверов консоли.

Структура IDARG_OUT_QUERY_HWCURSOR2 возвращает следующие дополнительные сведения о курсоре:

  • Идентификатор позиции (PositionId)

    До iddCx 1.7 курсор DDI использует идентификатор фигуры , чтобы драйвер знал, изменилась ли фигура с момента последнего обновления. Начиная с IddCx 1.7, добавлен идентификатор позиции. Значение идентификатора позиции изменяется, если сообщалось о новой позиции курсора, даже если координаты X и Y новой позиции совпадают со старыми.

  • Флаг валидности позиции (PositionValid)

    PositionValid указывает драйверу, является ли положение курсора в структуре сведений о курсоре допустимым. Этот допустимый флаг охватывает поля X, Y и PositionId . Если этот флаг не задан, нельзя использовать поля X, Y и PositionId .

Флаг IDDCX_ADAPTER_FLAGS_CAN_USE_MOVE_REGIONS устаревший (для консоли и удаленного использования)

Из-за изменений в отрисовке рабочего стола, начиная с IddCx 1.7 области перемещения больше не будут предоставляться в момент захвата кадра. Вместо этого список грязных прямоугольников, предоставленный во время захвата кадра, содержит все измененные области изображения, и IDDCX_METADATA. MoveRegionCount всегда будет равен нулю.

Драйверы по-прежнему могут задать флаг IDDCX_ADAPTER_FLAGS_CAN_USE_MOVE_REGIONS для IddCx 1.7 и выше, но он не будет иметь эффекта. Если драйвер предназначен для работы в системах до версии IddCx 1.7 и устанавливает флаг, этот драйвер должен иметь логику для обработки переносов; в противном случае пользователи увидят визуальные проблемы при запуске в системах до версии IddCx 1.7.