// Device type -- in the "User Defined" range." #define GPD_TYPE 40000 // The IOCTL function codes from 0x800 to 0xFFF are for customer use. #define IOCTL_GPD_READ_PORT_UCHAR \ CTL_CODE( GPD_TYPE, 0x900, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_GPD_READ_PORT_USHORT \ CTL_CODE( GPD_TYPE, 0x901, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_GPD_READ_PORT_ULONG \ CTL_CODE( GPD_TYPE, 0x902, METHOD_BUFFERED, FILE_READ_ACCESS ) #define IOCTL_GPD_WRITE_PORT_UCHAR \ CTL_CODE(GPD_TYPE, 0x910, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_GPD_WRITE_PORT_USHORT \ CTL_CODE(GPD_TYPE, 0x911, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_GPD_WRITE_PORT_ULONG \ CTL_CODE(GPD_TYPE, 0x912, METHOD_BUFFERED, FILE_WRITE_ACCESS) typedef struct _GENPORT_WRITE_INPUT { ULONG PortNumber; // Port # to write to union { // Data to be output to port ULONG LongData; USHORT ShortData; UCHAR CharData; }; } GENPORT_WRITE_INPUT;