次の方法で共有


DXGK_SPB_INTERFACE構造体 (dispmprt.h)

DXGK_SPB_INTERFACE 構造体には、Windows ディスプレイ ドライバー モデル (WDDM) 1.2 以降のディスプレイ ミニポート ドライバーが SPB リソースを検査および変更するために呼び出すことができる単純な周辺機器バス (SPB) インターフェイスの関数へのポインターが含まれています。

構文

typedef struct _DXGK_SPB_INTERFACE {
  USHORT                 Size;
  USHORT                 Version;
  PVOID                  Context;
  PINTERFACE_REFERENCE   InterfaceReference;
  PINTERFACE_DEREFERENCE InterfaceDereference;
  NTSTATUS(HANDLE DeviceHandle,LARGE_INTEGER SpbReourceId,UNICODE_STRING *SpbResourceSubName,ACCESS_MASK DesiredAccess,ULONG ShareAccess,ULONG OpenOptions,VOID **SpbResource)              * )(OpenSpbResource;
  NTSTATUS()(HANDLE DeviceHandle,VOID *SpbResource)              * CloseSpbResource;
  NTSTATUS(ANDLE DeviceHandle,VOID *SpbResource,ULONG Length,VOID *Buffer,LARGE_INTEGER *ByteOffset,HANDLE EventHandle,IO_STATUS_BLOCK *IoStatusBlock)              * )(HReadSpbResource;
  NTSTATUS(ANDLE DeviceHandle,VOID *SpbResource,ULONG Length,VOID *Buffer,LARGE_INTEGER *ByteOffset,HANDLE EventHandle,IO_STATUS_BLOCK *IoStatusBlock)              * )(HWriteSpbResource;
  NTSTATUS(ANDLE DeviceHandle,VOID *SpbResource,ULONG IoControlCode,ULONG InBufferSize,VOID *InputBuffer,ULONG OutBufferSize,VOID *OutputBuffer,HANDLE EventHandle,IO_STATUS_BLOCK *IoStatusBlock)              * )(HSpbResourceIoControl;
} DXGK_SPB_INTERFACE, *PDXGK_SPB_INTERFACE;

メンバーズ

Size

この構造体のサイズ (バイト単位)。

Version

SPB インターフェイスのバージョン番号。 バージョン番号定数は、Dispmprt.h (たとえば、DXGK_SPB_INTERFACE_VERSION_1) で定義されます。

Context

ディスプレイ ミニポート ドライバーによって提供されるコンテキストへのポインター。

InterfaceReference

ディスプレイ ミニポート ドライバーによって実装されるインターフェイス参照関数へのポインター。

InterfaceDereference

ディスプレイ ミニポート ドライバーによって実装されるインターフェイス逆参照関数へのポインター。

OpenSpbResource

Simple Peripheral Bus (SPB) リソースを開きます。 すべての入力パラメーターは、ディスプレイ ミニポート ドライバーによって提供されます。

OpenSpbResource パラメーター 形容
DeviceHandle ディスプレイ アダプターを表すハンドル。 ディスプレイ ミニポート ドライバーは、DxgkDdiStartDevice 関数に渡された DXGKRNL_INTERFACE 構造体の DeviceHandle メンバーで、このハンドルを以前に取得しました。
spbReourceId する SPB リソース ハブのリソース ID。
SpbResourceSubName する Unicode SPB リソース サブ名への省略可能なポインター。
DesiredAccess する SPB リソースへの要求されたアクセスを決定する ACCESS_MASK 値。 詳細については、ZwCreateFile 関数の DesiredAccess パラメーターを参照してください。
ShareAccess ファイルの共有アクセスの種類。 詳細については、ZwCreateFileShareAccess パラメーター参照してください。
OpenOptions SPB リソースを開くときに適用するオプション。 詳細については、ZwCreateFileCreateOptions パラメーター参照してください。
SpbResource SPB リソースにハンドルを返すために使用されるバッファーへのポインター。

