Serial Port Programming and Portmon

THT

THT

Associate
Joined
10 Mar 2004
Posts
998
I'm trying to emulate an existing program which writes to the Serial port.

Using Portmon, I can see that the existing application does the following:

Code:
0	0.00005559	LED.exe	IRP_MJ_CREATE	Serial0	SUCCESS	Options: Open 	
1	0.00000615	LED.exe	IOCTL_SERIAL_GET_TIMEOUTS	Serial0	SUCCESS		
2	0.00000168	LED.exe	IOCTL_SERIAL_SET_TIMEOUTS	Serial0	SUCCESS	RI:0 RM:10 RC:1000 WM:1 WC:1000	
3	0.00000168	LED.exe	IOCTL_SERIAL_GET_BAUD_RATE	Serial0	SUCCESS		
4	0.00000140	LED.exe	IOCTL_SERIAL_GET_LINE_CONTROL	Serial0	SUCCESS		
5	0.00000140	LED.exe	IOCTL_SERIAL_GET_CHARS	Serial0	SUCCESS		
6	0.00000168	LED.exe	IOCTL_SERIAL_GET_HANDFLOW	Serial0	SUCCESS		
7	0.00000140	LED.exe	IOCTL_SERIAL_GET_BAUD_RATE	Serial0	SUCCESS		
8	0.00000140	LED.exe	IOCTL_SERIAL_GET_LINE_CONTROL	Serial0	SUCCESS		
9	0.00000140	LED.exe	IOCTL_SERIAL_GET_CHARS	Serial0	SUCCESS		
10	0.00000168	LED.exe	IOCTL_SERIAL_GET_HANDFLOW	Serial0	SUCCESS		
11	0.00000950	LED.exe	IOCTL_SERIAL_SET_BAUD_RATE	Serial0	SUCCESS	Rate: 1200	
12	0.00000447	LED.exe	IOCTL_SERIAL_SET_RTS	Serial0	SUCCESS		
13	0.00000503	LED.exe	IOCTL_SERIAL_SET_DTR	Serial0	SUCCESS		
14	0.00000363	LED.exe	IOCTL_SERIAL_SET_LINE_CONTROL	Serial0	SUCCESS	StopBits: 1 Parity: NONE WordLength: 8	
15	0.00000196	LED.exe	IOCTL_SERIAL_SET_CHAR	Serial0	SUCCESS	EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13	
16	0.00000363	LED.exe	IOCTL_SERIAL_SET_HANDFLOW	Serial0	SUCCESS	Shake:1 Replace:40 XonLimit:2048 XoffLimit:512	
17	0.00000168	LED.exe	IOCTL_SERIAL_SET_QUEUE_SIZE	Serial0	SUCCESS	InSize: 4096 OutSize: 4096	
18	0.00000251	LED.exe	IOCTL_SERIAL_SET_WAIT_MASK	Serial0	SUCCESS	Mask: RXCHAR 	
19	0.00000196	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
20	0.00000251	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
21	0.00002123	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
22	0.00000196	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
23	0.00808846	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
24	0.08299211	LED.exe	IOCTL_SERIAL_WAIT_ON_MASK	Serial0	CANCELLED		
25	0.00000196	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
26	0.00828178	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: Y	
27	0.00000196	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
28	0.00828681	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
29	0.00000363	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
30	0.00722019	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
31	0.00000279	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
32	0.00828346	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
33	0.00000279	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
34	0.00826697	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
35	0.00000223	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
36	0.00810801	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
37	0.00000251	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
38	0.00827452	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
39	0.00000251	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
40	0.00827954	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: G	
41	0.00000223	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
42	0.00779568	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
43	0.00000251	LED.exe	IRP_MJ_CLEANUP	Serial0	SUCCESS		
44	0.10120364	LED.exe	IRP_MJ_CLOSE	Serial0	SUCCESS


So i worked out how to send all those messages to the serial port.

My application (according to portmon) does the following:

