可用接口和相关 API

有三个 GPIO 接口:每个设备一个。 每个接口都由 GUID 引用。

/* 30ebfbf8-df5f-4d4d-9fc5-a26c7fd1df4a */ DEFINE_GUID (GUID_GPIOBUTTONS_NOTIFY_INTERFACE、0x30ebfbf8、0xdf5f、0x4d4d、0x9f、0xc5、0xa2、0x6c、0x7f、0xd1、0xdf、0x4a) ;

/* 317fc439-3f77-41c8-b09e-08ad63272aa3 */ DEFINE_GUID (GUID_GPIOBUTTONS_LAPTOPSLATE_INTERFACE、0x317fc439、0x3f77、0x41c8、0xb0、0x9e、0x08、0xad、0x63、0x27、0x2a、0xa3) ;

/* a84e689b-0dce-493a-a164-acde05478fc3 */ DEFINE_GUID (GUID_GPIOBUTTONS_DOCKMODE_INTERFACE、0xa84e689b、0x0dce、0x493a、0xa1、0x64、0xac、0xde、0x05、0x47、0x8f、0xc3) ;

这些接口允许通过针对相应的设备接口调用 WriteFile 来切换按钮或指示器的状态。

注意 为了防止多个提供程序之间发生潜在冲突,设备的句柄提供对设备的独占访问。

typedef enum {
    GPIO_BUTTON_POWER,
    GPIO_BUTTON_WINDOWS,
    GPIO_BUTTON_VOLUME_UP,
    GPIO_BUTTON_VOLUME_DOWN,
    GPIO_BUTTON_ROTATION_LOCK,
} GPIOBUTTONS_BUTTON_TYPE;