CloseSpbResource

SPB リソースを閉じます。 すべての入力パラメーターは、ディスプレイ ミニポート ドライバーによって提供されます。

開いているオブジェクト ハンドルを閉じると、そのハンドルが無効になります。 また、オブジェクトのハンドル数がデクリメントされ、オブジェクトを削除できるかどうかがチェックされます。 オブジェクトのすべてのハンドルが閉じられ、参照されているポインターが残らない限り、システムはオブジェクトを実際に削除しません。

ドライバーは、CloseSpbResource を呼び出して、ハンドルが不要になったらすぐに、OpenSpbResource で開いたすべてのハンドルを閉じる必要があります。

CloseSpbResource の呼び出し元は、この関数が戻る前にすべての I/O が完了するまで自動的に待機することを想定しないでください。

CloseSpbResource パラメーター 形容
DeviceHandle ディスプレイ アダプターを表すハンドル。 ディスプレイ ミニポート ドライバーは、DxgkDdiStartDevice 関数に渡された DXGKRNL_INTERFACE 構造体の DeviceHandle メンバーで、このハンドルを以前に取得しました。
SpbResource OpenSpbResource 関数を使用してディスプレイ ミニポート ドライバーが開いた SPB リソースへのポインター。

ReadSpbResource

開いている SPB リソースからデータを読み取ります。 すべての入力パラメーターは、ディスプレイ ミニポート ドライバーによって提供されます。

OpenSpbResource 呼び出しOpenOptions フラグ FILE_SYNCHRONOUS_IO_ALERT または FILE_SYNCHRONOUS_IO_NONALERT (Wdm.hで定義) のいずれかに設定されている場合、I/O マネージャーは現在のファイル位置を維持します。 その場合、ReadSpbResource の呼び出し元は、明示的な ByteOffset 値ではなく、現在のファイル位置オフセットを使用するように指定できます。 この仕様は、次のいずれかの方法を使用して行うことができます。

  • HighPart メンバーが -1 に設定され、LowPart メンバーがシステム定義値 FILE_USE_FILE_POINTER_POSITION (Wdm.h で定義) に設定されている LARGE_INTEGER 値へのポインターを指定します。
  • ByteOffset NULL ポインター渡します。

ReadSpbResource は、I/O マネージャーによって維持されている現在のファイル位置を使用している場合に、読み取り操作の完了時に読み取られたバイト数を追加することによって、現在のファイル位置を更新します。

I/O マネージャーが現在のファイル位置を維持している場合でも、呼び出し元は明示的な ByteOffset 値を ReadSpbResource 渡すことによって、この位置をリセットできます。 これにより、現在のファイルの位置が ByteOffset に自動的に変更され、読み取り操作が実行され、実際に読み取られたバイト数に従って位置が更新されます。 この手法により、呼び出し元にアトミックなシークアンドリード サービスが提供されます。

OpenSpbResource パラメーター 形容
DeviceHandle ディスプレイ アダプターを表すハンドル。 ディスプレイ ミニポート ドライバーは、DxgkDdiStartDevice 関数に渡された DXGKRNL_INTERFACE 構造体の DeviceHandle メンバーで、このハンドルを以前に取得しました。
SpbResource OpenSpbResource 関数を使用してディスプレイ ミニポート ドライバーが開いた SPB リソースへのポインター。
の長さの Buffer パラメーターが指すバッファーのサイズ (バイト単位)。
バッファー 指定した SPB リソースから読み取られたデータを受け取るバッファーへのポインター。
ByteOffset する 読み取り操作を開始する SPB リソースの開始バイト オフセットを指定する変数への省略可能なポインター。 ファイルの末尾を超えて読み取ろうとすると、ReadSpbResource エラーが返されます。
EventHandle 呼び出し元によって作成されたイベントの省略可能なハンドル。 このパラメーターを指定すると、読み取り操作が完了し、指定されたイベントが Signaled 状態に設定されるまで、呼び出し元は待機状態になります。 このパラメーターは NULL できます。
IoStatusBlock 最終的な完了状態と、要求された読み取り操作に関する情報を受け取る IO_STATUS_BLOCK 構造体へのポインター。 IO_STATUS_BLOCK 構造体の Information メンバーは、SPB リソースから実際に読み取られたバイト数を受け取ります。

