⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ntddser.inc

📁 这是asm驱动的开发包
💻 INC
📖 第 1 页 / 共 2 页
字号:
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 + -