Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Регистрирует событие, которое будет сигнализировать, когда гость записывает в указанный физический адрес гостя.
Important
WHvRegisterPartitionDoorbellEvent не рекомендуется к использованию. Вместо этого используйте WHvCreateNotificationPort порт уведомлений типа WHvNotificationPortTypeDoorbell .
Синтаксис
// Guest physical address
typedef UINT64 WHV_GUEST_PHYSICAL_ADDRESS;
typedef struct WHV_DOORBELL_MATCH_DATA
{
WHV_GUEST_PHYSICAL_ADDRESS GuestAddress;
UINT64 Value;
UINT32 Length;
UINT32 MatchOnValue:1;
UINT32 MatchOnLength:1;
UINT32 Reserved:30;
} WHV_DOORBELL_MATCH_DATA;
HRESULT
WINAPI
WHvRegisterPartitionDoorbellEvent(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ const WHV_DOORBELL_MATCH_DATA* MatchData,
_In_ HANDLE EventHandle
);
Parameters
Partition
Дескриптор объекта секции.
MatchData
Указывает физический адрес гостя и необязательные ограничения длины, которые должны удовлетворять гостевой записи, чтобы сигнализировать о событии. См. раздел "Типы данных Doorbell " для семантики полей и поддерживаемых режимов соответствия.
EventHandle
Указывает дескриптор события, который будет сигнализировать, как возвращается CreateEvent. При выполнении соответствующей записи гипервизор задает событие, как будто SetEvent было вызвано.
Возвращаемое значение
Если функция выполнена успешно, возвращается S_OKзначение.
Функция возвращаетсяE_INVALIDARG, если данные соответствия неправильно сформированы: если заданы зарезервированные биты; если MatchOnLength задано значение, но Length не одно из 1, 2, 4 или 8; если MatchOnLength ясно, но не является ненулевой или MatchOnValue задано; или если MatchOnValue значение ясно, но LengthValue ненулевое значение.
Функция возвращается ERROR_HV_INVALID_PARAMETER , если запрошенная регистрация конфликтует с дверью, уже зарегистрированной в том же случае GuestAddress. Несколько дверей можно зарегистрировать на одном гостевом ValueLengthфизическом адресе, если каждое совпадение совпадает с одинаковым. Конфликт возникает, когда идентичная дверь уже зарегистрирована, когда новая регистрация указывает на другой номер, отличный Length от существующего дверного в этом адресе, или когда новая регистрация или существующую дверь в этом адресе совпадает с любым значением (то есть MatchOnValue ясно).
Remarks
Когда виртуальный процессор выполняет соответствующую запись, событие сигнализируется, и виртуальный процессор не завершает работу с WHvRunVpExitReasonMemoryAccess. Гипервизор распознает только определенные инструкции хранилища для запуска записи; Если гость выполняет запись с помощью нераспознанной инструкции, событие не сигнализируется и виртуальный процессор завершает работу с WHvRunVpExitReasonMemoryAccess. Набор поддерживаемых инструкций может измениться между Windows выпусками, поэтому вызывающие пользователи должны обеспечить правильное поведение пути выхода виртуального процессора для указанного гостевого адреса.
Если соответствующий гостевой адрес попадает на страницу, сопоставленную WHvMapGpaRangeранее, регистрация двери фактически распакуется на этой странице в течение всего времени существования регистрации. Несоотвлекаемые записи на страницу вызывают выход виртуального процессора, WHvRunVpExitReasonMemoryAccess как если бы страница была не сопоставлена. Страница возвращается в сопоставленное состояние при WHvUnregisterPartitionDoorbellEvent вызове.
Зарегистрированная запись не должна перестраивать границу страницы; Нет других требований к выравниванию.
Событие удаляется вызовом WHvUnregisterPartitionDoorbellEvent с идентичными данными соответствия, и все остальные события doorbell автоматически отменяются при удалении секции.
Требования
| Requirement | Ценность |
|---|---|
| Минимальный поддерживаемый Windows | Windows 10 версии 2004 (x64); Windows 11 версии 24H2, сборка 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| Библиотека | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64, Arm64 |