WriteSpbResource

開いている SPB リソースにデータを書き込みます。

OpenSpbResource 関数の呼び出しで DesiredAccess フラグのみが設定 FILE_APPEND_DATA場合、ByteOffset パラメーターは無視されます。 この場合、Buffer パラメーターが指すバッファー内のデータ (Length バイト) は、ファイルの現在の末尾から書き込まれます。

OpenSpbResource の呼び出しCreateOptions フラグ、FILE_SYNCHRONOUS_IO_ALERT、または FILE_SYNCHRONOUS_IO_NONALERTのいずれかを設定すると、I/O マネージャーは現在のファイル位置を維持します。 その場合、WriteSpbResource の呼び出し元は、ByteOffset 値を明示的に するのではなく、現在のファイル位置オフセットを使用するように指定できます。 この仕様は、次のいずれかの方法を使用して行うことができます。

  • HighPart メンバーが -1 に設定され、LowPart メンバーがシステム定義値 FILE_USE_FILE_POINTER_POSITION (Wdm.hで定義) に設定されている LARGE_INTEGER 値へのポインターを指定します。
  • ByteOffset NULL ポインター渡します。

WriteSpbResource 、書き込み操作の完了時に書き込まれたバイト数を追加することによって、現在のファイル位置を更新します (I/O マネージャーによって維持されている現在のファイル位置を使用している場合)。

I/O マネージャーが現在のファイル位置を維持している場合でも、呼び出し元は明示的な ByteOffset 値を WriteSpbResource 渡すことによって、この位置をリセットできます。 これを行うと、現在のファイルの位置が ByteOffset に自動的に変更され、書き込み操作が実行され、実際に書き込まれたバイト数に従って位置が更新されます。 この手法により、呼び出し元にアトミックなシークアンドライト サービスが提供されます。

HighPart が -1 に設定され、LowPart FILE_WRITE_TO_END_OF_FILEに設定されている LARGE_INTEGER 値へのポインター ByteOffset を指定することによって、書き込み操作を現在のファイルの末尾から開始することもできます。 これは、I/O マネージャーが現在のファイル位置を維持しているかどうかに関係なく機能します。

WriteSpbResource パラメーター 形容
DeviceHandle ディスプレイ アダプターを表すハンドル。 ディスプレイ ミニポート ドライバーは、DxgkDdiStartDevice 関数に渡された DXGKRNL_INTERFACE 構造体の DeviceHandle メンバーで、このハンドルを以前に取得しました。
SpbResource OpenSpbResource 関数を使用してディスプレイ ミニポート ドライバーが開いた SPB リソースへのポインター。
の長さの Buffer パラメーターが指すバッファーのサイズ (バイト単位)。
バッファー 指定した SPB リソースに書き込むデータを格納している呼び出し元によって割り当てられたバッファーへのポインター。
ByteOffset する 書き込み操作を開始する SPB リソースの開始バイト オフセットを指定する変数への省略可能なポインター。 Length パラメーターと ByteOffset パラメーターで、現在のファイルの終了マークを超える書き込み操作を指定した場合、WriteSpbResource ファイルが自動的に拡張され、ファイルの末尾のマークが更新されます。このような古いファイルの終わりと新しいファイルの終わりのマークの間に明示的に書き込まれていないバイトはすべて、ゼロとして定義されます。
EventHandle 呼び出し元によって作成されたイベントの省略可能なハンドル。 このパラメーターを指定すると、書き込み操作が完了し、指定されたイベントが Signaled 状態に設定されるまで、呼び出し元は待機状態になります。 このパラメーターは NULL できます。
IoStatusBlock 最終的な完了状態と要求された書き込み操作に関する情報を受け取る IO_STATUS_BLOCK 構造体へのポインター。 IO_STATUS_BLOCK 構造体の Information メンバーは、SPB リソースに実際に書き込まれたバイト数を受け取ります。

