📄 ntddser.inc
字号:
comment ^
Module Name:
ntddser.inc
Abstract:
This is the include file that defines all constants and types for
accessing the Serial device.
Author:
Four-F (four-f@mail.ru)
Last update:
09-July-2004
^
IFNDEF _NTDDSER_
_NTDDSER_ equ 1
IFNDEF CTL_CODE
CTL_CODE MACRO DeviceType:=<0>, Function:=<0>, Method:=<0>, Access:=<0>
EXITM %(((DeviceType) SHL 16) OR ((Access) SHL 14) OR ((Function) SHL 2) OR (Method))
ENDM
ENDIF
; NtDeviceIoControlFile IoControlCode values for this device.
IOCTL_SERIAL_SET_BAUD_RATE equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 1,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_QUEUE_SIZE equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 2,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_LINE_CONTROL equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 3,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_BREAK_ON equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 4,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_BREAK_OFF equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 5,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_IMMEDIATE_CHAR equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 6,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_TIMEOUTS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 7,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_TIMEOUTS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 8,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_DTR equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 9,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_CLR_DTR equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,10,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_RESET_DEVICE equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,11,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_RTS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,12,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_CLR_RTS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,13,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_XOFF equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,14,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_XON equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,15,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_WAIT_MASK equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,16,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_WAIT_MASK equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,17,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_WAIT_ON_MASK equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,18,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_PURGE equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,19,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_BAUD_RATE equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,20,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_LINE_CONTROL equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,21,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_CHARS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,22,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_CHARS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,23,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_HANDFLOW equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,24,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_HANDFLOW equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,25,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_MODEMSTATUS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,26,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_COMMSTATUS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,27,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_XOFF_COUNTER equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,28,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_PROPERTIES equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,29,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_DTRRTS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,30,METHOD_BUFFERED,FILE_ANY_ACCESS)
; Serenum reserves function codes between 128 and 255. Do not use.
; begin_winioctl
IOCTL_SERIAL_LSRMST_INSERT equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERENUM_EXPOSE_HARDWARE equ CTL_CODE(FILE_DEVICE_SERENUM,128,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERENUM_REMOVE_HARDWARE equ CTL_CODE(FILE_DEVICE_SERENUM,129,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERENUM_PORT_DESC equ CTL_CODE(FILE_DEVICE_SERENUM,130,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERENUM_GET_PORT_NAME equ CTL_CODE(FILE_DEVICE_SERENUM,131,METHOD_BUFFERED,FILE_ANY_ACCESS)
; end_winioctl
IOCTL_SERIAL_CONFIG_SIZE equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,32,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_COMMCONFIG equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,33,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_COMMCONFIG equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,34,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_STATS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,35,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_CLEAR_STATS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,36,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_GET_MODEM_CONTROL equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,37,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_MODEM_CONTROL equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,38,METHOD_BUFFERED,FILE_ANY_ACCESS)
IOCTL_SERIAL_SET_FIFO_CONTROL equ CTL_CODE(FILE_DEVICE_SERIAL_PORT,39,METHOD_BUFFERED,FILE_ANY_ACCESS)
; internal serial IOCTL's
IOCTL_SERIAL_INTERNAL_DO_WAIT_WAKE equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
IOCTL_SERIAL_INTERNAL_CANCEL_WAIT_WAKE equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
IOCTL_SERIAL_INTERNAL_RESTORE_SETTINGS equ CTL_CODE(FILE_DEVICE_SERIAL_PORT, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
SERIALPERF_STATS STRUCT
ReceivedCount DWORD ?
TransmittedCount DWORD ?
FrameErrorCount DWORD ?
SerialOverrunErrorCount DWORD ?
BufferOverrunErrorCount DWORD ?
ParityErrorCount DWORD ?
SERIALPERF_STATS ENDS
PSERIALPERF_STATS typedef ptr SERIALPERF_STATS
SERIALCONFIG STRUCT
_Size DWORD ?
Version WORD ?
WORD ? ; padding
SubType DWORD ?
ProvOffset DWORD ?
ProviderSize DWORD ?
ProviderData WORD 1 dup(?) ; WCHAR
WORD ? ; padding
SERIALCONFIG ENDS
PSERIALCONFIG typedef ptr SERIALCONFIG
; NtDeviceIoControlFile InputBuffer/OutputBuffer record structures for
; this device.
; This structure used to set line parameters.
SERIAL_LINE_CONTROL STRUCT
StopBits BYTE ?
Parity BYTE ?
WordLength BYTE ?
SERIAL_LINE_CONTROL ENDS
PSERIAL_LINE_CONTROL typedef ptr SERIAL_LINE_CONTROL
SERIAL_TIMEOUTS STRUCT
ReadIntervalTimeout DWORD ?
ReadTotalTimeoutMultiplier DWORD ?
ReadTotalTimeoutConstant DWORD ?
WriteTotalTimeoutMultiplier DWORD ?
WriteTotalTimeoutConstant DWORD ?
SERIAL_TIMEOUTS ENDS
PSERIAL_TIMEOUTS typedef ptr SERIAL_TIMEOUTS
; This structure used to resize the input/output buffers.
; An error code will be returned if the size exceeds the
; drivers capacity. The driver reserves the right to
; allocate a larger buffer.
SERIAL_QUEUE_SIZE STRUCT
InSize DWORD ?
OutSize DWORD ?
SERIAL_QUEUE_SIZE ENDS
PSERIAL_QUEUE_SIZE typedef ptr SERIAL_QUEUE_SIZE
; This structure used by set baud rate
SERIAL_BAUD_RATE STRUCT
BaudRate DWORD ?
SERIAL_BAUD_RATE ENDS
PSERIAL_BAUD_RATE typedef ptr SERIAL_BAUD_RATE
; Defines the bitmask that the driver can used to notify
; app of various changes in the state of the UART.
SERIAL_EV_RXCHAR equ 0001 ; Any Character received
SERIAL_EV_RXFLAG equ 0002 ; Received certain character
SERIAL_EV_TXEMPTY equ 0004 ; Transmitt Queue Empty
SERIAL_EV_CTS equ 0008 ; CTS changed state
SERIAL_EV_DSR equ 0010h ; DSR changed state
SERIAL_EV_RLSD equ 0020h ; RLSD changed state
SERIAL_EV_BREAK equ 0040h ; BREAK received
SERIAL_EV_ERR equ 0080h ; Line status error occurred
SERIAL_EV_RING equ 0100h ; Ring signal detected
SERIAL_EV_PERR equ 0200h ; Printer error occured
SERIAL_EV_RX80FULL equ 0400h ; Receive buffer is 80 percent full
SERIAL_EV_EVENT1 equ 0800h ; Provider specific event 1
SERIAL_EV_EVENT2 equ 1000h ; Provider specific event 2
; +
; A longword is used to send down a mask that
; instructs the driver what to purge.
;
; SERIAL_PURGE_TXABORT - Implies the current and all pending writes.
; SERIAL_PURGE_RXABORT - Implies the current and all pending reads.
; SERIAL_PURGE_TXCLEAR - Implies the transmit buffer if exists
; SERIAL_PURGE_RXCLEAR - Implies the receive buffer if exists.
; -
SERIAL_PURGE_TXABORT equ 00000001
SERIAL_PURGE_RXABORT equ 00000002
SERIAL_PURGE_TXCLEAR equ 00000004
SERIAL_PURGE_RXCLEAR equ 00000008
; Communication defines
STOP_BIT_1 equ 0
STOP_BITS_1_5 equ 1
STOP_BITS_2 equ 2
NO_PARITY equ 0
ODD_PARITY equ 1
EVEN_PARITY equ 2
MARK_PARITY equ 3
SPACE_PARITY equ 4
; +
; This structure is used to set and retrieve the special characters
; used by the nt serial driver.
;
; Note that the driver will return an error if xonchar == xoffchar.
; -
SERIAL_CHARS STRUCT
EofChar BYTE ?
ErrorChar BYTE ?
BreakChar BYTE ?
EventChar BYTE ?
XonChar BYTE ?
XoffChar BYTE ?
SERIAL_CHARS ENDS
PSERIAL_CHARS typedef ptr SERIAL_CHARS
; +
; This structure is used to contain the flow control
; and handshaking setup.
;
; A reasonably precise explaination of how they all
; work can be found in the OS/2 tech references.
;
; For Xon/Xofflimit:
;
; When there are more characters then
;
; (typeaheadbuffersize - xofflimit)
;
; in the typeahead buffer then the driver will perform all flow
; control that the app has enabled so that the sender will (hopefully)
; stop sending characters.
;
; When there are less than xonlimit number of characters in the
; typeahead buffer the driver will perform all flow control that
; the app has enabled so that the sender will hopefully start sending
; characters again.
;
; It should be noted that if Xoff character is sent then the
; driver will also stop transmitting any more characters. This is to
; provide support for those systems that take any character that
; follows an Xoff as an implied Xon.
; -
SERIAL_HANDFLOW STRUCT
ControlHandShake DWORD ?
FlowReplace DWORD ?
XonLimit SDWORD ?
XoffLimit SDWORD ?
SERIAL_HANDFLOW ENDS
PSERIAL_HANDFLOW typedef ptr SERIAL_HANDFLOW
SERIAL_DTR_MASK equ 03
SERIAL_DTR_CONTROL equ 01
SERIAL_DTR_HANDSHAKE equ 02
SERIAL_CTS_HANDSHAKE equ 08
SERIAL_DSR_HANDSHAKE equ 10h
SERIAL_DCD_HANDSHAKE equ 20h
SERIAL_OUT_HANDSHAKEMASK equ 38h
SERIAL_DSR_SENSITIVITY equ 40h
SERIAL_ERROR_ABORT equ 80000000h
SERIAL_CONTROL_INVALID equ 7fffff84h
SERIAL_AUTO_TRANSMIT equ 01
SERIAL_AUTO_RECEIVE equ 02
SERIAL_ERROR_CHAR equ 04
SERIAL_NULL_STRIPPING equ 08h
SERIAL_BREAK_CHAR equ 10h
SERIAL_RTS_MASK equ 0c0h
SERIAL_RTS_CONTROL equ 40h
SERIAL_RTS_HANDSHAKE equ 80h
SERIAL_TRANSMIT_TOGGLE equ 0c0h
SERIAL_XOFF_CONTINUE equ 80000000h
SERIAL_FLOW_INVALID equ 7fffff20h
; These are the following reasons that the device could be holding.
SERIAL_TX_WAITING_FOR_CTS equ 00000001
SERIAL_TX_WAITING_FOR_DSR equ 00000002
SERIAL_TX_WAITING_FOR_DCD equ 00000004
SERIAL_TX_WAITING_FOR_XON equ 00000008
SERIAL_TX_WAITING_XOFF_SENT equ 00000010h
SERIAL_TX_WAITING_ON_BREAK equ 00000020h
SERIAL_RX_WAITING_FOR_DSR equ 00000040h
; These are the error values that can be returned by the driver.
SERIAL_ERROR_BREAK equ 00000001
SERIAL_ERROR_FRAMING equ 00000002
SERIAL_ERROR_OVERRUN equ 00000004
SERIAL_ERROR_QUEUEOVERRUN equ 00000008
SERIAL_ERROR_PARITY equ 00000010h
; This structure is used by IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS
; and IOCTL_SERIAL_INTERNAL_RESTORE_SETTINGS
SERIAL_BASIC_SETTINGS STRUCT
Timeouts SERIAL_TIMEOUTS <>
HandFlow SERIAL_HANDFLOW <>
RxFifo DWORD ?
TxFifo DWORD ?
SERIAL_BASIC_SETTINGS ENDS
PSERIAL_BASIC_SETTINGS typedef ptr SERIAL_BASIC_SETTINGS
; This structure is used to get the current error and
; general status of the driver.
SERIAL_STATUS STRUCT
Errors DWORD ?
HoldReasons DWORD ?
AmountInInQueue DWORD ?
AmountInOutQueue DWORD ?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -