📄 ntddser.h
字号:
} SERIAL_BASIC_SETTINGS, *PSERIAL_BASIC_SETTINGS;
//
// This structure is used to get the current error and
// general status of the driver.
//
typedef struct _SERIAL_STATUS {
ULONG Errors;
ULONG HoldReasons;
ULONG AmountInInQueue;
ULONG AmountInOutQueue;
BOOLEAN EofReceived;
BOOLEAN WaitForImmediate;
} SERIAL_STATUS,*PSERIAL_STATUS;
//
// This structure is used for XOFF counter ioctl. The xoff ioctl
// is used to support those subsystems that feel the need to emulate
// the serial chip in software.
//
// It has the following semantics:
//
// This io request is placed into the normal device write
// queue. That is, it will be queued behind any writes
// already given to the driver.
//
// When this request becomes the current request, the character
// specified in the field XoffChar will be sent, subject to
// all other flow control already defined.
//
// Immediately upon sending the character the driver will
// perform the following actions.
//
// A timer will be initiated that will expire after the
// number of milliseconds in the Timeout field of the
// SERIAL_XOFF_COUNTER structure.
//
// The driver will initialize a counter to the value specified
// in the Counter field of the SERIAL_XOFF_RECORD. The driver
// will decrement this counter whenever a character is received.
//
// This request will then be held by the driver. It will
// actually complete under the following circumstances:
//
// 1) If there is another "write" request behind it in the queue.
// The "xoff" request will be completed with the informational status
// STATUS_SERIAL_MORE_WRITES. The Information field of the
// IOSTATUS block will be set to 0.
//
// Note: By write request we mean another SERIAL_XOFF_COUNTER
// request, or a simple write request. If the only subsequent
// request is a flush request, the driver WILL NOT automatically
// complete the SERIAL_XOFF_COUNTER request. NOTE: Transmit
// immediate requests DO NOT count as a normal write, and therefore
// would not cause a counter request to complete.
//
// 2) The timer expires. The driver will complete the request
// with the informational status STATUS_SERIAL_COUNTER_TIMEOUT.
// The Information field of the IOSTATUS of the request will be set to 0.
//
// 3) The driver maintained counter goes to zero. (By implication,
// at least "Counter" number of characters have been received.)
// The request will be completed with a successful status
// of STATUS_SUCCESS. The Information field of the
// IOSTATUS of the request will be set to 0.
//
// 4) This is really a degenerate case of "1" above. The request
// is started and no request follow it on the queue. However
// at some point, before "2" or "3" above occur, another "write"
// request is started. This will cause the completion actions
// stated in "1" to occur.
//
// NOTE: This request being issued WILL NOT cause the normal flow
// control code of the driver to be invoked.
//
// NOTE: This request has no interaction with the IOCTL_SERIAL_WAIT_ON_MASK
// request. An application CAN NOT wait via the above ^^^^^^ ioctl
// on the counter going to zero. The application must synchronize
// with the particular IOCTL_SERIAL_XOFF_COUNTER request.
//
// NOTE: The Timeout value equal to zero would cause the counter
// to NEVER timeout. The only way that such a request could
// be killed at that point would be issue another write, or
// to purge the WRITE queue.
//
typedef struct _SERIAL_XOFF_COUNTER {
ULONG Timeout; // Zero based. In milliseconds
LONG Counter; // Must be greater than zero.
UCHAR XoffChar;
} SERIAL_XOFF_COUNTER,*PSERIAL_XOFF_COUNTER;
//
// The following structure (and defines) are passed back by
// the serial driver in response to the get properties ioctl.
//
#define SERIAL_SP_SERIALCOMM ((ULONG)0x00000001)
//
// Provider subtypes
//
#define SERIAL_SP_UNSPECIFIED ((ULONG)0x00000000)
#define SERIAL_SP_RS232 ((ULONG)0x00000001)
#define SERIAL_SP_PARALLEL ((ULONG)0x00000002)
#define SERIAL_SP_RS422 ((ULONG)0x00000003)
#define SERIAL_SP_RS423 ((ULONG)0x00000004)
#define SERIAL_SP_RS449 ((ULONG)0x00000005)
#define SERIAL_SP_MODEM ((ULONG)0X00000006)
#define SERIAL_SP_FAX ((ULONG)0x00000021)
#define SERIAL_SP_SCANNER ((ULONG)0x00000022)
#define SERIAL_SP_BRIDGE ((ULONG)0x00000100)
#define SERIAL_SP_LAT ((ULONG)0x00000101)
#define SERIAL_SP_TELNET ((ULONG)0x00000102)
#define SERIAL_SP_X25 ((ULONG)0x00000103)
//
// Provider capabilities flags.
//
#define SERIAL_PCF_DTRDSR ((ULONG)0x0001)
#define SERIAL_PCF_RTSCTS ((ULONG)0x0002)
#define SERIAL_PCF_CD ((ULONG)0x0004)
#define SERIAL_PCF_PARITY_CHECK ((ULONG)0x0008)
#define SERIAL_PCF_XONXOFF ((ULONG)0x0010)
#define SERIAL_PCF_SETXCHAR ((ULONG)0x0020)
#define SERIAL_PCF_TOTALTIMEOUTS ((ULONG)0x0040)
#define SERIAL_PCF_INTTIMEOUTS ((ULONG)0x0080)
#define SERIAL_PCF_SPECIALCHARS ((ULONG)0x0100)
#define SERIAL_PCF_16BITMODE ((ULONG)0x0200)
//
// Comm provider settable parameters.
//
#define SERIAL_SP_PARITY ((ULONG)0x0001)
#define SERIAL_SP_BAUD ((ULONG)0x0002)
#define SERIAL_SP_DATABITS ((ULONG)0x0004)
#define SERIAL_SP_STOPBITS ((ULONG)0x0008)
#define SERIAL_SP_HANDSHAKING ((ULONG)0x0010)
#define SERIAL_SP_PARITY_CHECK ((ULONG)0x0020)
#define SERIAL_SP_CARRIER_DETECT ((ULONG)0x0040)
//
// Settable baud rates in the provider.
//
#define SERIAL_BAUD_075 ((ULONG)0x00000001)
#define SERIAL_BAUD_110 ((ULONG)0x00000002)
#define SERIAL_BAUD_134_5 ((ULONG)0x00000004)
#define SERIAL_BAUD_150 ((ULONG)0x00000008)
#define SERIAL_BAUD_300 ((ULONG)0x00000010)
#define SERIAL_BAUD_600 ((ULONG)0x00000020)
#define SERIAL_BAUD_1200 ((ULONG)0x00000040)
#define SERIAL_BAUD_1800 ((ULONG)0x00000080)
#define SERIAL_BAUD_2400 ((ULONG)0x00000100)
#define SERIAL_BAUD_4800 ((ULONG)0x00000200)
#define SERIAL_BAUD_7200 ((ULONG)0x00000400)
#define SERIAL_BAUD_9600 ((ULONG)0x00000800)
#define SERIAL_BAUD_14400 ((ULONG)0x00001000)
#define SERIAL_BAUD_19200 ((ULONG)0x00002000)
#define SERIAL_BAUD_38400 ((ULONG)0x00004000)
#define SERIAL_BAUD_56K ((ULONG)0x00008000)
#define SERIAL_BAUD_128K ((ULONG)0x00010000)
#define SERIAL_BAUD_115200 ((ULONG)0x00020000)
#define SERIAL_BAUD_57600 ((ULONG)0x00040000)
#define SERIAL_BAUD_USER ((ULONG)0x10000000)
//
// Settable Data Bits
//
#define SERIAL_DATABITS_5 ((USHORT)0x0001)
#define SERIAL_DATABITS_6 ((USHORT)0x0002)
#define SERIAL_DATABITS_7 ((USHORT)0x0004)
#define SERIAL_DATABITS_8 ((USHORT)0x0008)
#define SERIAL_DATABITS_16 ((USHORT)0x0010)
#define SERIAL_DATABITS_16X ((USHORT)0x0020)
//
// Settable Stop and Parity bits.
//
#define SERIAL_STOPBITS_10 ((USHORT)0x0001)
#define SERIAL_STOPBITS_15 ((USHORT)0x0002)
#define SERIAL_STOPBITS_20 ((USHORT)0x0004)
#define SERIAL_PARITY_NONE ((USHORT)0x0100)
#define SERIAL_PARITY_ODD ((USHORT)0x0200)
#define SERIAL_PARITY_EVEN ((USHORT)0x0400)
#define SERIAL_PARITY_MARK ((USHORT)0x0800)
#define SERIAL_PARITY_SPACE ((USHORT)0x1000)
typedef struct _SERIAL_COMMPROP {
USHORT PacketLength;
USHORT PacketVersion;
ULONG ServiceMask;
ULONG Reserved1;
ULONG MaxTxQueue;
ULONG MaxRxQueue;
ULONG MaxBaud;
ULONG ProvSubType;
ULONG ProvCapabilities;
ULONG SettableParams;
ULONG SettableBaud;
USHORT SettableData;
USHORT SettableStopParity;
ULONG CurrentTxQueue;
ULONG CurrentRxQueue;
ULONG ProvSpec1;
ULONG ProvSpec2;
WCHAR ProvChar[1];
} SERIAL_COMMPROP,*PSERIAL_COMMPROP;
//
// Define masks for the rs-232 input and output.
//
#define SERIAL_DTR_STATE ((ULONG)0x00000001)
#define SERIAL_RTS_STATE ((ULONG)0x00000002)
#define SERIAL_CTS_STATE ((ULONG)0x00000010)
#define SERIAL_DSR_STATE ((ULONG)0x00000020)
#define SERIAL_RI_STATE ((ULONG)0x00000040)
#define SERIAL_DCD_STATE ((ULONG)0x00000080)
// begin_winioctl
//
// The following values follow the escape designator in the
// data stream if the LSRMST_INSERT mode has been turned on.
//
#define SERIAL_LSRMST_ESCAPE ((UCHAR)0x00)
//
// Following this value is the contents of the line status
// register, and then the character in the RX hardware when
// the line status register was encountered.
//
#define SERIAL_LSRMST_LSR_DATA ((UCHAR)0x01)
//
// Following this value is the contents of the line status
// register. No error character follows
//
#define SERIAL_LSRMST_LSR_NODATA ((UCHAR)0x02)
//
// Following this value is the contents of the modem status
// register.
//
#define SERIAL_LSRMST_MST ((UCHAR)0x03)
//
// Bit values for FIFO Control Register
//
#define SERIAL_IOC_FCR_FIFO_ENABLE ((ULONG)0x00000001)
#define SERIAL_IOC_FCR_RCVR_RESET ((ULONG)0x00000002)
#define SERIAL_IOC_FCR_XMIT_RESET ((ULONG)0x00000004)
#define SERIAL_IOC_FCR_DMA_MODE ((ULONG)0x00000008)
#define SERIAL_IOC_FCR_RES1 ((ULONG)0x00000010)
#define SERIAL_IOC_FCR_RES2 ((ULONG)0x00000020)
#define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB ((ULONG)0x00000040)
#define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB ((ULONG)0x00000080)
//
// Bit values for Modem Control Register
//
#define SERIAL_IOC_MCR_DTR ((ULONG)0x00000001)
#define SERIAL_IOC_MCR_RTS ((ULONG)0x00000002)
#define SERIAL_IOC_MCR_OUT1 ((ULONG)0x00000004)
#define SERIAL_IOC_MCR_OUT2 ((ULONG)0x00000008)
#define SERIAL_IOC_MCR_LOOP ((ULONG)0x00000010)
// end_winioctl
//
// Serenum internal ioctl's
//
#undef PHYSICAL_ADDRESS
#define PHYSICAL_ADDRESS LARGE_INTEGER
typedef struct _SERENUM_PORT_DESC
{
IN ULONG Size; // sizeof (struct _PORT_DESC)
OUT PVOID PortHandle;
OUT PHYSICAL_ADDRESS PortAddress;
USHORT Reserved[1];
} SERENUM_PORT_DESC, * PSERENUM_PORT_DESC;
// **************************************************************************
// Internal IOCTL interface for (pdo)
// The HID to legacy serial port minidriver uses this interface to
// find the address of the device.
// **************************************************************************
#define IOCTL_INTERNAL_SERENUM_REMOVE_SELF \
CTL_CODE(FILE_DEVICE_SERENUM, 129, METHOD_NEITHER, FILE_ANY_ACCESS)
// of which IO_STACK_LOCATION->Parameters.Others.Argument1 is set to
// a pointer to struct _SERENUM_SER_PARAMETERS
typedef
UCHAR
(*PSERENUM_READPORT) (
PVOID SerPortAddress
);
typedef
VOID
(*PSERENUM_WRITEPORT) (
PVOID SerPortAddress,
UCHAR Value
);
typedef enum _SERENUM_PORTION {
SerenumFirstHalf,
SerenumSecondHalf,
SerenumWhole
} SERENUM_PORTION;
typedef struct _SERENUM_PORT_PARAMETERS
{
IN ULONG Size; // sizeof (SERENUM_GET_PORT_PARAMETERS)
OUT PSERENUM_READPORT ReadAccessor; // read the serial port
OUT PSERENUM_WRITEPORT WriteAccessor; // write the serial port
OUT PVOID SerPortAddress; // token to read this serial port
OUT PVOID HardwareHandle; // a handle to this particular PDO.
OUT SERENUM_PORTION Portion;
OUT USHORT NumberAxis; // legacy joysticks only
USHORT Reserved [3];
} SERENUM_PORT_PARAMETERS, *PSERENUM_PORT_PARAMETERS;
#ifdef __cplusplus
}
#endif
#endif // _NTDDSER_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -