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 参数 | 描述 |
---|---|
DeviceHandle | 表示显示适配器的句柄。 显示微型端口驱动程序以前在传递给 DxgkDdiStartDevice 函数的 DXGKRNL_INTERFACE 结构的 DeviceHandle 成员中获取此句柄。 |
SpbReourceId | SPB 资源中心的资源 ID。 |
SpbResourceSubName | 指向 Unicode SPB 资源子名称的可选指针。 |
DesiredAccess | 确定请求访问 SPB 资源的 ACCESS_MASK 值。 有关详细信息,请参阅 ZwCreateFile 函数的 DesiredAccess 参数。 |
ShareAccess | 文件的共享访问类型。 有关详细信息,请参阅 ZwCreateFileShareAccess 参数。 |
OpenOptions | 打开 SPB 资源时要应用的选项。 有关详细信息,请参阅 ZwCreateFile的 CreateOptions 参数。 |
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 值。 可以使用以下方法之一来制定此规范:
- 指定指向 LARGE_INTEGER 值的指针,其中 HighPart 成员设置为 -1,LowPart 成员设置为系统定义值 FILE_USE_FILE_POINTER_POSITION(在 Wdm.h 中定义)。
- 为 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 结构的 信息 成员接收从 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 值。 可以使用以下方法之一来制定此规范:
- 指定指向 LARGE_INTEGER 值的指针,其中 HighPart 成员设置为 -1,LowPart 成员设置为系统定义值 FILE_USE_FILE_POINTER_POSITION(Wdm.h中定义)。
- 为 ByteOffset传递 NULL 指针。
WriteSpbResource 通过在完成写入作时添加写入的字节数来更新当前文件位置(如果使用 I/O 管理器维护的当前文件位置)。
即使 I/O 管理器维护当前文件位置,调用方也可以通过将显式 ByteOffset 值传递给 WriteSpbResource来重置此位置。 执行此作会自动将当前文件位置更改为 ByteOffset 值,执行写入作,然后根据实际写入的字节数更新位置。 此方法为调用方提供原子查找和写入服务。
还可以通过指定 ByteOffset 指向 HighPart 设置为 -1 LowPart 设置为 FILE_WRITE_TO_END_OF_FILELARGE_INTEGER 值的指针,导致写入作在文件的当前末尾启动。 无论 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 结构的 信息 成员接收实际写入 SPB 资源的字节数。 |
SpbResourceIoControl
对打开的简单外围总线 (SPB) 资源执行 I/O 控制作。 所有输入参数都由显示微型端口驱动程序提供。
如果调用方为异步 I/O 打开文件(未 FILE_SYNCHRONOUS_XXX 创建/打开选项集),则指定事件(如果有)将在设备控制作完成时设置为 Signaled 状态。 否则,DeviceHandle 参数指定的文件对象将设置为 Signaled 状态。
SpbResourceIoControl 参数 | 描述 |
---|---|
DeviceHandle | 表示显示适配器的句柄。 显示微型端口驱动程序以前在传递给 DxgkDdiStartDevice 函数的 DXGKRNL_INTERFACE 结构的 DeviceHandle 成员中获取此句柄。 |
SpbResource | 指向显示微型端口驱动程序使用 OpenSpbResource 函数打开的 SPB 资源的指针。 |
IoControlCode | 设备 I/O 控制代码(IOCTL_XXX),指示要对其执行哪些设备 I/O 控制作,通常由基础设备驱动程序执行。 此参数的值确定 InputBuffer 和 OutputBuffer 参数的格式和所需长度,以及以下哪些参数对是必需的。 |
InBufferSize | InputBuffer 参数指向的缓冲区的大小(以字节为单位)。 如果 InputBufferNULL,则忽略此值。 |
InputBuffer | 指向调用方分配的输入缓冲区的指针,该缓冲区包含要提供给目标设备的特定于设备的信息。 如果 IoControlCode 参数指定不需要输入数据的作,则可以 NULL此指针。 |
OutBufferSize | OutputBuffer 参数指向的缓冲区的大小(以字节为单位)。 如果 outputBufferNULL,则忽略此值。 |
OutputBuffer | 指向调用方分配的输出缓冲区的指针,在该缓冲区中从目标设备返回信息。 如果 IoControlCode 参数指定了不生成输出数据的作,则可以将此指针 NULL。 |
EventHandle | 调用方创建的事件的可选句柄。 如果提供了此参数,则调用方将进入等待状态,直到请求的作完成并且给定事件设置为 Signaled 状态。 此参数可以 NULL。 |
IoStatusBlock | 指向接收最终完成状态的变量的指针,以及有关请求的 I/O 控制作的信息。 对于返回数据的成功调用,OutputBuffer 参数指向的缓冲区写入的字节数在 IO_STATUS_BLOCK 结构的 信息 成员中返回。 |
言论
若要使用此结构的函数,请先提供 大小 和 版本DXGK_SPB_INTERFACE 结构的成员。 然后调用 DxgkCbQueryServices 函数,并将 ServicesType 参数设置为 DxgkServicesFirmwareTable的值,并将 DXGK_SPB_INTERFACE 结构的 接口 参数设置为地址(强制转换为 PINTERFACE)。
有关 SPB 体系结构的详细信息,请参阅 简单的外围总线 和 SPB 外围驱动程序设计指南**。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 8 |
支持的最低服务器 | Windows Server 2012 |
标头 | dispmprt.h (包括 Dispmprt.h) |