GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION回调函数 (gpioclx.h)

CLIENT_ControllerSpecificFunction 事件回调函数执行特定于特定常规用途 I/O (GPIO) 控制器的操作。

语法

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION GpioClientControllerSpecificFunction;

NTSTATUS GpioClientControllerSpecificFunction(
  [in]      PVOID Context,
  [in, out] PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
)
{...}

参数

[in] Context

指向 GPIO 控制器驱动程序 的设备上下文的指针。

[in, out] Parameters

指向 GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS 结构的指针,该结构包含特定于控制器的操作的输入和输出缓冲区。

返回值

如果调用成功, CLIENT_ControllerSpecificFunction 函数将返回 STATUS_SUCCESS 。 可能的返回值包括以下错误代码。

返回代码 说明
STATUS_NOT_SUPPORTED
GPIO 控制器不支持输入参数指定的操作。
STATUS_BUFFER_TOO_SMALL
输入缓冲区或输出缓冲区的大小太小。

注解

作为一个选项,GPIO 控制器驱动程序可以支持 IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION 请求。 这种类型的 I/O 控制请求 (IOCTL) 执行控制器特定的操作,以利于需要这些操作的外围设备驱动程序。 为了支持此 IOCTL,GPIO 控制器驱动程序实现 CLIENT_ControllerSpecificFunction 函数。

gpioClx) (GPIO 框架扩展支持 CLIENT_ControllerSpecificFunction 函数,以满足某些硬件平台的特定需求。 典型的 GPIO 控制器驱动程序不实现此功能。 使用 IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION 请求在一个平台上执行特定于硬件的操作的外围设备驱动程序可能会失去与不支持此操作的其他平台的兼容性。

通常, CLIENT_ControllerSpecificFunction 函数对 GPIO 控制器进行程序,以对一组 GPIO 引脚执行特定于硬件的操作。 此操作的输入和输出参数由 GPIO 控制器驱动程序的开发人员定义。 只有知道 GPIO 控制器驱动程序实现的特定操作的外围设备驱动程序才能请求这些操作。

当 GpioClx 收到 IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION 请求时,它会检查 GPIO 控制器驱动程序是否已实现 CLIENT_ControllerSpecificFunction 函数。 如果是这样,GpioClx 会将输入和输出缓冲区的说明从 IOCTL 复制到 GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS 结构,并将指向此结构的指针作为 参数传递给 CLIENT_ControllerSpecificFunction 函数。 如果 GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS 结构中的参数值有效,则函数将执行请求的操作并返回STATUS_SUCCESS。

如果 GpioClx 收到 IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION 请求,并且 GPIO 控制器驱动程序未实现 CLIENT_ControllerSpecificFunction 函数,则 GpioClx 将完成 IOCTL 并STATUS_NOT_IMPLEMENTED错误代码。

示例

若要定义 CLIENT_ControllerSpecificFunction 回调函数,必须首先提供一个函数声明,用于标识要定义的回调函数的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序 (SDV) 和其他验证工具查找错误,并且这是编写适用于 Windows 操作系统的驱动程序的要求。

例如,若要定义名为 MyEvtGpioControllerSpecificFunction的CLIENT_ControllerSpecificFunction回调函数,请使用 GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION 函数类型,如以下代码示例所示:

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION MyEvtGpioControllerSpecificFunction;

然后,按如下所示实现回调函数:

_Use_decl_annotations_
NTSTATUS
  MyEvtGpioControllerSpecificFunction(
    PVOID Context,
    PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
    )
{ ... }

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION函数类型在 Gpioclx.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 注释添加到函数定义。 Use_decl_annotations批注可确保使用应用于头文件中GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION函数类型的注释。 有关函数声明要求的详细信息,请参阅 使用 KMDF 驱动程序的函数角色类型声明函数。 有关 Use_decl_annotations的详细信息,请参阅 批注函数行为

要求

要求
最低受支持的客户端 从 Windows 8 开始支持。
目标平台 桌面
标头 gpioclx.h
IRQL 在 PASSIVE_LEVEL 调用。

另请参阅

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS

IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION