PVIDEO_HW_FIND_ADAPTER コールバック関数 (video.h)
HwVidFindAdapter は、ミニポート ドライバーおよびミニポート ドライバーでサポートされているデバイスに固有のデータの初期化を実行します。
構文
PVIDEO_HW_FIND_ADAPTER PvideoHwFindAdapter;
VP_STATUS PvideoHwFindAdapter(
PVOID HwDeviceExtension,
PVOID HwContext,
PWSTR ArgumentString,
PVIDEO_PORT_CONFIG_INFO ConfigInfo,
PUCHAR Again
)
{...}
パラメーター
HwDeviceExtension
ドライバーのデバイスごとの記憶域へのポインター。 詳細については、「 デバイス拡張機能」を参照してください。
HwContext
は NULL であり、ミニポート ドライバーでは無視する必要があります。
ArgumentString
ユーザーに由来する null で終わる ASCII 文字列へのポインター。 このポインターには NULL を指定できます。
ConfigInfo
VIDEO_PORT_CONFIG_INFO構造体へのポインター。 ビデオ ポート ドライバーは のメモリを割り当て、システム IO バス番号やミニポート ドライバーが VIDEO_HW_INITIALIZATION_DATA 構造体に設定する値など、既知の構成情報を使用してこの構造体を初期化します。
Again
ミニポート ドライバーでは無視する必要があります。
戻り値
HwVidFindAdapter は 、次のいずれかの状態コードを返す必要があります。
リターン コード | 説明 |
---|---|
ERROR_DEV_NOT_EXIST | 再開可能なバスの場合、ミニポート ドライバーがデバイスを見つけられなかったことを示します。 |
ERROR_INVALID_PARAMETER | ミニポート ドライバーがアダプターを正常に構成または初期化できなかったことを示します。 |
NO_ERROR | 成功を示します。 |
注釈
すべてのビデオ ミニポート ドライバーには 、HwVidFindAdapter 関数が必要です。
ビデオ ポート ドライバーは 、HwVidFindAdapter を呼び出す前に次の処理を行います。
- ミニポート ドライバーの DriverEntry 関数がVIDEO_HW_INITIALIZATION_DATA構造体で指定した HwDeviceExtensionSize の値に従って、ミニポート ドライバーのアダプターごとの記憶域の記憶域を割り当て、割り当てられた記憶域をゼロで初期化します。
- VIDEO_PORT_CONFIG_INFO構造体の記憶域を割り当て、ミニポート ドライバーが提供するVIDEO_HW_INITIALIZATION_DATAの情報に基づいて使用可能なすべての情報を入力します。
列挙可能なバス上のデバイスの HwVidFindAdapter 関数は、次の操作を行う必要があります。
- ConfigInfo が指すVIDEO_PORT_CONFIG_INFO構造のサイズを確認して、適切なバージョン管理を確認します。
- VideoPortGetAccessRanges を呼び出して、デバイスが応答するバス相対物理アドレスを取得します。 これらのアドレスは、PnP マネージャーによって割り当てられます。 ミニポート ドライバーは、VideoPortGetAccessRanges の VendorId、DeviceId、および Slot パラメーターで NULL を渡す必要があります。
- 複数のデバイスの種類をサポートするミニポート ドライバーの場合は、PnP マネージャーが検出したデバイスの種類を決定します。 ミニポート ドライバーは、PCI 構成情報を取得する VideoPortGetBusData を呼び出すことができます。
- アダプター固有のデータをVIDEO_PORT_CONFIG_INFO構造体の適切なメンバーに、関連するが不足している構成情報を入力します。
HwVidFindAdapter は、ミニポート ドライバーで使用するために、メモリやロックなどのリソースを割り当てることができます。 これらのリソースは、デバイス固有にすることも、ミニポート ドライバーがサポートする複数のデバイスで共有することもできます。 HwVidFindAdapter が NO_ERROR 以外の値を返す場合は、返される前にすべてのデバイス固有のリソースを解放する必要があります。 複数のデバイス間で共有されるリソースの場合、 HwVidFindAdapter は参照カウントを保持する必要があります。 たとえば、参照カウントは、 成功した HwVidFindAdapter に対する以前の呼び出しの数を示している可能性があります。 こうすることで、 HwVidFindAdapter が失敗する必要があり、 HwVidFindAdapter に対する以前のすべての呼び出しが失敗したと判断された場合、共有リソースが解放される可能性があります。
HwVidFindAdapter がビデオ ポート ドライバーによって呼び出されるたびに失敗する場合、オペレーティング システムは後でミニポート ドライバーをアンロードする可能性があります。 このような場合、 HwVidFindAdapter が割り当てたが解放されなかったリソースはリークします。
ISA などの再開可能なバス上のデバイスの場合でも、PnP はデバイスの起動を試みますが、デバイスが実際に存在するかどうかを判断するのは HwVidFindAdapter の責任です。 デバイスが見つからない場合、 HwVidFindAdapter はERROR_DEV_NOT_EXISTを返す必要があります。
HwVidFindAdapter は VideoPortSetRegistryParameters を呼び出して、アダプター固有の情報を HardwareInformation キーに格納する必要もあります。 この情報は、コントロール パネルの Display プログラムによって使用されます。 詳細については、「 レジストリでのハードウェア情報の設定 」を参照してください。
VIDEO_PORT_CONFIG_INFOのアダプターと AdapterInterfaceType 値に応じて、HwVidFindAdapter は次の VideoPortXxx 関数の一部を呼び出して、アダプターと通信するために必要なバス相対構成データとマップされたアクセス範囲を取得できます。
-
VideoPortGetBusData を使用して、特定の I/O バス上のアダプターに関するバスタイプ固有の構成情報を取得します。
-
VideoPortGetDeviceData を使用してレジストリからVIDEO_DEVICE_DATA_TYPE固有の情報を取得し、 HwVidQueryDeviceCallback を呼び出してこの情報を処理します。
-
レジストリから構成情報を取得するための VideoPortGetRegistryParameters。
-
VideoPortGetAccessRanges は、バス相対アクセス範囲のアドレスと、場合によっては他のハードウェア構成値を取得し、アダプターのドライバーが使用するためにレジストリでそれらを要求します。
-
VideoPortVerifyAccessRanges を使用して、アダプターのバス相対ビデオ メモリまたは I/O ポートをミニポート ドライバーで要求できるかどうかを判断します。それ以外の場合は、以前に読み込まれたドライバーによってレジストリ内のリソースが既に要求されており、可能な場合や失敗した場合は 、HwVidFindAdapter が他のアクセス範囲の要求を試みる必要があります。
-
VideoPortGetDeviceBase を使用して、正常に要求されたバス相対ベース アドレスと範囲サイズを、 VIDEO_ACCESS_RANGE 構造体で説明されているように 、システム空間 の論理アドレスにマップします。 HwVidFindAdapter は、VideoPortGetDeviceBase を呼び出す前に、VideoPortVerifyAccessRanges または VideoPortGetAccessRanges を正常に呼び出す必要があります。
HwVidFindAdapter は、状態が変更された状態でサポートされていないアダプターを残してはなりません。 VGA/SVGA アダプターの場合、 HwVidFindAdapter はアダプターを VGA 状態のままにし、変更された可能性のある拡張レジスタを元の状態に復元する必要があります。
HwVidFindAdapter をページング可能にする必要があります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | video.h (Video.h を含む) |