//
// Back pointer to the Device Object created for this port.
//
PDEVICE_OBJECT Self;
//
// Pointer to the active Class DeviceObject;
// If the AFOAOFA (all for one and one for all) switch is on then this
// points to the device object named as the first keyboard.
//
PDEVICE_OBJECT TrueClassDevice;
//
// The Target port device Object to which all IRPs are sent.
//
PDEVICE_OBJECT TopPort;
//
// The PDO if applicable.
//
PDEVICE_OBJECT PDO;
//
// A remove lock to keep track of outstanding I/Os to prevent the device
// object from leaving before such time as all I/O has been completed.
//
IO_REMOVE_LOCK RemoveLock;
//
// If this port a Plug and Play port
//
BOOLEAN PnP;
BOOLEAN Started;
BOOLEAN AllowDisable;
KSPIN_LOCK WaitWakeSpinLock;
//
// Is the Trusted Subsystem Connected
//
ULONG TrustedSubsystemCount;
//
// Number of input data items currently in the InputData queue.
//
ULONG InputCount;
//
// A Unicode string pointing to the symbolic link for the Device Interface
// of this device object.
//
UNICODE_STRING SymbolicLinkName;
//
// Start of the class input data queue (really a circular buffer).
//
PKEYBOARD_INPUT_DATA InputData;
//
// Insertion pointer for InputData.
//
PKEYBOARD_INPUT_DATA DataIn;
//
// Removal pointer for InputData.
//
PKEYBOARD_INPUT_DATA DataOut;
//
// Only used for a legacy port device
//
LIST_ENTRY Link;
//
// Used only for a legacy port device when grand master mode is off
//
PFILE_OBJECT File;
//
// Used for a legacy port device
//
BOOLEAN Enabled;
//
// Indicates whether it is okay to log overflow errors.
//
BOOLEAN OkayToLogOverflow;
//
// Indicates whether it is okay to send wait wake irps down the stack
// (does NOT reflect if the bus can implement or not)
//
BOOLEAN WaitWakeEnabled;
//
// Indicates whether we have received a surprise removed irp
//
BOOLEAN SurpriseRemoved;