xref: /titanic_50/usr/src/uts/common/smbsrv/ndl/lsarpc.ndl (revision 6a634c9dca3093f3922e4b7ab826d7bdf17bf78e)
1da6c28aaSamw/*
2da6c28aaSamw * CDDL HEADER START
3da6c28aaSamw *
4da6c28aaSamw * The contents of this file are subject to the terms of the
5da6c28aaSamw * Common Development and Distribution License (the "License").
6da6c28aaSamw * You may not use this file except in compliance with the License.
7da6c28aaSamw *
8da6c28aaSamw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9da6c28aaSamw * or http://www.opensolaris.org/os/licensing.
10da6c28aaSamw * See the License for the specific language governing permissions
11da6c28aaSamw * and limitations under the License.
12da6c28aaSamw *
13da6c28aaSamw * When distributing Covered Code, include this CDDL HEADER in each
14da6c28aaSamw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15da6c28aaSamw * If applicable, add the following below this CDDL HEADER, with the
16da6c28aaSamw * fields enclosed by brackets "[]" replaced with your own identifying
17da6c28aaSamw * information: Portions Copyright [yyyy] [name of copyright owner]
18da6c28aaSamw *
19da6c28aaSamw * CDDL HEADER END
20da6c28aaSamw */
21da6c28aaSamw/*
22*fd9ee8b5Sjoyce mcintosh * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
23da6c28aaSamw */
24da6c28aaSamw
25da6c28aaSamw#ifndef _MLSVC_LSA_NDL_
26da6c28aaSamw#define _MLSVC_LSA_NDL_
27da6c28aaSamw
28da6c28aaSamw/*
29da6c28aaSamw * Local Security Authority RPC (LSARPC) interface definition.
30fe1c642dSBill Krier *
31fe1c642dSBill Krier * Names containing a backslash ('\') are known as qualified or composite
32fe1c642dSBill Krier * names.  The string preceding the backslash is assumed to be the domain
33fe1c642dSBill Krier * name and the string following the slash is assumed to be name to be
34fe1c642dSBill Krier * resolved within that domain.
35fe1c642dSBill Krier *
36fe1c642dSBill Krier * Names that do not contain a backslash are known as isolated names.
37fe1c642dSBill Krier * An isolated name may be a single label, such as john, or may be in
38fe1c642dSBill Krier * user principal name (UPN) form, such as john@example.com.
39da6c28aaSamw */
40da6c28aaSamw
41da6c28aaSamw#include "ndrtypes.ndl"
42da6c28aaSamw
43da6c28aaSamw
44da6c28aaSamw#define	LSARPC_OPNUM_CloseHandle			0x00
45faa1795aSjb150015#define	LSARPC_OPNUM_Delete				0x01
46da6c28aaSamw#define	LSARPC_OPNUM_EnumPrivileges			0x02
47da6c28aaSamw#define	LSARPC_OPNUM_QuerySecurityObject		0x03
48da6c28aaSamw#define	LSARPC_OPNUM_SetSecurityObject			0x04
49da6c28aaSamw#define	LSARPC_OPNUM_ChangePassword			0x05
50da6c28aaSamw#define	LSARPC_OPNUM_OpenPolicy				0x06
51da6c28aaSamw#define	LSARPC_OPNUM_QueryInfoPolicy			0x07
52da6c28aaSamw#define	LSARPC_OPNUM_SetInfoPolicy			0x08
53faa1795aSjb150015#define	LSARPC_OPNUM_ClearAuditLog			0x09
54da6c28aaSamw#define	LSARPC_OPNUM_CreateAccount			0x0a
55da6c28aaSamw#define	LSARPC_OPNUM_EnumerateAccounts			0x0b
56da6c28aaSamw#define	LSARPC_OPNUM_CreateTrustedDomain		0x0c
57da6c28aaSamw#define	LSARPC_OPNUM_EnumTrustedDomain			0x0d
58da6c28aaSamw#define	LSARPC_OPNUM_LookupNames			0x0e
59da6c28aaSamw#define	LSARPC_OPNUM_LookupSids				0x0f
60da6c28aaSamw#define	LSARPC_OPNUM_CreateSecret			0x10
61da6c28aaSamw#define	LSARPC_OPNUM_OpenAccount			0x11
62da6c28aaSamw#define	LSARPC_OPNUM_EnumPrivsAccount			0x12
63faa1795aSjb150015#define	LSARPC_OPNUM_AddAccountPrivs			0x13
64faa1795aSjb150015#define	LSARPC_OPNUM_RemoveAccountPrivs			0x14
65faa1795aSjb150015#define	LSARPC_OPNUM_GetAccountQuota			0x15
66faa1795aSjb150015#define	LSARPC_OPNUM_SetAccountQuota			0x16
67da6c28aaSamw#define	LSARPC_OPNUM_GetSystemAccessAccount		0x17
68faa1795aSjb150015#define	LSARPC_OPNUM_SetSystemAccessAccount		0x18
69faa1795aSjb150015#define	LSARPC_OPNUM_OpenTrustedDomain			0x19
70faa1795aSjb150015#define	LSARPC_OPNUM_QueryInfoTrustedDomain		0x1a
71faa1795aSjb150015#define	LSARPC_OPNUM_SetinfoTrustedDomain		0x1b
72da6c28aaSamw#define	LSARPC_OPNUM_OpenSecret				0x1c
73faa1795aSjb150015#define	LSARPC_OPNUM_SetSecret				0x1d
74faa1795aSjb150015#define	LSARPC_OPNUM_QuerySecret			0x1e
75da6c28aaSamw#define	LSARPC_OPNUM_LookupPrivValue			0x1f
76da6c28aaSamw#define	LSARPC_OPNUM_LookupPrivName			0x20
77da6c28aaSamw#define	LSARPC_OPNUM_LookupPrivDisplayName		0x21
78faa1795aSjb150015#define	LSARPC_OPNUM_DeleteObject			0x22
79faa1795aSjb150015#define	LSARPC_OPNUM_EnumAccountsWithUserRight		0x23
80faa1795aSjb150015#define	LSARPC_OPNUM_EnumAccountRights			0x24
81da6c28aaSamw#define	LSARPC_OPNUM_AddAccountRights			0x25
82faa1795aSjb150015#define	LSARPC_OPNUM_RemoveAccountRights		0x26
83faa1795aSjb150015#define	LSARPC_OPNUM_QueryTrustedDomainInfo		0x27
84faa1795aSjb150015#define	LSARPC_OPNUM_SetTrustedDomainInfo		0x28
85faa1795aSjb150015
86faa1795aSjb150015/* Windows 2000 */
87faa1795aSjb150015#define	LSARPC_OPNUM_DeleteTrustedDomain		0x29
88faa1795aSjb150015#define	LSARPC_OPNUM_StorePrivateData			0x2a
89faa1795aSjb150015#define	LSARPC_OPNUM_RetrievePrivateData		0x2b
90da6c28aaSamw#define	LSARPC_OPNUM_OpenPolicy2			0x2c
91da6c28aaSamw#define	LSARPC_OPNUM_GetConnectedUser			0x2d
92faa1795aSjb150015#define	LSARPC_OPNUM_QueryInfoPolicy2			0x2e
93faa1795aSjb150015#define	LSARPC_OPNUM_SetInfoPolicy2			0x2f
94faa1795aSjb150015#define	LSARPC_OPNUM_QueryTrustedDomainInfoByName	0x30
95faa1795aSjb150015#define	LSARPC_OPNUM_SetTrustedDomainInfoByName		0x31
96faa1795aSjb150015#define	LSARPC_OPNUM_EnumTrustedDomainsEx		0x32
97faa1795aSjb150015#define	LSARPC_OPNUM_CreateTrustedDomainEx		0x33
98faa1795aSjb150015#define	LSARPC_OPNUM_CloseTrustedDomainEx		0x34
99faa1795aSjb150015#define	LSARPC_OPNUM_QueryDomainInfoPolicy		0x35
100faa1795aSjb150015#define	LSARPC_OPNUM_SetDomainInfoPolicy		0x36
101faa1795aSjb150015#define	LSARPC_OPNUM_OpenTrustedDomainByName		0x37
102faa1795aSjb150015#define	LSARPC_OPNUM_TestCall				0x38
103da6c28aaSamw#define	LSARPC_OPNUM_LookupSids2			0x39
104da6c28aaSamw#define	LSARPC_OPNUM_LookupNames2			0x3a
105faa1795aSjb150015#define	LSARPC_OPNUM_CreateTrustedDomainEx2		0x3b
106da6c28aaSamw
107faa1795aSjb150015/* Windows 2000 SP3 */
108faa1795aSjb150015#define	LSARPC_OPNUM_CredWrite				0x3c
109faa1795aSjb150015#define	LSARPC_OPNUM_CredRead				0x3d
110faa1795aSjb150015#define	LSARPC_OPNUM_CredEnumerate			0x3e
111faa1795aSjb150015#define	LSARPC_OPNUM_CredWriteDomainCreds		0x3f
112faa1795aSjb150015#define	LSARPC_OPNUM_CredReadDomainCreds		0x40
113faa1795aSjb150015#define	LSARPC_OPNUM_CredDelete				0x41
114faa1795aSjb150015#define	LSARPC_OPNUM_CredGetTargetInfo			0x42
115faa1795aSjb150015#define	LSARPC_OPNUM_CredProfileLoaded			0x43
116faa1795aSjb150015#define	LSARPC_OPNUM_LookupNames3			0x44
117faa1795aSjb150015#define	LSARPC_OPNUM_CredGetSessionTypes		0x45
118faa1795aSjb150015#define	LSARPC_OPNUM_RegisterAuditEvent			0x46
119faa1795aSjb150015#define	LSARPC_OPNUM_GenAuditEvent			0x47
120faa1795aSjb150015#define	LSARPC_OPNUM_UnregisterAuditEvent		0x48
121faa1795aSjb150015#define	LSARPC_OPNUM_QueryForestTrustInfo		0x49
122faa1795aSjb150015#define	LSARPC_OPNUM_SetForestTrustInfo			0x4a
123faa1795aSjb150015#define	LSARPC_OPNUM_CredRename				0x4b
124faa1795aSjb150015#define	LSARPC_OPNUM_LookupSids3			0x4c
125faa1795aSjb150015#define	LSARPC_OPNUM_LookupNames4			0x4d
126faa1795aSjb150015#define	LSARPC_OPNUM_OpenPolicySce			0x4e
127faa1795aSjb150015
128faa1795aSjb150015/* Windows Server 2003 */
129faa1795aSjb150015#define	LSARPC_OPNUM_AdtRegisterSecurityEventSource	0x4f
130faa1795aSjb150015#define	LSARPC_OPNUM_AdtUnregisterSecurityEventSource	0x50
131faa1795aSjb150015#define	LSARPC_OPNUM_AdtReportSecurityEvent		0x51
132faa1795aSjb150015
133faa1795aSjb150015/* Windows Vista */
134faa1795aSjb150015#define	LSARPC_OPNUM_CredFindBestCredential		0x52
135faa1795aSjb150015#define	LSARPC_OPNUM_SetAuditPolicy			0x53
136faa1795aSjb150015#define	LSARPC_OPNUM_QueryAuditPolicy			0x54
137faa1795aSjb150015#define	LSARPC_OPNUM_EnumerateAuditPolicy		0x55
138faa1795aSjb150015#define	LSARPC_OPNUM_EnumerateAuditCategories		0x56
139faa1795aSjb150015#define	LSARPC_OPNUM_EnumerateAuditSubCategories	0x57
140faa1795aSjb150015#define	LSARPC_OPNUM_LookupAuditCategoryName		0x58
141faa1795aSjb150015#define	LSARPC_OPNUM_LookupAuditSubCategoryName		0x59
142faa1795aSjb150015#define	LSARPC_OPNUM_SetAuditSecurity			0x5a
143faa1795aSjb150015#define	LSARPC_OPNUM_QueryAuditSecurity			0x5b
144faa1795aSjb150015#define	LSARPC_OPNUM_CredReadByTokenHandle		0x5c
145faa1795aSjb150015#define	LSARPC_OPNUM_CredRestoreCredentials		0x5d
146faa1795aSjb150015#define	LSARPC_OPNUM_CredBackupCredentials		0x5e
147da6c28aaSamw
148da6c28aaSamw/*
149fe1c642dSBill Krier * Lookup levels.  Level 1 appears to mean only look on the local host and
150fe1c642dSBill Krier * level 2 means forward the request to the PDC.  On the PDC it probably
151fe1c642dSBill Krier * doesn't matter which level you use but on a BDC a level 1 lookup will
152fe1c642dSBill Krier * fail if the BDC doesn't have the info whereas a level 2 lookup will also
153fe1c642dSBill Krier * check with the PDC.
154da6c28aaSamw */
155fe1c642dSBill Krier#define	LSA_LOOKUP_WKSTA			1	/* Windows NT 3.1 */
156fe1c642dSBill Krier#define	LSA_LOOKUP_PDC				2
157fe1c642dSBill Krier#define	LSA_LOOKUP_TDL				3
158fe1c642dSBill Krier#define	LSA_LOOKUP_GC				4	/* Windows 2000 */
159fe1c642dSBill Krier#define	LSA_LOOKUP_XFORESTREFERRAL		5	/* Windows XP */
160fe1c642dSBill Krier#define	LSA_LOOKUP_XFORESTRESOLVE		6
161fe1c642dSBill Krier#define	LSA_LOOKUP_RODCREFERRALTOFULLDC		7	/* Windows Vista */
162da6c28aaSamw
163fe1c642dSBill Krier/*
164fe1c642dSBill Krier * Name/SID lookup flags
165fe1c642dSBill Krier */
166fe1c642dSBill Krier#define	LSA_LOOKUP_NAME_NOT_SPN			0x00000001
167fe1c642dSBill Krier#define	LSA_LOOKUP_NAME_MAYBE_XFOREST		0x00000002
168fe1c642dSBill Krier#define	LSA_LOOKUP_NAME_IN_DBVIEW		0x00000004
169fe1c642dSBill Krier
170fe1c642dSBill Krier/*
171fe1c642dSBill Krier * Name/SID lookup options
172fe1c642dSBill Krier *
173fe1c642dSBill Krier * 0x00000000	Lookup isolated names both locally and in domains/forests.
174fe1c642dSBill Krier * 0x80000000	Lookup isolated names (except for UPNs) only in the local
175fe1c642dSBill Krier *		account database.  Do not lookup UPNs.
176fe1c642dSBill Krier */
177fe1c642dSBill Krier#define	LSA_LOOKUP_OPT_ALL			0x00000000
178fe1c642dSBill Krier#define	LSA_LOOKUP_OPT_LOCAL			0x80000000
179fe1c642dSBill Krier
180fe1c642dSBill Krier/*
181fe1c642dSBill Krier * Client revision
182fe1c642dSBill Krier *
183fe1c642dSBill Krier * 0x00000001	Client does not understand DNS names or forests.
184fe1c642dSBill Krier * 0x00000002	Client understands DNS names and forests.
185fe1c642dSBill Krier *
186fe1c642dSBill Krier * Notes:
187fe1c642dSBill Krier *	0 means the same as 1
188fe1c642dSBill Krier *	Anything greater than 2 means the same as 2
189fe1c642dSBill Krier */
190fe1c642dSBill Krier#define	LSA_CLIENT_REVISION_NT			0x00000001
191fe1c642dSBill Krier#define	LSA_CLIENT_REVISION_AD			0x00000002
192da6c28aaSamw
193da6c28aaSamw/*
194da6c28aaSamw * Definition for a SID. The ndl compiler won't allow a typedef of
195da6c28aaSamw * a structure containing variable size members.
196da6c28aaSamw */
197da6c28aaSamwstruct mslsa_sid {
198da6c28aaSamw	BYTE		Revision;
199da6c28aaSamw	BYTE		SubAuthCount;
200da6c28aaSamw	BYTE		Authority[6];
201da6c28aaSamw  SIZE_IS(SubAuthCount)
202da6c28aaSamw	DWORD		SubAuthority[ANY_SIZE_ARRAY];
203da6c28aaSamw};
204da6c28aaSamw
205da6c28aaSamwstruct mslsa_string_desc {
206da6c28aaSamw	WORD		length;
207da6c28aaSamw	WORD		allosize;
208da6c28aaSamw	LPTSTR		str;
209da6c28aaSamw};
210da6c28aaSamwtypedef struct mslsa_string_desc mslsa_string_t;
211da6c28aaSamw
2128d7e4166Sjose borregoCONTEXT_HANDLE(mslsa_handle) mslsa_handle_t;
213da6c28aaSamw
214da6c28aaSamwstruct mslsa_luid {
215da6c28aaSamw	DWORD low_part;
216da6c28aaSamw	DWORD high_part;
217da6c28aaSamw};
218da6c28aaSamwtypedef struct mslsa_luid mslsa_luid_t;
219da6c28aaSamw
2208d7e4166Sjose borregostruct mslsa_guid {
2218d7e4166Sjose borrego	DWORD	data1;
2228d7e4166Sjose borrego	WORD	data2;
2238d7e4166Sjose borrego	WORD	data3;
2248d7e4166Sjose borrego	BYTE	data4[8];
2258d7e4166Sjose borrego};
2268d7e4166Sjose borregotypedef struct mslsa_guid mslsa_guid_t;
227da6c28aaSamw
228da6c28aaSamw/*
229da6c28aaSamw ***********************************************************************
230da6c28aaSamw * OpenPolicy2 obtains a handle for a remote LSA. This handle is
231da6c28aaSamw * required for all subsequent LSA requests.
232da6c28aaSamw *
233da6c28aaSamw * The server name should be the name of the target PDC or BDC, with
234da6c28aaSamw * the double backslash prefix.
235da6c28aaSamw *
236da6c28aaSamw * As far as I can tell, the mslsa_object_attributes structure can be
237da6c28aaSamw * all zero except for the length, which should be set to sizeof(struct
238da6c28aaSamw * mslsa_object_attributes).
239da6c28aaSamw *
240da6c28aaSamw * For read access, the desired access mask should contain the
241da6c28aaSamw * READ_CONTROL standard right and whatever policy rights are required.
242da6c28aaSamw * I haven't tried any update operations but if you get the access mask
243da6c28aaSamw * wrong you can crash the domain controller.
244da6c28aaSamw ***********************************************************************
245da6c28aaSamw */
246da6c28aaSamw
247da6c28aaSamw
248da6c28aaSamw/*
249da6c28aaSamw * From netmon:
250da6c28aaSamw *	length = 12
251da6c28aaSamw *	impersonation_level = 2
252da6c28aaSamw *	context_tracking_mode = 1
253da6c28aaSamw *	effective_only = 0
254da6c28aaSamw */
255da6c28aaSamwstruct mslsa_quality_of_service {
256da6c28aaSamw	DWORD length;
257da6c28aaSamw	WORD impersonation_level;
258da6c28aaSamw	BYTE context_tracking_mode;
259da6c28aaSamw	BYTE effective_only;
260da6c28aaSamw};
261da6c28aaSamw
262da6c28aaSamw
263da6c28aaSamwstruct mslsa_object_attributes {
264da6c28aaSamw	DWORD length;
265da6c28aaSamw	DWORD rootDirectory;
266da6c28aaSamw	DWORD objectName;
267da6c28aaSamw	DWORD attributes;
268da6c28aaSamw	DWORD securityDescriptor;
269da6c28aaSamw	struct mslsa_quality_of_service *qualityOfService;
270da6c28aaSamw};
271da6c28aaSamw
272da6c28aaSamw
273da6c28aaSamwOPERATION(LSARPC_OPNUM_OpenPolicy)
274da6c28aaSamwstruct mslsa_OpenPolicy {
275da6c28aaSamw	IN	DWORD	*servername;
276da6c28aaSamw	IN	struct mslsa_object_attributes attributes;
277da6c28aaSamw	IN	DWORD desiredAccess;
278da6c28aaSamw	OUT	mslsa_handle_t domain_handle;
279da6c28aaSamw	OUT	DWORD status;
280da6c28aaSamw};
281da6c28aaSamw
282da6c28aaSamwOPERATION(LSARPC_OPNUM_OpenPolicy2)
283da6c28aaSamwstruct mslsa_OpenPolicy2 {
284da6c28aaSamw	IN	LPTSTR servername;
285da6c28aaSamw	IN	struct mslsa_object_attributes attributes;
286da6c28aaSamw	IN	DWORD desiredAccess;
287da6c28aaSamw	OUT	mslsa_handle_t domain_handle;
288da6c28aaSamw	OUT	DWORD status;
289da6c28aaSamw};
290da6c28aaSamw
291da6c28aaSamw
292da6c28aaSamw/*
293da6c28aaSamw ***********************************************************************
294da6c28aaSamw * CloseHandle closes an association with the LSA. The returned handle
295da6c28aaSamw * will be all zero.
296da6c28aaSamw ***********************************************************************
297da6c28aaSamw */
298da6c28aaSamwOPERATION(LSARPC_OPNUM_CloseHandle)
299da6c28aaSamwstruct mslsa_CloseHandle {
300da6c28aaSamw	IN	mslsa_handle_t handle;
301da6c28aaSamw	OUT	mslsa_handle_t result_handle;
302da6c28aaSamw	OUT	DWORD status;
303da6c28aaSamw};
304da6c28aaSamw
305da6c28aaSamw
306da6c28aaSamw/*
307da6c28aaSamw ***********************************************************************
308da6c28aaSamw * EnumPrivileges
309da6c28aaSamw *
310da6c28aaSamw * Obtain a list of privilege names. This interface is not implemented
311da6c28aaSamw * yet The definition below has not been tested. This is a guess based
312da6c28aaSamw * on data available from netmon.
313da6c28aaSamw ***********************************************************************
314da6c28aaSamw */
315da6c28aaSamwstruct mslsa_PrivDef {
316da6c28aaSamw	mslsa_string_t name;
317da6c28aaSamw	mslsa_luid_t luid;
318da6c28aaSamw};
319da6c28aaSamw
320da6c28aaSamw
321da6c28aaSamwstruct mslsa_PrivEnumBuf {
322da6c28aaSamw	DWORD entries_read;
323da6c28aaSamw  SIZE_IS(entries_read)
324da6c28aaSamw	struct mslsa_PrivDef *def;
325da6c28aaSamw};
326da6c28aaSamw
327da6c28aaSamw
328da6c28aaSamwOPERATION(LSARPC_OPNUM_EnumPrivileges)
329da6c28aaSamwstruct mslsa_EnumPrivileges {
330da6c28aaSamw	IN	mslsa_handle_t handle;
331da6c28aaSamw	INOUT	DWORD enum_context;
332da6c28aaSamw	IN	DWORD max_length;
333da6c28aaSamw	OUT	REFERENCE struct mslsa_PrivEnumBuf *enum_buf;
334da6c28aaSamw	OUT	DWORD status;
335da6c28aaSamw};
336da6c28aaSamw
337da6c28aaSamw
338da6c28aaSamw/*
339da6c28aaSamw ***********************************************************************
340da6c28aaSamw * QuerySecurityObject. I'm not entirely sure how to set this up yet.
341da6c28aaSamw * I used the discovery RPC to scope it out. The structures are set up
342da6c28aaSamw * according to netmon and the assumption that a security descriptor
343da6c28aaSamw * on the wire looks like the regular user level security descriptor.
344da6c28aaSamw ***********************************************************************
345da6c28aaSamw */
346da6c28aaSamwstruct mslsa_SecurityDescriptor {
347da6c28aaSamw	BYTE revision;
348da6c28aaSamw	BYTE sbz1;
349da6c28aaSamw	WORD control;
350da6c28aaSamw	DWORD owner;
351da6c28aaSamw	DWORD group;
352da6c28aaSamw	DWORD sacl;
353da6c28aaSamw	DWORD dacl;
354da6c28aaSamw};
355da6c28aaSamw
356da6c28aaSamw
357da6c28aaSamwstruct mslsa_SecurityDescInfo {
358da6c28aaSamw	DWORD length;
359da6c28aaSamw  SIZE_IS(length)
360da6c28aaSamw  	BYTE *desc; /* temporary */
361da6c28aaSamw	/* struct mslsa_SecurityDescriptor *desc; */
362da6c28aaSamw};
363da6c28aaSamw
364da6c28aaSamw
365da6c28aaSamwOPERATION(LSARPC_OPNUM_QuerySecurityObject)
366da6c28aaSamwstruct mslsa_QuerySecurityObject {
367da6c28aaSamw	IN	mslsa_handle_t handle;
368da6c28aaSamw	IN	DWORD security_info;
369da6c28aaSamw	OUT	struct mslsa_SecurityDescInfo *desc_info;
370da6c28aaSamw	OUT	DWORD status;
371da6c28aaSamw};
372da6c28aaSamw
373da6c28aaSamw
374da6c28aaSamw/*
375da6c28aaSamw ***********************************************************************
376da6c28aaSamw * EnumerateAccounts and EnumerateTrustedDomain.
377da6c28aaSamw ***********************************************************************
378da6c28aaSamw */
379da6c28aaSamwstruct mslsa_AccountInfo {
380da6c28aaSamw	struct mslsa_sid *sid;
381da6c28aaSamw};
382da6c28aaSamw
383da6c28aaSamw
384da6c28aaSamwstruct mslsa_EnumAccountBuf {
385da6c28aaSamw	DWORD entries_read;
386da6c28aaSamw  SIZE_IS(entries_read)
387da6c28aaSamw	struct mslsa_AccountInfo *info;
388da6c28aaSamw};
389da6c28aaSamw
390da6c28aaSamw
391da6c28aaSamwOPERATION(LSARPC_OPNUM_EnumerateAccounts)
392da6c28aaSamwstruct mslsa_EnumerateAccounts {
393da6c28aaSamw	IN	mslsa_handle_t handle;
394da6c28aaSamw	INOUT	DWORD enum_context;
395da6c28aaSamw	IN	DWORD max_length;
396da6c28aaSamw	OUT	REFERENCE struct mslsa_EnumAccountBuf *enum_buf;
397da6c28aaSamw	OUT	DWORD status;
398da6c28aaSamw};
399da6c28aaSamw
400da6c28aaSamw
401da6c28aaSamwstruct mslsa_TrustedDomainInfo {
402da6c28aaSamw	mslsa_string_t name;
403da6c28aaSamw	struct mslsa_sid *sid;
404da6c28aaSamw};
405da6c28aaSamw
406da6c28aaSamw
407da6c28aaSamwstruct mslsa_EnumTrustedDomainBuf {
408da6c28aaSamw	DWORD entries_read;
409da6c28aaSamw  SIZE_IS(entries_read)
410da6c28aaSamw	struct mslsa_TrustedDomainInfo *info;
411da6c28aaSamw};
412da6c28aaSamw
413da6c28aaSamw
414da6c28aaSamwOPERATION(LSARPC_OPNUM_EnumTrustedDomain)
415da6c28aaSamwstruct mslsa_EnumTrustedDomain {
416da6c28aaSamw	IN	mslsa_handle_t handle;
417da6c28aaSamw	INOUT	DWORD enum_context;
418da6c28aaSamw	IN	DWORD max_length;
419da6c28aaSamw	OUT REFERENCE	struct mslsa_EnumTrustedDomainBuf *enum_buf;
420da6c28aaSamw	OUT	DWORD status;
421da6c28aaSamw};
422da6c28aaSamw
42329bd2886SAlan Wrightstruct mslsa_TrustedDomainInfoEx {
42429bd2886SAlan Wright	mslsa_string_t		dns_name;
42529bd2886SAlan Wright	mslsa_string_t		nb_name;
42629bd2886SAlan Wright	struct mslsa_sid	*sid;
42729bd2886SAlan Wright	DWORD			trust_direction;
42829bd2886SAlan Wright	DWORD			trust_type;
42929bd2886SAlan Wright	DWORD			trust_attrs;
43029bd2886SAlan Wright};
43129bd2886SAlan Wright
43229bd2886SAlan Wrightstruct mslsa_EnumTrustedDomainBufEx {
43329bd2886SAlan Wright	DWORD entries_read;
43429bd2886SAlan Wright  SIZE_IS(entries_read)
43529bd2886SAlan Wright	struct mslsa_TrustedDomainInfoEx *info;
43629bd2886SAlan Wright};
43729bd2886SAlan Wright
43829bd2886SAlan WrightOPERATION(LSARPC_OPNUM_EnumTrustedDomainsEx)
43929bd2886SAlan Wrightstruct mslsa_EnumTrustedDomainEx {
44029bd2886SAlan Wright	IN	mslsa_handle_t handle;
44129bd2886SAlan Wright	INOUT	DWORD enum_context;
44229bd2886SAlan Wright	IN	DWORD max_length;
44329bd2886SAlan Wright	OUT REFERENCE	struct mslsa_EnumTrustedDomainBufEx *enum_buf;
44429bd2886SAlan Wright	OUT	DWORD status;
44529bd2886SAlan Wright};
446da6c28aaSamw
447da6c28aaSamw/*
448da6c28aaSamw ***********************************************************************
449da6c28aaSamw * Definitions common to both LookupSids and LookupNames. Both return
450da6c28aaSamw * an mslsa_domain_table[]. Each interface also returns a specific
451da6c28aaSamw * table with entries which index the mslsa_domain_table[].
452da6c28aaSamw ***********************************************************************
453da6c28aaSamw */
454da6c28aaSamwstruct mslsa_domain_entry {
455da6c28aaSamw	mslsa_string_t domain_name;
456da6c28aaSamw	struct mslsa_sid *domain_sid;
457da6c28aaSamw};
458da6c28aaSamwtypedef struct mslsa_domain_entry mslsa_domain_entry_t;
459da6c28aaSamw
460da6c28aaSamw
461da6c28aaSamwstruct mslsa_domain_table {
462da6c28aaSamw	DWORD		n_entry;
463da6c28aaSamw  SIZE_IS(n_entry)
464da6c28aaSamw  	mslsa_domain_entry_t *entries;
465da6c28aaSamw	DWORD		max_n_entry;
466da6c28aaSamw};
467da6c28aaSamw
468da6c28aaSamw
469da6c28aaSamw/*
470da6c28aaSamw ***********************************************************************
471da6c28aaSamw * Definitions for LookupSids.
472da6c28aaSamw *
473da6c28aaSamw * The input parameters are:
474da6c28aaSamw *
475da6c28aaSamw *	A valid LSA handle obtained from an LsarOpenPolicy.
476da6c28aaSamw *	The table of SIDs to be looked up.
477da6c28aaSamw *	A table of names (probably empty).
478da6c28aaSamw *	The lookup level (local=1 or PDC=2).
479da6c28aaSamw *	An enumeration counter (used for continuation operations).
480da6c28aaSamw *
481da6c28aaSamw * The output results are:
482da6c28aaSamw *
483da6c28aaSamw *	A table of referenced domains.
484da6c28aaSamw *	A table of usernames.
485da6c28aaSamw *	The updated value of the enumeration counter.
486da6c28aaSamw *	The result status.
487da6c28aaSamw ***********************************************************************
488da6c28aaSamw */
489da6c28aaSamw
490da6c28aaSamwstruct mslsa_lup_sid_entry {
491da6c28aaSamw	struct mslsa_sid *psid;
492da6c28aaSamw};
493da6c28aaSamw
494da6c28aaSamwstruct mslsa_lup_sid_table {
495da6c28aaSamw	DWORD		n_entry;
496da6c28aaSamw    SIZE_IS(n_entry)
497da6c28aaSamw	struct mslsa_lup_sid_entry *entries;
498da6c28aaSamw};
499da6c28aaSamw
500da6c28aaSamwstruct mslsa_name_entry {
501da6c28aaSamw	WORD		sid_name_use;
502da6c28aaSamw	WORD		unknown_flags;
503da6c28aaSamw	mslsa_string_t	name;
504da6c28aaSamw	DWORD		domain_ix;		/* -1 means none */
505da6c28aaSamw};
506da6c28aaSamw
507da6c28aaSamwstruct mslsa_name_table {
508da6c28aaSamw	DWORD		n_entry;
509da6c28aaSamw    SIZE_IS(n_entry)
510da6c28aaSamw	struct mslsa_name_entry *entries;
511da6c28aaSamw};
512da6c28aaSamw
513da6c28aaSamwOPERATION(LSARPC_OPNUM_LookupSids)
514da6c28aaSamwstruct mslsa_LookupSids {
515da6c28aaSamw	IN	mslsa_handle_t	handle;
516da6c28aaSamw	IN	struct mslsa_lup_sid_table lup_sid_table;
517da6c28aaSamw
518da6c28aaSamw	OUT	struct mslsa_domain_table *domain_table;
519da6c28aaSamw	INOUT	struct mslsa_name_table name_table;
520da6c28aaSamw
521*fd9ee8b5Sjoyce mcintosh	IN	WORD lookup_level;
522da6c28aaSamw	INOUT	DWORD mapped_count;
523da6c28aaSamw 	OUT	DWORD status;
524da6c28aaSamw};
525da6c28aaSamw
526faa1795aSjb150015OPERATION(LSARPC_OPNUM_CreateSecret)
527faa1795aSjb150015struct mslsa_CreateSecret {
528faa1795aSjb150015	IN	mslsa_handle_t handle;
529faa1795aSjb150015	IN	mslsa_string_t name;
530faa1795aSjb150015	IN	DWORD access_mask;
531faa1795aSjb150015	OUT	mslsa_handle_t secret_handle;
532faa1795aSjb150015	OUT	DWORD status;
533faa1795aSjb150015};
534da6c28aaSamw
535da6c28aaSamw/*
536da6c28aaSamw ***********************************************************************
537da6c28aaSamw * Definitions for LookupNames.
538da6c28aaSamw *
539da6c28aaSamw * LookupNames requires the following input parameters.
540da6c28aaSamw *
541da6c28aaSamw *	A valid LSA handle obtained from an LsarOpenPolicy.
542da6c28aaSamw *	The table of names to be looked up.
543da6c28aaSamw *	A table of translated sids (probably empty).
544da6c28aaSamw *	The lookup level (local=1 or PDC=2).
545da6c28aaSamw *	An enumeration counter (used for continuation operations).
546da6c28aaSamw *
547da6c28aaSamw * The outputs are as follows.
548da6c28aaSamw *
549da6c28aaSamw *	A table of referenced domains.
550da6c28aaSamw *	A table of translated sids (actually rids).
551da6c28aaSamw *	The updated value of the enumeration counter.
552da6c28aaSamw *	The result status.
553da6c28aaSamw ***********************************************************************
554da6c28aaSamw */
555da6c28aaSamwstruct mslsa_lup_name_table {
556da6c28aaSamw	DWORD n_entry;
557da6c28aaSamw  SIZE_IS(n_entry)
558da6c28aaSamw	mslsa_string_t names[ANY_SIZE_ARRAY];
559da6c28aaSamw};
560da6c28aaSamw
561da6c28aaSamw
562da6c28aaSamwstruct mslsa_rid_entry {
563da6c28aaSamw	WORD sid_name_use;
564fe1c642dSBill Krier	WORD pad;
565da6c28aaSamw	DWORD rid;
566da6c28aaSamw	DWORD domain_index;
567da6c28aaSamw};
568da6c28aaSamw
569da6c28aaSamw
570da6c28aaSamwstruct mslsa_rid_table {
571da6c28aaSamw	DWORD n_entry;
572da6c28aaSamw  SIZE_IS(n_entry)
573da6c28aaSamw	struct mslsa_rid_entry *rids;
574da6c28aaSamw};
575da6c28aaSamw
576da6c28aaSamw
577da6c28aaSamwOPERATION(LSARPC_OPNUM_LookupNames)
578da6c28aaSamwstruct mslsa_LookupNames {
579da6c28aaSamw	IN	mslsa_handle_t handle;
580da6c28aaSamw	IN	REFERENCE	struct mslsa_lup_name_table *name_table;
581da6c28aaSamw
582da6c28aaSamw	OUT	struct mslsa_domain_table *domain_table;
583da6c28aaSamw	INOUT	struct mslsa_rid_table translated_sids;
584da6c28aaSamw
585*fd9ee8b5Sjoyce mcintosh	IN	WORD lookup_level;
586da6c28aaSamw	INOUT	DWORD mapped_count;
587da6c28aaSamw	OUT	DWORD status;
588da6c28aaSamw};
589da6c28aaSamw
590da6c28aaSamw
591da6c28aaSamw/*
592da6c28aaSamw ***********************************************************************
593da6c28aaSamw * QueryInfoPolicy returns various pieces of policy information. The
594da6c28aaSamw * desired information is specified using a class value, as defined
595da6c28aaSamw * below.
596da6c28aaSamw ***********************************************************************
597da6c28aaSamw */
598faa1795aSjb150015#define MSLSA_POLICY_AUDIT_LOG_INFO		1
599faa1795aSjb150015#define MSLSA_POLICY_AUDIT_EVENTS_INFO		2
600da6c28aaSamw#define MSLSA_POLICY_PRIMARY_DOMAIN_INFO	3
601da6c28aaSamw#define MSLSA_POLICY_UNKNOWN_4_INFO		4
602da6c28aaSamw#define MSLSA_POLICY_ACCOUNT_DOMAIN_INFO	5
603da6c28aaSamw#define MSLSA_POLICY_SERVER_ROLE_INFO		6
604da6c28aaSamw#define MSLSA_POLICY_REPLICA_SOURCE_INFO	7
605da6c28aaSamw#define MSLSA_POLICY_DEFAULT_QUOTA_INFO		8
606faa1795aSjb150015#define MSLSA_POLICY_DB_INFO			9
607faa1795aSjb150015#define MSLSA_POLICY_AUDIT_SET_INFO		10
608faa1795aSjb150015#define MSLSA_POLICY_AUDIT_QUERY_INFO		11
6098d7e4166Sjose borrego#define MSLSA_POLICY_DNS_DOMAIN_INFO		12
610da6c28aaSamw
611faa1795aSjb150015#define	LSA_ROLE_STANDALONE_WORKSTATION		0
612faa1795aSjb150015#define	LSA_ROLE_MEMBER_WORKSTATION		1
613faa1795aSjb150015#define	LSA_ROLE_STANDALONE_SERVER		2
614faa1795aSjb150015#define	LSA_ROLE_MEMBER_SERVER			3
615faa1795aSjb150015#define	LSA_ROLE_BACKUP_DC			4
616faa1795aSjb150015#define	LSA_ROLE_PRIMARY_DC			5
617da6c28aaSamw
618faa1795aSjb150015/*
619faa1795aSjb150015 * MSLSA_POLICY_AUDIT_EVENTS_INFO
620faa1795aSjb150015 */
621faa1795aSjb150015struct mslsa_AuditEventsInfo {
622faa1795aSjb150015	DWORD enabled;
623faa1795aSjb150015    SIZE_IS (count)
624faa1795aSjb150015	DWORD *settings;
625faa1795aSjb150015	DWORD count;
626faa1795aSjb150015};
627faa1795aSjb150015
628faa1795aSjb150015/*
629faa1795aSjb150015 * MSLSA_POLICY_PRIMARY_DOMAIN_INFO
630faa1795aSjb150015 */
631da6c28aaSamwstruct mslsa_PrimaryDomainInfo {
632da6c28aaSamw	struct mslsa_string_desc name;
633da6c28aaSamw	struct mslsa_sid *sid;
634da6c28aaSamw};
635da6c28aaSamw
636faa1795aSjb150015/*
637faa1795aSjb150015 * MSLSA_POLICY_ACCOUNT_DOMAIN_INFO
638faa1795aSjb150015 */
639da6c28aaSamwstruct mslsa_AccountDomainInfo {
640da6c28aaSamw	struct mslsa_string_desc name;
641da6c28aaSamw	struct mslsa_sid *sid;
642da6c28aaSamw};
643da6c28aaSamw
644da6c28aaSamw/*
645faa1795aSjb150015 * MSLSA_POLICY_SERVER_ROLE_INFO
646da6c28aaSamw */
647faa1795aSjb150015struct mslsa_ServerRoleInfo {
648faa1795aSjb150015	DWORD role;
649faa1795aSjb150015	DWORD pad;
650faa1795aSjb150015};
651da6c28aaSamw
6528d7e4166Sjose borregostruct mslsa_DnsDomainInfo {
6538d7e4166Sjose borrego	struct mslsa_string_desc nb_domain;
6548d7e4166Sjose borrego	struct mslsa_string_desc dns_domain;
6558d7e4166Sjose borrego	struct mslsa_string_desc forest;
6568d7e4166Sjose borrego	struct mslsa_guid guid;
6578d7e4166Sjose borrego	struct mslsa_sid *sid;
6588d7e4166Sjose borrego};
6598d7e4166Sjose borrego
660da6c28aaSamwunion mslsa_PolicyInfoResUnion {
661faa1795aSjb150015	CASE(2) struct mslsa_AuditEventsInfo audit_events;
662da6c28aaSamw	CASE(3) struct mslsa_PrimaryDomainInfo pd_info;
663da6c28aaSamw	CASE(5) struct mslsa_AccountDomainInfo ad_info;
664faa1795aSjb150015	CASE(6) struct mslsa_ServerRoleInfo server_role;
6658d7e4166Sjose borrego	CASE(12) struct mslsa_DnsDomainInfo dns_info;
666da6c28aaSamw	DEFAULT	char *nullptr;
667da6c28aaSamw};
668da6c28aaSamw
6698d7e4166Sjose borrego/*
6708d7e4166Sjose borrego * This structure needs to be declared, even though it can't be used in
6718d7e4166Sjose borrego * mslsa_QueryInfoPolicy, in order to get the appropriate size to calculate
6728d7e4166Sjose borrego * the correct fixup offsets.  If ndrgen did the right thing,
6738d7e4166Sjose borrego * mslsa_PolicyInfoRes would be one of the out parameters.  However, if
6748d7e4166Sjose borrego * we do it that way, the switch_value isn't known early enough to do
6758d7e4166Sjose borrego * the fixup calculation.  So it all has to go in mslsa_QueryInfoPolicy.
6768d7e4166Sjose borrego */
6778d7e4166Sjose borregostruct mslsa_PolicyInfoRes {
6788d7e4166Sjose borrego	DWORD address;
679da6c28aaSamw	WORD switch_value;
680da6c28aaSamw    SWITCH(switch_value)
681da6c28aaSamw	union mslsa_PolicyInfoResUnion ru;
682da6c28aaSamw};
683da6c28aaSamw
684da6c28aaSamwOPERATION(LSARPC_OPNUM_QueryInfoPolicy)
685da6c28aaSamwstruct mslsa_QueryInfoPolicy {
686da6c28aaSamw	IN	mslsa_handle_t handle;
687da6c28aaSamw	IN	WORD info_class;
6888d7e4166Sjose borrego	/*
6898d7e4166Sjose borrego	 * Can't use this form because we need to include members explicitly.
6908d7e4166Sjose borrego	 * OUT	struct mslsa_PolicyInfoRes result;
6918d7e4166Sjose borrego	 */
6928d7e4166Sjose borrego	OUT	DWORD address;
6938d7e4166Sjose borrego	OUT	WORD switch_value;
6948d7e4166Sjose borrego    SWITCH(switch_value)
6958d7e4166Sjose borrego	OUT	union mslsa_PolicyInfoResUnion ru;
696da6c28aaSamw	OUT	DWORD status;
697da6c28aaSamw};
698da6c28aaSamw
6998d7e4166Sjose borrego
7008d7e4166Sjose borrego
701da6c28aaSamw/*
702da6c28aaSamw ***********************************************************************
703da6c28aaSamw * OpenAccount.
704da6c28aaSamw *
705da6c28aaSamw * Returns a handle that can be used to access the account specified
706da6c28aaSamw * by a SID. This handle can be used to enumerate account privileges.
707da6c28aaSamw ***********************************************************************
708da6c28aaSamw */
709da6c28aaSamwOPERATION(LSARPC_OPNUM_OpenAccount)
710da6c28aaSamwstruct mslsa_OpenAccount {
711da6c28aaSamw	IN  mslsa_handle_t handle;
712da6c28aaSamw	IN REFERENCE	struct mslsa_sid *sid;
713da6c28aaSamw	IN	DWORD access_mask;
714da6c28aaSamw	OUT mslsa_handle_t account_handle;
715da6c28aaSamw	OUT DWORD status;
716da6c28aaSamw};
717da6c28aaSamw
718da6c28aaSamw
7198d7e4166Sjose borrego
720da6c28aaSamw /*
721da6c28aaSamw ***********************************************************************
722da6c28aaSamw * EnumPrivilegesAccount.
723da6c28aaSamw *
724da6c28aaSamw * Enumerate the list of privileges held by the specified account. The
725da6c28aaSamw * handle must be a valid account handle obtained via OpenAccount. The
726da6c28aaSamw * luid values returned will be probably only be relevant on the domain
727da6c28aaSamw * controller so we'll need to find a way to convert them to the
728da6c28aaSamw * actual privilege names.
729da6c28aaSamw ***********************************************************************
730da6c28aaSamw */
731da6c28aaSamwstruct mslsa_LuidAndAttributes {
732da6c28aaSamw	struct mslsa_luid luid;
733da6c28aaSamw	DWORD attributes;
734da6c28aaSamw};
735da6c28aaSamw
736da6c28aaSamw
737da6c28aaSamwstruct mslsa_PrivilegeSet {
738da6c28aaSamw	DWORD privilege_count;
739da6c28aaSamw	DWORD control;
740da6c28aaSamw  SIZE_IS(privilege_count)
741da6c28aaSamw	struct mslsa_LuidAndAttributes privilege[ANY_SIZE_ARRAY];
742da6c28aaSamw};
743da6c28aaSamw
744da6c28aaSamw
745da6c28aaSamwOPERATION(LSARPC_OPNUM_EnumPrivsAccount)
746da6c28aaSamw	struct mslsa_EnumPrivsAccount {
747da6c28aaSamw	IN	mslsa_handle_t account_handle;
748da6c28aaSamw	OUT	struct mslsa_PrivilegeSet *privileges;
749da6c28aaSamw	OUT	DWORD status;
750da6c28aaSamw};
751da6c28aaSamw
752faa1795aSjb150015OPERATION(LSARPC_OPNUM_OpenSecret)
753faa1795aSjb150015struct mslsa_OpenSecret {
754faa1795aSjb150015	IN	mslsa_handle_t handle;
755faa1795aSjb150015	IN	mslsa_string_t name;
756faa1795aSjb150015	IN	DWORD access_mask;
757faa1795aSjb150015	OUT	mslsa_handle_t secret_handle;
758faa1795aSjb150015	OUT	DWORD status;
759faa1795aSjb150015};
760faa1795aSjb150015
761da6c28aaSamw
762da6c28aaSamw/*
763da6c28aaSamw ***********************************************************************
764da6c28aaSamw * LookupPrivValue
765da6c28aaSamw *
766da6c28aaSamw * Map a privilege name to a local unique id (LUID). Privilege names
767da6c28aaSamw * are consistent across the network. LUIDs are machine specific.
768da6c28aaSamw * The privilege list is provided as a set of LUIDs so the privilege
769da6c28aaSamw * lookup functions must be used to identify which the privilege to
770da6c28aaSamw * which each LUID refers. The handle here is a policy handle.
771da6c28aaSamw ***********************************************************************
772da6c28aaSamw */
773da6c28aaSamwOPERATION(LSARPC_OPNUM_LookupPrivValue)
774da6c28aaSamwstruct mslsa_LookupPrivValue {
775da6c28aaSamw	IN	mslsa_handle_t handle;
776da6c28aaSamw	IN	mslsa_string_t name;
777da6c28aaSamw	OUT	struct mslsa_luid luid;
778da6c28aaSamw	OUT	DWORD status;
779da6c28aaSamw};
780da6c28aaSamw
781da6c28aaSamw
782da6c28aaSamw/*
783da6c28aaSamw ***********************************************************************
784da6c28aaSamw * LookupPrivName
785da6c28aaSamw *
786da6c28aaSamw * Map a privilege value (LUID) to a privilege name. Privilege names
787da6c28aaSamw * are consistent across the network. LUIDs are machine specific.
788da6c28aaSamw * The privilege list is provided as a set of LUIDs so the privilege
789da6c28aaSamw * lookup functions must be used to identify which the privilege to
790da6c28aaSamw * which each LUID refers. The handle here is a policy handle.
791da6c28aaSamw ***********************************************************************
792da6c28aaSamw */
793da6c28aaSamwOPERATION(LSARPC_OPNUM_LookupPrivName)
794da6c28aaSamwstruct mslsa_LookupPrivName {
795da6c28aaSamw	IN	mslsa_handle_t handle;
796da6c28aaSamw	IN	struct mslsa_luid luid;
797da6c28aaSamw	OUT	mslsa_string_t *name;
798da6c28aaSamw	OUT	DWORD status;
799da6c28aaSamw};
800da6c28aaSamw
801da6c28aaSamw
802da6c28aaSamw/*
803da6c28aaSamw ***********************************************************************
804da6c28aaSamw * LookupPrivDisplayName
805da6c28aaSamw *
806da6c28aaSamw * Map a privilege name to a local unique id (LUID). Privilege names
807da6c28aaSamw * are consistent across the network. LUIDs are machine specific.
808da6c28aaSamw * The privilege list is provided as a set of LUIDs so the privilege
809da6c28aaSamw * lookup functions must be used to identify which the privilege to
810da6c28aaSamw * which each LUID refers. The handle here is a policy handle.
811da6c28aaSamw ***********************************************************************
812da6c28aaSamw */
813da6c28aaSamwOPERATION(LSARPC_OPNUM_LookupPrivDisplayName)
814da6c28aaSamwstruct mslsa_LookupPrivDisplayName {
815da6c28aaSamw	IN	mslsa_handle_t handle;
816da6c28aaSamw	IN	mslsa_string_t name;
817da6c28aaSamw	IN	WORD client_language;
818da6c28aaSamw	IN	WORD default_language;
819da6c28aaSamw	OUT	mslsa_string_t *display_name;
820da6c28aaSamw	OUT	WORD language_ret;
821da6c28aaSamw	OUT	DWORD status;
822da6c28aaSamw};
823da6c28aaSamw
824da6c28aaSamw
825da6c28aaSamw/*
826da6c28aaSamw ***********************************************************************
827da6c28aaSamw * GetConnectedUser
828da6c28aaSamw *
829fe1c642dSBill Krier * Return the account name and NetBIOS domain name for the user making
830fe1c642dSBill Krier * the request.  All input fields should be ignored by the server.
831da6c28aaSamw ***********************************************************************
832da6c28aaSamw */
833da6c28aaSamwstruct mslsa_DomainName {
834da6c28aaSamw	struct mslsa_string_desc *name;
835da6c28aaSamw};
836da6c28aaSamw
837da6c28aaSamw
838da6c28aaSamwOPERATION(LSARPC_OPNUM_GetConnectedUser)
839da6c28aaSamwstruct mslsa_GetConnectedUser {
840da6c28aaSamw	IN	LPTSTR hostname;
841fe1c642dSBill Krier	IN	BYTE *owner_in;
842fe1c642dSBill Krier	IN	BYTE *domain_in;
843da6c28aaSamw	OUT	struct mslsa_string_desc *owner;
844da6c28aaSamw	OUT	struct mslsa_DomainName *domain;
845da6c28aaSamw	OUT	DWORD status;
846da6c28aaSamw};
847da6c28aaSamw
848da6c28aaSamw
849da6c28aaSamw/*
850da6c28aaSamw ***********************************************************************
851da6c28aaSamw * LSARPC_OPNUM_LookupSids2
852da6c28aaSamw *
853da6c28aaSamw * SID lookup function that appeared in Windows 2000. It appears to be
854da6c28aaSamw * very similar to the original SID lookup RPC. There are two extra IN
855da6c28aaSamw * parameters, which we don't care about. The OUT name structure has
856da6c28aaSamw * an extra field, in which zero seems to be okay.
857da6c28aaSamw ***********************************************************************
858da6c28aaSamw */
859da6c28aaSamwstruct lsar_name_entry2 {
860da6c28aaSamw	WORD sid_name_use;
861fe1c642dSBill Krier	WORD padding;
862da6c28aaSamw	mslsa_string_t name;
863da6c28aaSamw	DWORD domain_ix;	/* -1 means none */
864fe1c642dSBill Krier	DWORD flags;
865da6c28aaSamw};
866fe1c642dSBill Kriertypedef struct lsar_name_entry2 lsar_translated_name_ex_t;
867da6c28aaSamw
868da6c28aaSamwstruct lsar_name_table2 {
869da6c28aaSamw	DWORD n_entry;
870da6c28aaSamw  SIZE_IS(n_entry)
871da6c28aaSamw	struct lsar_name_entry2 *entries;
872da6c28aaSamw};
873fe1c642dSBill Kriertypedef struct lsar_name_table2 lsar_translated_names_ex_t;
874da6c28aaSamw
875da6c28aaSamwOPERATION(LSARPC_OPNUM_LookupSids2)
876da6c28aaSamwstruct lsar_lookup_sids2 {
877da6c28aaSamw	IN		mslsa_handle_t policy_handle;
878da6c28aaSamw	IN		struct mslsa_lup_sid_table lup_sid_table;
879da6c28aaSamw	OUT		struct mslsa_domain_table *domain_table;
880da6c28aaSamw	INOUT	struct lsar_name_table2 name_table;
881*fd9ee8b5Sjoyce mcintosh	IN		WORD lookup_level;
882da6c28aaSamw	INOUT	DWORD mapped_count;
883fe1c642dSBill Krier	IN		DWORD lookup_options;
884fe1c642dSBill Krier	IN		DWORD client_revision;
885da6c28aaSamw 	OUT		DWORD status;
886da6c28aaSamw};
887da6c28aaSamw
888fe1c642dSBill KrierOPERATION(LSARPC_OPNUM_LookupSids3)
889fe1c642dSBill Krierstruct lsar_lookup_sids3 {
890fe1c642dSBill Krier	IN		struct mslsa_lup_sid_table	lup_sid_table;
891fe1c642dSBill Krier	OUT		struct mslsa_domain_table	*domain_table;
892fe1c642dSBill Krier	INOUT		lsar_translated_names_ex_t	name_table;
893*fd9ee8b5Sjoyce mcintosh	IN		WORD				lookup_level;
894fe1c642dSBill Krier	INOUT		DWORD				mapped_count;
895fe1c642dSBill Krier	IN		DWORD				lookup_options;
896fe1c642dSBill Krier	IN		DWORD				client_revision;
897fe1c642dSBill Krier 	OUT		DWORD				status;
898fe1c642dSBill Krier};
899da6c28aaSamw
900da6c28aaSamw/*
901da6c28aaSamw ***********************************************************************
902da6c28aaSamw * LSARPC_OPNUM_LookupNames2
903da6c28aaSamw *
904da6c28aaSamw * Name lookup function that appeared in Windows 2000. It appears to be
905da6c28aaSamw * very similar to the original name lookup RPC. There are two extra IN
906da6c28aaSamw * parameters, which we don't care about. The lsar_rid_entry2 structure
907da6c28aaSamw * has an extra field, in which zero seems to be okay.
908da6c28aaSamw ***********************************************************************
909da6c28aaSamw */
910da6c28aaSamwstruct lsar_rid_entry2 {
911da6c28aaSamw	WORD sid_name_use;
912fe1c642dSBill Krier	WORD pad;
913da6c28aaSamw	DWORD rid;
914da6c28aaSamw	DWORD domain_index;	/* -1 means none */
915fe1c642dSBill Krier	DWORD flags;
916da6c28aaSamw};
917da6c28aaSamw
918da6c28aaSamw
919da6c28aaSamwstruct lsar_rid_table2 {
920da6c28aaSamw	DWORD n_entry;
921da6c28aaSamw  SIZE_IS(n_entry)
922da6c28aaSamw	struct lsar_rid_entry2 *rids;
923da6c28aaSamw};
924da6c28aaSamw
925da6c28aaSamw
926da6c28aaSamwOPERATION(LSARPC_OPNUM_LookupNames2)
927da6c28aaSamwstruct lsar_LookupNames2 {
928da6c28aaSamw	IN		mslsa_handle_t policy_handle;
929da6c28aaSamw	IN	REFERENCE	struct mslsa_lup_name_table *name_table;
930da6c28aaSamw	OUT		struct mslsa_domain_table *domain_table;
931da6c28aaSamw	INOUT	struct lsar_rid_table2 translated_sids;
932*fd9ee8b5Sjoyce mcintosh	IN		WORD lookup_level;
933da6c28aaSamw	INOUT	DWORD mapped_count;
934fe1c642dSBill Krier	IN		DWORD lookup_options;
935fe1c642dSBill Krier	IN		DWORD client_revision;
936fe1c642dSBill Krier	OUT		DWORD status;
937fe1c642dSBill Krier};
938fe1c642dSBill Krier
939fe1c642dSBill Krierstruct lsar_translated_sid_ex2 {
940fe1c642dSBill Krier	WORD			sid_name_use;
941fe1c642dSBill Krier	WORD			pad;
942fe1c642dSBill Krier	struct mslsa_sid	*sid;
943fe1c642dSBill Krier	DWORD			domain_index;	/* -1 means none */
944fe1c642dSBill Krier	DWORD			flags;
945fe1c642dSBill Krier};
946fe1c642dSBill Kriertypedef struct lsar_translated_sid_ex2 lsar_translated_sid_ex2_t;
947fe1c642dSBill Krier
948fe1c642dSBill Krierstruct lsar_sid_ex2_table {
949fe1c642dSBill Krier	DWORD			n_entry;
950fe1c642dSBill Krier  SIZE_IS(n_entry)
951fe1c642dSBill Krier	struct lsar_translated_sid_ex2	*sids;
952fe1c642dSBill Krier};
953fe1c642dSBill Kriertypedef struct lsar_sid_ex2_table lsar_sid_ex2_table_t;
954fe1c642dSBill Krier
955fe1c642dSBill KrierOPERATION(LSARPC_OPNUM_LookupNames3)
956fe1c642dSBill Krierstruct lsar_LookupNames3 {
957fe1c642dSBill Krier	IN		mslsa_handle_t			policy_handle;
958fe1c642dSBill Krier	IN REFERENCE	struct mslsa_lup_name_table	*name_table;
959fe1c642dSBill Krier	OUT		struct mslsa_domain_table	*domain_table;
960fe1c642dSBill Krier	INOUT		struct lsar_sid_ex2_table	translated_sids;
961*fd9ee8b5Sjoyce mcintosh	IN		WORD				lookup_level;
962fe1c642dSBill Krier	INOUT		DWORD				mapped_count;
963fe1c642dSBill Krier	IN		DWORD				lookup_options;
964fe1c642dSBill Krier	IN		DWORD				client_revision;
965fe1c642dSBill Krier	OUT		DWORD				status;
966fe1c642dSBill Krier};
967fe1c642dSBill Krier
968fe1c642dSBill KrierOPERATION(LSARPC_OPNUM_LookupNames4)
969fe1c642dSBill Krierstruct lsar_LookupNames4 {
970fe1c642dSBill Krier	IN REFERENCE	struct mslsa_lup_name_table	*name_table;
971fe1c642dSBill Krier	OUT		struct mslsa_domain_table	*domain_table;
972fe1c642dSBill Krier	INOUT		struct lsar_sid_ex2_table	translated_sids;
973*fd9ee8b5Sjoyce mcintosh	IN		WORD				lookup_level;
974fe1c642dSBill Krier	INOUT		DWORD				mapped_count;
975fe1c642dSBill Krier	IN		DWORD				lookup_options;
976fe1c642dSBill Krier	IN		DWORD				client_revision;
977da6c28aaSamw	OUT		DWORD				status;
978da6c28aaSamw};
979da6c28aaSamw
980da6c28aaSamw/*
981da6c28aaSamw ***********************************************************************
982da6c28aaSamw * The LSARPC interface definition.
983da6c28aaSamw ***********************************************************************
984da6c28aaSamw */
985da6c28aaSamwINTERFACE(0)
986da6c28aaSamwunion lsarpc_interface {
987da6c28aaSamw	CASE(LSARPC_OPNUM_CloseHandle)
988da6c28aaSamw		struct mslsa_CloseHandle		CloseHandle;
989da6c28aaSamw	CASE(LSARPC_OPNUM_QuerySecurityObject)
990da6c28aaSamw		struct mslsa_QuerySecurityObject	QuerySecurityObj;
991da6c28aaSamw	CASE(LSARPC_OPNUM_EnumerateAccounts)
992da6c28aaSamw		struct mslsa_EnumerateAccounts		EnumAccounts;
99329bd2886SAlan Wright	CASE(LSARPC_OPNUM_EnumTrustedDomainsEx)
99429bd2886SAlan Wright		struct mslsa_EnumTrustedDomainEx	EnumTrustedDomainEx;
995da6c28aaSamw	CASE(LSARPC_OPNUM_EnumTrustedDomain)
996da6c28aaSamw		struct mslsa_EnumTrustedDomain		EnumTrustedDomain;
997da6c28aaSamw	CASE(LSARPC_OPNUM_OpenAccount)
998da6c28aaSamw		struct mslsa_OpenAccount		OpenAccount;
999da6c28aaSamw	CASE(LSARPC_OPNUM_EnumPrivsAccount)
1000da6c28aaSamw		struct mslsa_EnumPrivsAccount		EnumPrivsAccount;
1001da6c28aaSamw	CASE(LSARPC_OPNUM_LookupPrivValue)
1002da6c28aaSamw		struct mslsa_LookupPrivValue		LookupPrivValue;
1003da6c28aaSamw	CASE(LSARPC_OPNUM_LookupPrivName)
1004da6c28aaSamw		struct mslsa_LookupPrivName		LookupPrivName;
1005da6c28aaSamw	CASE(LSARPC_OPNUM_LookupPrivDisplayName)
1006da6c28aaSamw		struct mslsa_LookupPrivDisplayName	LookupPrivDisplayName;
1007faa1795aSjb150015	CASE(LSARPC_OPNUM_CreateSecret)
1008faa1795aSjb150015		struct mslsa_CreateSecret		CreateSecret;
1009faa1795aSjb150015	CASE(LSARPC_OPNUM_OpenSecret)
1010faa1795aSjb150015		struct mslsa_OpenSecret			OpenSecret;
1011da6c28aaSamw	CASE(LSARPC_OPNUM_QueryInfoPolicy)
1012da6c28aaSamw		struct mslsa_QueryInfoPolicy		QueryInfoPolicy;
1013da6c28aaSamw	CASE(LSARPC_OPNUM_OpenPolicy)
1014da6c28aaSamw		struct mslsa_OpenPolicy			OpenPolicy;
1015da6c28aaSamw	CASE(LSARPC_OPNUM_OpenPolicy2)
1016da6c28aaSamw		struct mslsa_OpenPolicy2		OpenPolicy2;
1017da6c28aaSamw	CASE(LSARPC_OPNUM_LookupSids)
1018da6c28aaSamw		struct mslsa_LookupSids			LookupSids;
1019da6c28aaSamw	CASE(LSARPC_OPNUM_LookupNames)
1020da6c28aaSamw		struct mslsa_LookupNames		LookupNames;
1021da6c28aaSamw	CASE(LSARPC_OPNUM_GetConnectedUser)
1022da6c28aaSamw		struct mslsa_GetConnectedUser		GetConnectedUser;
1023da6c28aaSamw	CASE(LSARPC_OPNUM_LookupSids2)
1024da6c28aaSamw		struct lsar_lookup_sids2		LookupSids2;
1025fe1c642dSBill Krier	CASE(LSARPC_OPNUM_LookupSids3)
1026fe1c642dSBill Krier		struct lsar_lookup_sids3		LookupSids3;
1027da6c28aaSamw	CASE(LSARPC_OPNUM_LookupNames2)
1028da6c28aaSamw		struct lsar_LookupNames2		LookupNames2;
1029fe1c642dSBill Krier	CASE(LSARPC_OPNUM_LookupNames3)
1030fe1c642dSBill Krier		struct lsar_LookupNames3		LookupNames3;
1031fe1c642dSBill Krier	CASE(LSARPC_OPNUM_LookupNames4)
1032fe1c642dSBill Krier		struct lsar_LookupNames4		LookupNames4;
1033da6c28aaSamw};
1034da6c28aaSamwtypedef union lsarpc_interface	lsarpc_interface_t;
1035da6c28aaSamwEXTERNTYPEINFO(lsarpc_interface)
1036da6c28aaSamw
1037da6c28aaSamw#endif /* _MLSVC_LSA_NDL_ */
1038