xref: /illumos-gate/usr/src/uts/common/smbsrv/nmpipes.h (revision e4d060fb4c00d44cd578713eb9a921f594b733b8)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef _SMBSRV_NMPIPES_H
27 #define	_SMBSRV_NMPIPES_H
28 
29 /*
30  * This file defines pre-defined and system common named pipes.
31  *
32  * Named pipes are a simple IPC mechanism supported by Windows 9x, NT
33  * and 2000. The Windows named pipe implementation supports reliable
34  * one-way and two-way transport independent network messaging. The
35  * names follow the universal naming convention (UNC) defined for the
36  * Windows redirector: \\[server]\[share]\[path]name. There is a good
37  * overview of named pipes in Network Programming for Microsoft Windows
38  * Chapter 4. The redirector is described in Chapter 2. UNC names are
39  * case-insensitive.
40  *
41  * Network Programming for Microsoft Windows
42  * Anthony Jones and Jim Ohlund
43  * Microsoft Press, ISBN 0-7356-0560-2
44  *
45  * Microsoft RPC, which is derived from DCE RPC, uses SMB named pipes
46  * as its transport mechanism. In addition to the pipe used to open
47  * each connection, a named pipe also appears in the bind response as
48  * a secondary address port. Sometimes the secondary address port is
49  * the same and sometimes it is different. The following associations
50  * have been observed.
51  *
52  *		LSARPC		lsass
53  *		NETLOGON	lsass
54  *		SAMR		lsass
55  *		SPOOLSS		spoolss
56  *		SRVSVC		ntsvcs
57  *		SVCCTL		ntsvcs
58  *		WINREG		winreg
59  *		WKSSVC		ntsvcs
60  *		EVENTLOG	ntsvcs
61  *		LLSRPC		llsrpc
62  *
63  * Further information on RPC named pipes is available in the following
64  * references.
65  *
66  * RPC for NT
67  * Guy R. Eddon
68  * R&D PUblications, ISBN 0-87930-450-2
69  *
70  * Network Programming in Windows NT
71  * Alok K. Sinha
72  * Addison-Wesley, ISBN 0-201-59056-5
73  *
74  * DCE/RPC over SMB Samba and Windows NT Domain Internals
75  * Luke Kenneth Casson Leighton
76  * Macmillan Technical Publishing, ISBN 1-57870-150-3
77  */
78 
79 
80 #ifdef __cplusplus
81 extern "C" {
82 #endif
83 
84 
85 /*
86  * Well-known or pre-defined Windows named pipes. Typically used
87  * with SmbNtCreateAndX and/or SmbTransactNmPipe. When passed to
88  * SmbNtCreateAndX the \PIPE prefix is often missing. These names
89  * are presented as observed on the wire but should be treated in
90  * a case-insensitive manner.
91  */
92 #define	PIPE_LANMAN			"\\PIPE\\LANMAN"
93 #define	PIPE_NETLOGON			"\\PIPE\\NETLOGON"
94 #define	PIPE_LSARPC			"\\PIPE\\lsarpc"
95 #define	PIPE_SAMR			"\\PIPE\\samr"
96 #define	PIPE_SPOOLSS			"\\PIPE\\spoolss"
97 #define	PIPE_SRVSVC			"\\PIPE\\srvsvc"
98 #define	PIPE_SVCCTL			"\\PIPE\\svcctl"
99 #define	PIPE_WINREG			"\\PIPE\\winreg"
100 #define	PIPE_WKSSVC			"\\PIPE\\wkssvc"
101 #define	PIPE_EVENTLOG			"\\PIPE\\EVENTLOG"
102 #define	PIPE_LSASS			"\\PIPE\\lsass"
103 #define	PIPE_NTSVCS			"\\PIPE\\ntsvcs"
104 #define	PIPE_ATSVC			"\\PIPE\\atsvc"
105 #define	PIPE_BROWSESS			"\\PIPE\\browsess"
106 #define	PIPE_WINSSVC			"\\PIPE\\winssvc"
107 #define	PIPE_WINSMGR			"\\PIPE\\winsmgr"
108 #define	PIPE_LLSRPC			"\\PIPE\\llsrpc"
109 #define	PIPE_REPL			"\\PIPE\\repl"
110 
111 /*
112  * Named pipe function codes (NTDDK).
113  */
114 #define	TRANS_SET_NMPIPE_STATE		0x01
115 #define	TRANS_RAW_READ_NMPIPE		0x11
116 #define	TRANS_QUERY_NMPIPE_STATE	0x21
117 #define	TRANS_QUERY_NMPIPE_INFO		0x22
118 #define	TRANS_PEEK_NMPIPE		0x23
119 #define	TRANS_TRANSACT_NMPIPE		0x26
120 #define	TRANS_RAW_WRITE_NMPIPE		0x31
121 #define	TRANS_READ_NMPIPE		0x36
122 #define	TRANS_WRITE_NMPIPE		0x37
123 #define	TRANS_WAIT_NMPIPE		0x53
124 #define	TRANS_CALL_NMPIPE		0x54
125 
126 /*
127  * SMB pipe handle state bits used by Query/SetNamedPipeHandleState.
128  * These numbers are the bit locations of the fields in the handle state.
129  */
130 #define	PIPE_COMPLETION_MODE_BITS	15
131 #define	PIPE_PIPE_END_BITS		14
132 #define	PIPE_PIPE_TYPE_BITS		10
133 #define	PIPE_READ_MODE_BITS		8
134 #define	PIPE_MAXIMUM_INSTANCES_BITS	0
135 
136 /*
137  * DosPeekNmPipe pipe states.
138  */
139 #define	PIPE_STATE_DISCONNECTED		0x0001
140 #define	PIPE_STATE_LISTENING		0x0002
141 #define	PIPE_STATE_CONNECTED		0x0003
142 #define	PIPE_STATE_CLOSING		0x0004
143 
144 /*
145  * DosCreateNPipe and DosQueryNPHState state.
146  */
147 #define	SMB_PIPE_READMODE_BYTE		0x0000
148 #define	SMB_PIPE_READMODE_MESSAGE	0x0100
149 #define	SMB_PIPE_TYPE_BYTE		0x0000
150 #define	SMB_PIPE_TYPE_MESSAGE		0x0400
151 #define	SMB_PIPE_END_CLIENT		0x0000
152 #define	SMB_PIPE_END_SERVER		0x4000
153 #define	SMB_PIPE_WAIT			0x0000
154 #define	SMB_PIPE_NOWAIT			0x8000
155 #define	SMB_PIPE_UNLIMITED_INSTANCES	0x00FF
156 
157 
158 #ifdef __cplusplus
159 }
160 #endif
161 
162 
163 #endif /* _SMBSRV_NMPIPES_H */
164