DXGK_SPB_INTERFACE 結構 (dispmprt.h)
DXGK_SPB_INTERFACE 結構包含簡單周邊總線 (SPB) 介面中函式的指標,Windows 顯示驅動程式模型 (WDDM) 1.2 和更新版本顯示迷你埠驅動程式可以呼叫來檢查和改變 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
開啟簡單的周邊總線 (SPB) 資源。 顯示迷你埠驅動程式會提供所有輸入參數。
OpenSpbResource 參數 | Description |
---|---|
DeviceHandle | 代表顯示配接器的句柄。 顯示迷你埠驅動程式先前在傳遞給 DxgkDdiStartDevice 函式之 DXGKRNL_INTERFACE 結構的 DeviceHandle 成員中取得此句柄。 |
SpbReourceId | SPB 資源中樞的資源標識碼。 |
SpbResourceSubName | Unicode SPB 資源子名稱的選擇性指標。 |
DesiredAccess | 決定SPB資源要求存取權 的ACCESS_MASK 值。 如需詳細資訊,請參閱 ZwCreateFile 函式的 DesiredAccess 參數。 |
ShareAccess | 檔案的共用存取類型。 如需詳細資訊,請參閱 ZwCreateFile 的 ShareAccess 參數。 |
OpenOptions | 開啟SPB資源時要套用的選項。 如需詳細資訊,請參閱 ZwCreateFile 的 CreateOptions 參數。 |
SpbResource | 緩衝區的指標,用來將句柄傳回給SPB資源。 |
CloseSpbResource
關閉SPB資源。 顯示迷你埠驅動程式會提供所有輸入參數。
關閉開啟的物件句柄會導致該句柄變成無效。 系統也會遞減物件的句柄計數,並檢查是否可以刪除物件。 系統不會實際刪除物件,直到關閉所有物件的句柄,而且不會保留參考的指標。
驅動程式必須呼叫 CloseSpbResource ,以在不再需要句柄時立即關閉它已使用 OpenSpbResource 開啟的每個句柄。
CloseSpbResource 的呼叫端不應該假設此函式會在傳回之前自動等候所有 I/O 完成。
CloseSpbResource 參數 | Description |
---|---|
DeviceHandle | 表示顯示配接器的句柄。 顯示迷你埠驅動程式先前在傳遞給 DxgkDdiStartDevice 函式之 DXGKRNL_INTERFACE 結構的 DeviceHandle 成員中取得此句柄。 |
SpbResource | SPB 資源的指標,顯示迷你埠驅動程式已使用 OpenSpbResource 函式開啟。 |
ReadSpbResource
從開啟的SPB資源讀取數據。 顯示迷你埠驅動程式會提供所有輸入參數。
如果呼叫 OpenSpbResource 設定 OpenOptions 旗標FILE_SYNCHRONOUS_IO_ALERT或FILE_SYNCHRONOUS_IO_NONALERTWdm.h) 中定義的 (,I/O 管理員會維護目前的檔案位置。 如果是, ReadSpbResource 的呼叫端可以指定目前檔案位置位移的使用,而不是明確的 ByteOffset 值。 您可以使用下列其中一種方法來建立此規格:
- 指定 HighPart 成員設定為 -1 的LARGE_INTEGER值的指標,並將 LowPart 成員設定為系統定義的值,FILE_USE_FILE_POINTER_POSITION Wdm.h) 中定義的 (。
- 傳遞 ByteOffset 的 NULL 指標。
ReadSpbResource 會藉由新增完成讀取作業時所讀取的位元組數目,以更新目前的檔案位置;如果使用 I/O 管理員所維護的目前檔案位置。
即使 I/O 管理員維護目前的檔案位置,呼叫端還是可以將明確的 ByteOffset 值傳遞至 ReadSpbResource 來重設此位置。 這麼做會自動將目前的檔案位置變更為該 ByteOffset 值、執行讀取作業,然後根據實際讀取的位元組數目更新位置。 這項技術會為呼叫端提供不可部分完成的搜尋和讀取服務。
OpenSpbResource 參數 | Description |
---|---|
DeviceHandle | 表示顯示配接器的句柄。 顯示迷你埠驅動程式先前在傳遞給 DxgkDdiStartDevice 函式之 DXGKRNL_INTERFACE 結構的 DeviceHandle 成員中取得此句柄。 |
SpbResource | SPB 資源的指標,顯示迷你埠驅動程式已使用 OpenSpbResource 函式開啟。 |
長度 | Buffer 參數所指向之緩衝區的大小,以位元組為單位。 |
Buffer | 緩衝區的指標,接收從指定SPB資源讀取的數據。 |
ByteOffset | 變數的選擇性指標,指定SPB資源中開始讀取作業的起始位元組位移。 如果嘗試讀取超過檔案結尾, ReadSpbResource 會傳回錯誤。 |
EventHandle | 呼叫端所建立事件的選擇性句柄。 如果提供此參數,呼叫端將會進入等候狀態,直到讀取作業完成且指定的事件設定為 Signaled 狀態為止。 此參數可以是 Null。 |
IoStatusBlock | 接收最終完成狀態和所要求讀取作業相關信息 之IO_STATUS_BLOCK 結構的指標。 IO_STATUS_BLOCK 結構的信息成員會接收實際從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 的LARGE_INTEGER值的指標,並將 LowPart 成員設定為 wdm.h) 中定義的系統定義值FILE_USE_FILE_POINTER_POSITION (。
- 傳遞 ByteOffset 的 NULL 指標。
WriteSpbResource 會藉由新增完成寫入作業時所寫入的位元組數目,以更新目前的檔案位置,如果它正在使用 I/O 管理員所維護的目前檔案位置。
即使 I/O 管理員維護目前的檔案位置,呼叫端還是可以將明確的 ByteOffset 值傳遞至 WriteSpbResource 來重設此位置。 這麼做會自動將目前的檔案位置變更為 該 ByteOffset 值、執行寫入作業,然後根據實際寫入的位元組數目來更新位置。 這項技術會為呼叫端提供不可部分完成的搜尋和寫入服務。
您也可以藉由為 ByteOffset 指定 HighPart 設定為 -1 且 LowPart 設定為 LARGE_INTEGER FILE_WRITE_TO_END_OF_FILE 的指標,讓寫入作業從檔案的目前結尾開始。 不論 I/O 管理員是否維護目前的檔案位置,這都能運作。
WriteSpbResource 參數 | Description |
---|---|
DeviceHandle | 表示顯示配接器的句柄。 顯示迷你埠驅動程式先前在傳遞至 DxgkDdiStartDevice 函式之 DXGKRNL_INTERFACE 結構的 DeviceHandle 成員中取得此句柄。 |
SpbResource | 顯示迷你埠驅動程式使用 OpenSpbResource 函式開啟的 SPB 資源的指標。 |
長度 | Buffer 參數所指向之緩衝區的大小,以位元組為單位。 |
Buffer | 呼叫端配置的緩衝區指標,其中包含要寫入指定SPB資源的數據。 |
ByteOffset | 變數的選擇性指標,指定開始寫入作業之SPB資源中的起始位元組位移。 如果 Length 和 ByteOffset 參數指定超過目前檔尾標記的寫入作業, WriteSpbResource 會自動擴充檔案並更新檔尾標記;未明確寫入這類舊檔案尾標記和新檔尾標記的任何位元組都會定義為零。 |
EventHandle | 呼叫端所建立事件的選擇性句柄。 如果提供此參數,呼叫端將會進入等候狀態,直到寫入作業完成,且指定的事件設定為 Signaled 狀態。 此參數可以是 Null。 |
IoStatusBlock | 接收最終完成狀態的 IO_STATUS_BLOCK 結構的指標,以及所要求寫入作業的相關信息。 IO_STATUS_BLOCK 結構的信息成員會接收實際寫入SPB資源的位元元組數目。 |
SpbResourceIoControl
在開啟的簡單周邊總線 (SPB) 資源上執行 I/O 控制作業。 所有輸入參數都是由顯示迷你埠驅動程式提供。
如果呼叫端針對異步 I/O (開啟檔案,且FILE_SYNCHRONOUS_XXX建立/開啟選項都未設定 ) ,則指定的事件,如果有任何,則會在裝置控制作業完成時設定為 Signaled 狀態。 否則, DeviceHandle 參數指定的檔案物件將會設定為 Signaled 狀態。
SpbResourceIoControl 參数 | Description |
---|---|
DeviceHandle | 表示顯示配接器的句柄。 顯示迷你埠驅動程式先前在傳遞至 DxgkDdiStartDevice 函式之 DXGKRNL_INTERFACE 結構的 DeviceHandle 成員中取得此句柄。 |
SpbResource | 顯示迷你埠驅動程式使用 OpenSpbResource 函式開啟的 SPB 資源的指標。 |
IoControlCode | 裝置 I/O 控制程式代碼 (IOCTL_XXX) ,指出要執行哪些裝置 I/O 控制作業,通常是由基礎設備驅動器執行。 此參數的值會決定 InputBuffer 和 OutputBuffer 參數的格式和必要長度,以及下列哪一個參數位是必要的。 |
InBufferSize | InputBuffer 參數所指向之緩衝區的大小,以位元組為單位。 如果 InputBuffer 為 NULL,則會忽略此值。 |
InputBuffer | 呼叫端配置的輸入緩衝區指標,其中包含要提供給目標裝置的裝置特定資訊。 如果 IoControlCode 參數指定不需要輸入資料的作業,此指標可以是 NULL。 |
OutBufferSize | OutputBuffer 參數所指向之緩衝區的大小,以位元組為單位。 如果 OutputBuffer 為 NULL,則會忽略此值。 |
OutputBuffer | 呼叫端配置的輸出緩衝區指標,其中會從目標裝置傳回資訊。 如果 IoControlCode 參數指定不會產生輸出資料的作業,則此指標可以是 NULL。 |
EventHandle | 呼叫端所建立事件的選擇性句柄。 如果提供此參數,呼叫端將會進入等候狀態,直到要求的作業完成,且指定的事件設定為 Signaled 狀態。 此參數可以是 Null。 |
IoStatusBlock | 接收最終完成狀態的變數指標,以及所要求I/O控制作業的相關信息。 對於傳回數據的成功呼叫,輸出Buffer 參數所指向之緩衝區寫入的位元組數目會傳回IO_STATUS_BLOCK 結構的信息成員中。 |
備註
若要使用此結構的函式,請先提供 DXGK_SPB_INTERFACE 結構的 Size 和 Version 成員。 然後呼叫 DxgkCbQueryServices 函式,並將 ServicesType 參數設定為 DxgkServicesFirmwareTable 的值,並將 Interface 參數設定為 (轉換成DXGK_SPB_INTERFACE結構的 PINTERFACE) 位址。
如需SPB架構的詳細資訊,請參閱 簡單周邊總線 和 SPB周邊驅動程序設計指南**。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8 |
最低支援的伺服器 | Windows Server 2012 |
標頭 | dispmprt.h (包括 Dispmprt.h) |