• Notice regarding image hosts and attachments. See here.

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