#define IID_IGPIO 0x00000003 /* GPIO interface */
 typedef struct tagIGPIOVtbl
 {
 ULONG (*Write)(IGPIO *This, ULONG GPIO, ULONG Value);
 ULONG (*Read)(IGPIO *This, ULONG GPIO);
 } IGPIOVtbl; typedef struct tagIGPIO
 {
 struct tagIGPIOVtbl *lpVtbl;
 } IGPIO; #define GPIO0 0
 #define GPIO1 1
 #define GPIO2 2
 #define GPIO3 3
 #define GPIO4 4
 #define GPIO5 5
 #define GPIO6 6
 #define GPIO7 7
 /* write a gpio hi or low */
 #define IGPIO_Write(This, gpio, v)(This)->lpVtbl->Write(This, gpio, v)
 /* read a gpio value */
 #define IGPIO_Read(This, gpio)(This)->lpVtbl->Read(This, gpio)
 IGPIO *pIGpio = 0;
 // call this AFTER MPEGDriverEntry
 DWORD dw = FMPQueryInterface (IID_IGPIO, (void **)pIGpio);
 ASSERT (pIGpio);
 if (pIGpio)
     IGPIO_Write (pIGpio, GPIO7, 0); // pulls GPIO7 low1 pulls it high)