SpbResourceIoControl

開いている Simple Peripheral Bus (SPB) リソースに対して I/O 制御操作を実行します。 すべての入力パラメーターは、ディスプレイ ミニポート ドライバーによって提供されます。

呼び出し元が非同期 I/O 用にファイルを開いた場合 (作成/開くオプションがどちらも設定 FILE_SYNCHRONOUS_XXX)、指定されたイベントがある場合は、デバイス制御操作の完了時に Signaled 状態に設定されます。 それ以外の場合、DeviceHandle パラメーターで指定されたファイル オブジェクトは、Signaled 状態に設定されます。

SpbResourceIoControl パラメーター 形容
DeviceHandle ディスプレイ アダプターを表すハンドル。 ディスプレイ ミニポート ドライバーは、DxgkDdiStartDevice 関数に渡された DXGKRNL_INTERFACE 構造体の DeviceHandle メンバーで、このハンドルを以前に取得しました。
SpbResource OpenSpbResource 関数を使用してディスプレイ ミニポート ドライバーが開いた SPB リソースへのポインター。
IoControlCode デバイス I/O 制御操作を実行するデバイス I/O 制御操作を示すデバイス I/O 制御コード (IOCTL_XXX) (通常は、基になるデバイス ドライバーによって)。 このパラメーターの値は、InputBuffer および OutputBuffer パラメーター の形式と必要な長さ、および必要な次のパラメーター ペアを決定します。
InBufferSize InputBuffer パラメーターが指すバッファーのサイズ (バイト単位)。 InputBuffer NULL 場合、この値は無視されます。
InputBuffer ターゲット デバイスに渡されるデバイス固有の情報を含む、呼び出し元によって割り当てられた入力バッファーへのポインター。 IoControlCode パラメーターが入力データを必要としない操作を指定する場合、このポインターは NULL できます。
OutBufferSize する OutputBuffer パラメーターが指すバッファーのサイズ (バイト単位)。 OutputBuffer が NULL 場合、この値は無視されます。
OutputBuffer ターゲット デバイスから情報が返される呼び出し元によって割り当てられた出力バッファーへのポインター。 IoControlCode パラメーターで出力データを生成しない操作が指定されている場合、このポインターは NULL できます。
EventHandle 呼び出し元によって作成されたイベントの省略可能なハンドル。 このパラメーターを指定すると、要求された操作が完了し、指定されたイベントが Signaled 状態に設定されるまで、呼び出し元は待機状態になります。 このパラメーターは NULL できます。
IoStatusBlock 最終的な完了状態と、要求された I/O 制御操作に関する情報を受け取る変数へのポインター。 データを返す呼び出しが成功した場合、OutputBuffer パラメーターが指すバッファーに書き込まれたバイト数は、IO_STATUS_BLOCK 構造体の Information メンバーで返されます。

備考

この構造体の関数を使用するには、まず、DXGK_SPB_INTERFACE 構造体の Size および Version メンバーを指定します。 次に、ServicesType パラメーターを DxgkServicesFirmwareTableの値に設定して、DxgkCbQueryServices 関数を呼び出し、Interface パラメーターを DXGK_SPB_INTERFACE 構造体のアドレス (PINTERFACEとしてキャスト) に設定します。

SPB アーキテクチャの詳細については、「単純な周辺機器バスの と SPB 周辺機器ドライバー設計ガイド を参照してください**

必要条件

要件 価値
サポートされる最小クライアント Windows 8
サポートされる最小サーバー Windows Server 2012
ヘッダー dispmprt.h (Dispmprt.h を含む)