Code:
0	0.00005643	LED.exe	IRP_MJ_CREATE	Serial0	SUCCESS	Options: Open 	
1	0.00000279	LED.exe	IOCTL_SERIAL_GET_TIMEOUTS	Serial0	SUCCESS		
2	0.00000168	LED.exe	IOCTL_SERIAL_SET_TIMEOUTS	Serial0	SUCCESS	RI:0 RM:10 RC:1000 WM:1 WC:1000	
3	0.00000168	LED.exe	IOCTL_SERIAL_GET_BAUD_RATE	Serial0	SUCCESS		
4	0.00000140	LED.exe	IOCTL_SERIAL_GET_LINE_CONTROL	Serial0	SUCCESS		
5	0.00000168	LED.exe	IOCTL_SERIAL_GET_CHARS	Serial0	SUCCESS		
6	0.00000140	LED.exe	IOCTL_SERIAL_GET_HANDFLOW	Serial0	SUCCESS		
7	0.00000140	LED.exe	IOCTL_SERIAL_GET_BAUD_RATE	Serial0	SUCCESS		
8	0.00000670	LED.exe	IOCTL_SERIAL_GET_LINE_CONTROL	Serial0	SUCCESS		
9	0.00000140	LED.exe	IOCTL_SERIAL_GET_CHARS	Serial0	SUCCESS		
10	0.00000112	LED.exe	IOCTL_SERIAL_GET_HANDFLOW	Serial0	SUCCESS		
11	0.00000950	LED.exe	IOCTL_SERIAL_SET_BAUD_RATE	Serial0	SUCCESS	Rate: 1200	
12	0.00000419	LED.exe	IOCTL_SERIAL_SET_RTS	Serial0	SUCCESS		
13	0.00000447	LED.exe	IOCTL_SERIAL_SET_DTR	Serial0	SUCCESS		
14	0.00000335	LED.exe	IOCTL_SERIAL_SET_LINE_CONTROL	Serial0	SUCCESS	StopBits: 1 Parity: NONE WordLength: 8	
15	0.00000168	LED.exe	IOCTL_SERIAL_SET_CHAR	Serial0	SUCCESS	EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13	
16	0.00000307	LED.exe	IOCTL_SERIAL_SET_HANDFLOW	Serial0	SUCCESS	Shake:1 Replace:40 XonLimit:2048 XoffLimit:512	
17	0.00000140	LED.exe	IOCTL_SERIAL_SET_QUEUE_SIZE	Serial0	SUCCESS	InSize: 4096 OutSize: 4096	
18	0.00000251	LED.exe	IOCTL_SERIAL_SET_WAIT_MASK	Serial0	SUCCESS	Mask: RXCHAR 	
19	0.00000223	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
20	0.00000196	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
21	0.00002179	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
22	0.00000223	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
23	0.00821780	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
24	0.07483856	LED.exe	IOCTL_SERIAL_WAIT_ON_MASK	Serial0	CANCELLED		
25	0.00000307	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
26	0.00822842	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: Y	
27	0.00000559	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
28	0.00826362	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
29	0.00000279	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
30	0.00829631	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
31	0.00000531	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
32	0.00826753	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
33	0.00000559	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
34	0.00826641	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
35	0.00000587	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
36	0.00492018	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
37	0.00000559	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
38	0.00810103	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
39	0.00000615	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
40	0.00826194	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: G	
41	0.00000559	LED.exe	IOCTL_SERIAL_PURGE	Serial0	SUCCESS	Purge: TXABORT RXABORT TXCLEAR RXCLEAR	
42	0.00516798	LED.exe	IRP_MJ_WRITE	Serial0	SUCCESS	Length 1: .	
43	0.00001117	LED.exe	IRP_MJ_CLEANUP	Serial0	SUCCESS		
44	0.09967747	LED.exe	IRP_MJ_CLOSE	Serial0	SUCCESS

All looks good right? The same?

Hmm, thats what I thought, but my application does NOT do the same as the existing application.


Im missing something here - Its either something differemnt between the log files or Portmon is lying.

Does anyone have experience in this (PLEASE), cos its driving me barmy

Thanks
THT
 
Back
Top Bottom