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


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

На этой странице описаны изменения, внесенные в IddCx 1.7. Двоичный файл драйвера непрямого отображения (IDD), созданный для IddCx 1.7, может выполняться в Windows 10 версии 1803 и выше с помощью проверок среды выполнения, чтобы убедиться, что изменения 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.

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 области перемещения больше не будут предоставляться во время получения кадра. Вместо этого список грязное rects, предоставляемый в момент получения, содержит все измененные области изображения и IDDCX_METADATA.MoveRegionCount всегда будет иметь нулевое значение.

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