WHvCreateNotificationPort

パーティションが一致するドアベルまたは SynIC イベントを生成したときに、Windows イベント オブジェクトに通知する通知ポートを作成します。

構文

typedef enum WHV_NOTIFICATION_PORT_TYPE
{
    WHvNotificationPortTypeEvent = 2,
    WHvNotificationPortTypeDoorbell = 4,
} WHV_NOTIFICATION_PORT_TYPE;

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;

typedef struct WHV_NOTIFICATION_PORT_PARAMETERS
{
    WHV_NOTIFICATION_PORT_TYPE NotificationPortType;
    UINT16 Reserved;
    UINT8 Reserved1;
    UINT8 ConnectionVtl;

    union
    {
        WHV_DOORBELL_MATCH_DATA Doorbell;
        struct
        {
            UINT32 ConnectionId;
        } Event;
    };

} WHV_NOTIFICATION_PORT_PARAMETERS;

typedef PVOID WHV_NOTIFICATION_PORT_HANDLE;

HRESULT
WINAPI
WHvCreateNotificationPort(
    _In_ WHV_PARTITION_HANDLE Partition,
    _In_ const WHV_NOTIFICATION_PORT_PARAMETERS* Parameters,
    _In_ HANDLE EventHandle,
    _Out_ WHV_NOTIFICATION_PORT_HANDLE* PortHandle
    );

Parameters

Partition

パーティション オブジェクトへのハンドル。

Parameters

作成する通知ポートの種類と構成を指定します。 WHV_NOTIFICATION_PORT_PARAMETERSを参照してください。

EventHandle

通知ポートがトリガーされたときに通知されるWindows イベント オブジェクトへのハンドル。

PortHandle

新しく作成された通知ポートへのハンドルを受け取ります。 ハンドルは、 WHvSetNotificationPortPropertyWHvDeleteNotificationPortの後続の呼び出しで使用されます。

戻り値

関数が成功した場合、戻り値は S_OK

この関数は、NotificationPortTypeが有効なWHV_NOTIFICATION_PORT_TYPE値でない場合、またはドアベル の一致データがドアベル ポートに対して有効でない場合に、E_INVALIDARGを返します。 ドアベルの一致データ フィールドとそのルールについては、「 Doorbell データ型」を参照してください。

Remarks

WHvCreateNotificationPort関数は、パーティションで一致するイベントが生成されたときに、指定されたWindows イベント オブジェクトに通知する通知ポートを作成します。 通知ポートは、非推奨の WHvRegisterPartitionDoorbellEvent 関数よりも優先されます。これは、ドアベル型の通知ポートを作成することと同じです。

NotificationPortTypeWHvNotificationPortTypeDoorbellされると、仮想プロセッサがDoorbell メンバーによって記述されたゲスト物理アドレスに一致する値を書き込むと、ポートはEventHandleを通知します。 MatchOnValueフラグとMatchOnLength フラグは、書き込まれた値と長さが一致する必要があるかどうかを制御します。

NotificationPortTypeWHvNotificationPortTypeEventされると、ゲストが Event.ConnectionId メンバーと等しい接続 ID を使用してHvCallSignalEventハイパーコールを呼び出すと、ポートはEventHandleを通知します。

通知ポートを作成する前に、 WHvCreatePartitionを使用してパーティションを作成し、構成し、 WHvSetupPartition を呼び出します。 ポートが作成されたら、 WHvSetNotificationPortPropertyを使用して優先するターゲット仮想プロセッサまたはアフィニティ期間を調整し、 WHvDeleteNotificationPortで削除します。

Requirements

要件 価値
サポートされている最小Windows Windows 10バージョン 20H2 (x64);Windows 11、バージョン 24H2、ビルド 26100.3915 (Arm64)
Header WinHvPlatform.h
図書館 WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64、Arm64

こちらも参照ください