xref: /reactos/sdk/include/psdk/iads.idl (revision 8a978a17)
1/*
2 * Copyright 2005 Francois Gouget
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19import "oaidl.idl";
20
21typedef enum
22{
23    ADS_RIGHT_DS_CREATE_CHILD         = 0x00000001,
24    ADS_RIGHT_DS_DELETE_CHILD         = 0x00000002,
25    ADS_RIGHT_ACTRL_DS_LIST           = 0x00000004,
26    ADS_RIGHT_DS_SELF                 = 0x00000008,
27    ADS_RIGHT_DS_READ_PROP            = 0x00000010,
28    ADS_RIGHT_DS_WRITE_PROP           = 0x00000020,
29    ADS_RIGHT_DS_DELETE_TREE          = 0x00000040,
30    ADS_RIGHT_DS_LIST_OBJECT          = 0x00000080,
31    ADS_RIGHT_DS_CONTROL_ACCESS       = 0x00000100,
32
33    ADS_RIGHT_DELETE                  = 0x00010000,
34    ADS_RIGHT_READ_CONTROL            = 0x00020000,
35    ADS_RIGHT_WRITE_DAC               = 0x00040000,
36    ADS_RIGHT_WRITE_OWNER             = 0x00080000,
37    ADS_RIGHT_SYNCHRONIZE             = 0x00100000,
38    ADS_RIGHT_ACCESS_SYSTEM_SECURITY  = 0x00200000,
39
40    ADS_RIGHT_GENERIC_ALL             = 0x10000000,
41    ADS_RIGHT_GENERIC_EXECUTE         = 0x20000000,
42    ADS_RIGHT_GENERIC_WRITE           = 0x40000000,
43    ADS_RIGHT_GENERIC_READ            = 0x80000000
44} ADS_RIGHTS_ENUM;
45
46typedef enum
47{
48    ADS_SECURE_AUTHENTICATION     = 0x1,
49    ADS_USE_ENCRYPTION            = 0x2,
50    ADS_USE_SSL                   = 0x2,
51    ADS_READONLY_SERVER           = 0x4,
52    ADS_PROMPT_CREDENTIALS        = 0x8,
53    ADS_NO_AUTHENTICATION         = 0x10,
54    ADS_FAST_BIND                 = 0x20,
55    ADS_USE_SIGNING               = 0x40,
56    ADS_USE_SEALING               = 0x80,
57    ADS_USE_DELEGATION            = 0x100,
58    ADS_SERVER_BIND               = 0x200,
59    ADS_NO_REFERRAL_CHASING       = 0x400,
60    ADS_AUTH_RESERVED             = 0x80000000
61} ADS_AUTHENTICATION_ENUM;
62
63typedef enum
64{
65    ADS_SEARCHPREF_ASYNCHRONOUS,
66    ADS_SEARCHPREF_DEREF_ALIASES,
67    ADS_SEARCHPREF_SIZE_LIMIT,
68    ADS_SEARCHPREF_TIME_LIMIT,
69    ADS_SEARCHPREF_ATTRIBTYPES_ONLY,
70    ADS_SEARCHPREF_SEARCH_SCOPE,
71    ADS_SEARCHPREF_TIMEOUT,
72    ADS_SEARCHPREF_PAGESIZE,
73    ADS_SEARCHPREF_PAGED_TIME_LIMIT,
74    ADS_SEARCHPREF_CHASE_REFERRALS,
75    ADS_SEARCHPREF_SORT_ON,
76    ADS_SEARCHPREF_CACHE_RESULTS,
77    ADS_SEARCHPREF_DIRSYNC,
78    ADS_SEARCHPREF_TOMBSTONE,
79    ADS_SEARCHPREF_VLV,
80    ADS_SEARCHPREF_ATTRIBUTE_QUERY,
81    ADS_SEARCHPREF_SECURITY_MASK,
82    ADS_SEARCHPREF_DIRSYNC_FLAG,
83    ADS_SEARCHPREF_EXTENDED_DN
84} ADS_SEARCHPREF_ENUM;
85
86typedef ADS_SEARCHPREF_ENUM *PADS_SEARCHPREF_INFO;
87
88typedef enum
89{
90    ADS_STATUS_S_OK,
91    ADS_STATUS_INVALID_SEARCHPREF,
92    ADS_STATUS_INVALID_SEARCHPREFVALUE
93} ADS_STATUSENUM;
94
95typedef enum
96{
97    ADSTYPE_INVALID,
98    ADSTYPE_DN_STRING,
99    ADSTYPE_CASE_EXACT_STRING,
100    ADSTYPE_CASE_IGNORE_STRING,
101    ADSTYPE_PRINTABLE_STRING,
102    ADSTYPE_NUMERIC_STRING,
103    ADSTYPE_BOOLEAN,
104    ADSTYPE_INTEGER,
105    ADSTYPE_OCTET_STRING,
106    ADSTYPE_UTC_TIME,
107    ADSTYPE_LARGE_INTEGER,
108    ADSTYPE_PROV_SPECIFIC,
109    ADSTYPE_OBJECT_CLASS,
110    ADSTYPE_CASEIGNORE_LIST,
111    ADSTYPE_OCTET_LIST,
112    ADSTYPE_PATH,
113    ADSTYPE_POSTALADDRESS,
114    ADSTYPE_TIMESTAMP,
115    ADSTYPE_BACKLINK,
116    ADSTYPE_TYPEDNAME,
117    ADSTYPE_HOLD,
118    ADSTYPE_NETADDRESS,
119    ADSTYPE_REPLICAPOINTER,
120    ADSTYPE_FAXNUMBER,
121    ADSTYPE_EMAIL,
122    ADSTYPE_NT_SECURITY_DESCRIPTOR,
123    ADSTYPE_UNKNOWN,
124    ADSTYPE_DN_WITH_BINARY,
125    ADSTYPE_DN_WITH_STRING
126} ADSTYPEENUM;
127
128typedef enum
129{
130    ADS_PASSWORD_ENCODE_REQUIRE_SSL,
131    ADS_PASSWORD_ENCODE_CLEAR
132} ADS_PASSWORD_ENCODING_ENUM;
133
134typedef struct _ADS_CASEIGNORE_LIST
135{
136    struct _ADS_CASEIGNORE_LIST *Next;
137    LPWSTR String;
138} ADS_CASEIGNORE_LIST;
139
140typedef struct _ADS_OCTET_LIST
141{
142    struct _ADS_OCTET_LIST *Next;
143    DWORD Length;
144    BYTE *Data;
145} ADS_OCTET_LIST;
146
147typedef struct
148{
149    DWORD Type;
150    LPWSTR VolumeName;
151    LPWSTR Path;
152} ADS_PATH, *PADS_PATH;
153
154typedef struct
155{
156    DWORD WholeSeconds;
157    DWORD EventID;
158} ADS_TIMESTAMP;
159
160
161typedef ADSTYPEENUM ADSTYPE;
162typedef LPWSTR ADS_DN_STRING;
163typedef LPWSTR *PADS_DN_STRING;
164typedef LPWSTR ADS_CASE_EXACT_STRING;
165typedef LPWSTR *PADS_CASE_EXACT_STRING;
166typedef LPWSTR ADS_CASE_IGNORE_STRING;
167typedef LPWSTR *PADS_CASE_IGNORE_STRING;
168typedef LPWSTR ADS_PRINTABLE_STRING;
169typedef LPWSTR *PADS_PRINTABLE_STRING;
170typedef LPWSTR ADS_NUMERIC_STRING;
171typedef LPWSTR *PADS_NUMERIC_STRING;
172typedef DWORD ADS_BOOLEAN;
173typedef DWORD *LPNDS_BOOLEAN;
174typedef DWORD ADS_INTEGER;
175typedef DWORD *PADS_INTEGER;
176typedef SYSTEMTIME ADS_UTC_TIME;
177typedef SYSTEMTIME *PADS_UTC_TIME;
178typedef LARGE_INTEGER ADS_LARGE_INTEGER;
179typedef LARGE_INTEGER *PADS_LARGE_INTEGER;
180typedef LPWSTR ADS_OBJECT_CLASS;
181typedef LPWSTR *PADS_OBJECT_CLASS;
182typedef struct _ADS_OCTET_LIST *PADS_OCTET_LIST;
183typedef struct _ADS_CASEIGNORE_LIST *PADS_CASEIGNORE_LIST;
184typedef ADS_STATUSENUM ADS_STATUS;
185typedef ADS_SEARCHPREF_ENUM ADS_SEARCHPREF;
186typedef HANDLE ADS_SEARCH_HANDLE;
187typedef HANDLE *PADS_SEARCH_HANDLE;
188
189
190typedef struct
191{
192    DWORD dwLength;
193    BYTE *lpValue;
194} ADS_OCTET_STRING;
195
196typedef struct
197{
198    DWORD dwLength;
199    BYTE *lpValue;
200} ADS_PROV_SPECIFIC;
201
202typedef struct
203{
204    LPWSTR PostalAddress[ 6 ];
205} ADS_POSTALADDRESS, *PADS_POSTALADDRESS;
206
207typedef struct
208{
209    LPWSTR ObjectName;
210    DWORD Level;
211    DWORD Interval;
212} ADS_TYPEDNAME, *PADS_TYPEDNAME;
213
214typedef struct
215{
216    DWORD RemoteID;
217    LPWSTR ObjectName;
218} ADS_BACKLINK;
219
220typedef struct
221{
222    LPWSTR ObjectName;
223    DWORD Amount;
224} ADS_HOLD;
225
226typedef struct
227{
228    DWORD AddressType;
229    DWORD AddressLength;
230    BYTE *Address;
231} ADS_NETADDRESS, *PADS_NETADDRESS;
232
233typedef struct
234{
235    LPWSTR ServerName;
236    DWORD ReplicaType;
237    DWORD ReplicaNumber;
238    DWORD Count;
239    PADS_NETADDRESS ReplicaAddressHints;
240} ADS_REPLICAPOINTER, *PADS_REPLICAPOINTER;
241
242typedef struct
243{
244    LPWSTR TelephoneNumber;
245    DWORD NumberOfBits;
246    BYTE *Parameters;
247} ADS_FAXNUMBER, *PADS_FAXNUMBER;
248
249
250typedef struct
251{
252    LPWSTR Address;
253    DWORD Type;
254} ADS_EMAIL, *PADS_EMAIL;
255
256typedef struct
257{
258    DWORD dwLength;
259    BYTE *lpValue;
260} ADS_NT_SECURITY_DESCRIPTOR;
261
262typedef struct
263{
264    DWORD dwLength;
265    BYTE *lpBinaryValue;
266    LPWSTR pszDNString;
267} ADS_DN_WITH_BINARY, *PADS_DN_WITH_BINARY;
268
269typedef struct
270{
271    LPWSTR pszStringValue;
272    LPWSTR pszDNString;
273} ADS_DN_WITH_STRING, *PADS_DN_WITH_STRING;
274
275typedef struct _adsvalue
276{
277    ADSTYPE dwType;
278    union
279    {
280        ADS_DN_STRING DNString;
281        ADS_CASE_EXACT_STRING CaseExactString;
282        ADS_CASE_IGNORE_STRING CaseIgnoreString;
283        ADS_PRINTABLE_STRING PrintableString;
284        ADS_NUMERIC_STRING NumericString;
285        ADS_BOOLEAN Boolean;
286        ADS_INTEGER Integer;
287        ADS_OCTET_STRING OctetString;
288        ADS_UTC_TIME UTCTime;
289        ADS_LARGE_INTEGER LargeInteger;
290        ADS_OBJECT_CLASS ClassName;
291        ADS_PROV_SPECIFIC ProviderSpecific;
292        PADS_CASEIGNORE_LIST pCaseIgnoreList;
293        PADS_OCTET_LIST pOctetList;
294        PADS_PATH pPath;
295        PADS_POSTALADDRESS pPostalAddress;
296        ADS_TIMESTAMP Timestamp;
297        ADS_BACKLINK BackLink;
298        PADS_TYPEDNAME pTypedName;
299        ADS_HOLD Hold;
300        PADS_NETADDRESS pNetAddress;
301        PADS_REPLICAPOINTER pReplicaPointer;
302        PADS_FAXNUMBER pFaxNumber;
303        ADS_EMAIL Email;
304        ADS_NT_SECURITY_DESCRIPTOR SecurityDescriptor;
305        PADS_DN_WITH_BINARY pDNWithBinary;
306        PADS_DN_WITH_STRING pDNWithString;
307    };
308} ADSVALUE, *PADSVALUE;
309
310typedef struct ads_searchpref_info
311{
312    ADS_SEARCHPREF dwSearchPref;
313    ADSVALUE vValue;
314    ADS_STATUS dwStatus;
315} ADS_SEARCHPREF_INFO;
316
317typedef struct ads_search_column
318{
319    LPWSTR pszAttrName;
320    ADSTYPE dwADsType;
321    PADSVALUE pADsValues;
322    DWORD dwNumValues;
323    HANDLE hReserved;
324} ADS_SEARCH_COLUMN, *PADS_SEARCH_COLUMN;
325
326/*****************************************************************************
327 *    IADsContainer interface
328 */
329[
330    object,
331    uuid(001677d0-fd16-11ce-abc4-02608c9e7553)
332]
333interface IADsContainer: IDispatch
334{
335    [propget] HRESULT Count(
336        [out, retval] long *retval);
337    [propget, restricted] HRESULT _NewEnum(
338        [out, retval] IUnknown **retval);
339    [propget] HRESULT Filter(
340        [out, retval] VARIANT *pvFilter);
341    [propput] HRESULT Filter(
342        [in] VARIANT vFilter);
343    [propget] HRESULT Hints(
344        [out, retval] VARIANT *pvHints);
345    [propput] HRESULT Hints(
346        [in] VARIANT vHints);
347    HRESULT GetObject(
348        [in] BSTR bstrClassName,
349        [in] BSTR bstrRelativeName,
350        [out, retval] IDispatch **ppObject);
351    HRESULT Create(
352        [in] BSTR bstrClassName,
353        [in] BSTR bstrRelativeName,
354        [out, retval] IDispatch **ppObject);
355    HRESULT Delete(
356        [in] BSTR bstrClassName,
357        [in] BSTR bstrRelativeName);
358    HRESULT CopyHere(
359        [in] BSTR bstrSourceName,
360        [in] BSTR bstrNewName,
361        [out, retval] IDispatch **ppObject);
362    HRESULT MoveHere(
363        [in] BSTR bstrSourceName,
364        [in] BSTR bstrNewName,
365        [out, retval] IDispatch **ppObject);
366}
367
368/*****************************************************************************
369 *    IADs interface
370 */
371[
372    odl,
373    uuid(FD8256D0-FD15-11CE-ABC4-02608C9E7553),
374    dual,
375    oleautomation
376]
377interface IADs : IDispatch
378{
379    [id(0x00000002), propget]
380    HRESULT Name([out, retval] BSTR* retval);
381
382    [id(0x00000003), propget]
383    HRESULT Class([out, retval] BSTR* retval);
384
385    [id(0x00000004), propget]
386    HRESULT GUID([out, retval] BSTR* retval);
387
388    [id(0x00000005), propget]
389    HRESULT ADsPath([out, retval] BSTR* retval);
390
391    [id(0x00000006), propget]
392    HRESULT Parent([out, retval] BSTR* retval);
393
394    [id(0x00000007), propget]
395    HRESULT Schema([out, retval] BSTR* retval);
396
397    [id(0x00000008)]
398    HRESULT GetInfo();
399
400    [id(0x00000009)]
401    HRESULT SetInfo();
402
403    [id(0x0000000a)]
404    HRESULT Get([in] BSTR bstrName, [out, retval] VARIANT* pvProp);
405
406    [id(0x0000000b)]
407    HRESULT Put([in] BSTR bstrName, [in] VARIANT vProp);
408
409    [id(0x0000000c)]
410    HRESULT GetEx([in] BSTR bstrName, [out, retval] VARIANT* pvProp);
411
412    [id(0x0000000d)]
413    HRESULT PutEx([in] long lnControlCode, [in] BSTR bstrName, [in] VARIANT vProp);
414
415    [id(0x0000000e)]
416    HRESULT GetInfoEx( [in] VARIANT vProperties, [in] long lnReserved);
417};
418
419/*****************************************************************************
420 *    IADsMembers interface
421 */
422[
423    odl,
424    uuid(451A0030-72EC-11CF-B03B-00AA006E0975),
425    dual,
426    oleautomation
427]
428interface IADsMembers : IDispatch
429{
430    [id(0x00000002), propget]
431    HRESULT Count([out, retval] long* plCount);
432
433    [id(0xfffffffc), propget]
434    HRESULT _NewEnum([out, retval] IUnknown** ppEnumerator);
435
436    [id(0x00000003), propget]
437    HRESULT Filter([out, retval] VARIANT* pvFilter);
438
439    [id(0x00000003), propput]
440    HRESULT Filter([in] VARIANT pvFilter);
441};
442
443/*****************************************************************************
444 *    IADsGroup interface
445 */
446[
447    odl,
448    uuid(27636B00-410F-11CF-B1FF-02608C9E7553),
449    dual,
450    oleautomation
451]
452interface IADsGroup : IADs {
453    [id(0x0000000f), propget]
454    HRESULT Description([out, retval] BSTR* retval);
455
456    [id(0x0000000f), propput]
457    HRESULT Description([in] BSTR retval);
458
459    [id(0x00000010)]
460    HRESULT Members([out, retval] IADsMembers** ppMembers);
461
462    [id(0x00000011)]
463    HRESULT IsMember([in] BSTR bstrMember, [out, retval] VARIANT_BOOL* bMember);
464
465    [id(0x00000012)]
466    HRESULT Add([in] BSTR bstrNewItem);
467
468    [id(0x00000013)]
469    HRESULT Remove([in] BSTR bstrItemToBeRemoved);
470};
471
472/*****************************************************************************
473 *    IADsUser interface
474 */
475[
476    odl,
477    uuid(3E37E320-17E2-11CF-ABC4-02608C9E7553),
478    dual,
479    oleautomation
480]
481interface IADsUser : IADs
482{
483    [id(0x00000035), propget]
484    HRESULT BadLoginAddress([out, retval] BSTR* retval);
485
486    [id(0x00000036), propget]
487    HRESULT BadLoginCount([out, retval] long* retval);
488
489    [id(0x00000038), propget]
490    HRESULT LastLogin([out, retval] DATE* retval);
491
492    [id(0x00000039), propget]
493    HRESULT LastLogoff([out, retval] DATE* retval);
494
495    [id(0x0000003a), propget]
496    HRESULT LastFailedLogin([out, retval] DATE* retval);
497
498    [id(0x0000003b), propget]
499    HRESULT PasswordLastChanged([out, retval] DATE* retval);
500
501    [id(0x0000000f), propget]
502    HRESULT Description([out, retval] BSTR* retval);
503
504    [id(0x0000000f), propput]
505    HRESULT Description([in] BSTR retval);
506
507    [id(0x00000013), propget]
508    HRESULT Division([out, retval] BSTR* retval);
509
510    [id(0x00000013), propput]
511    HRESULT Division([in] BSTR retval);
512
513    [id(0x0000007a), propget]
514    HRESULT Department([out, retval] BSTR* retval);
515
516    [id(0x0000007a), propput]
517    HRESULT Department([in] BSTR retval);
518
519    [id(0x00000014), propget]
520    HRESULT EmployeeID([out, retval] BSTR* retval);
521
522    [id(0x00000014), propput]
523    HRESULT EmployeeID([in] BSTR retval);
524
525    [id(0x00000017), propget]
526    HRESULT FullName([out, retval] BSTR* retval);
527
528    [id(0x00000017), propput]
529    HRESULT FullName([in] BSTR retval);
530
531    [id(0x00000016), propget]
532    HRESULT FirstName([out, retval] BSTR* retval);
533
534    [id(0x00000016), propput]
535    HRESULT FirstName([in] BSTR retval);
536
537    [id(0x00000019), propget]
538    HRESULT LastName([out, retval] BSTR* retval);
539
540    [id(0x00000019), propput]
541    HRESULT LastName([in] BSTR retval);
542
543    [id(0x0000001b), propget]
544    HRESULT OtherName([out, retval] BSTR* retval);
545
546    [id(0x0000001b), propput]
547    HRESULT OtherName([in] BSTR retval);
548
549    [id(0x00000072), propget]
550    HRESULT NamePrefix([out, retval] BSTR* retval);
551
552    [id(0x00000072), propput]
553    HRESULT NamePrefix([in] BSTR retval);
554
555    [id(0x00000073), propget]
556    HRESULT NameSuffix([out, retval] BSTR* retval);
557
558    [id(0x00000073), propput]
559    HRESULT NameSuffix([in] BSTR retval);
560
561    [id(0x00000024), propget]
562    HRESULT Title([out, retval] BSTR* retval);
563
564    [id(0x00000024), propput]
565    HRESULT Title([in] BSTR retval);
566
567    [id(0x0000001a), propget]
568    HRESULT Manager([out, retval] BSTR* retval);
569
570    [id(0x0000001a), propput]
571    HRESULT Manager([in] BSTR retval);
572
573    [id(0x00000020), propget]
574    HRESULT TelephoneHome([out, retval] VARIANT* retval);
575
576    [id(0x00000020), propput]
577    HRESULT TelephoneHome([in] VARIANT retval);
578
579    [id(0x00000021), propget]
580    HRESULT TelephoneMobile([out, retval] VARIANT* retval);
581
582    [id(0x00000021), propput]
583    HRESULT TelephoneMobile([in] VARIANT retval);
584
585    [id(0x00000022), propget]
586    HRESULT TelephoneNumber([out, retval] VARIANT* retval);
587
588    [id(0x00000022), propput]
589    HRESULT TelephoneNumber([in] VARIANT retval);
590
591    [id(0x00000011), propget]
592    HRESULT TelephonePager([out, retval] VARIANT* retval);
593
594    [id(0x00000011), propput]
595    HRESULT TelephonePager([in] VARIANT retval);
596
597    [id(0x00000010), propget]
598    HRESULT FaxNumber([out, retval] VARIANT* retval);
599
600    [id(0x00000010), propput]
601    HRESULT FaxNumber([in] VARIANT retval);
602
603    [id(0x0000001c), propget]
604    HRESULT OfficeLocations([out, retval] VARIANT* retval);
605
606    [id(0x0000001c), propput]
607    HRESULT OfficeLocations([in] VARIANT retval);
608
609    [id(0x0000001e), propget]
610    HRESULT PostalAddresses([out, retval] VARIANT* retval);
611
612    [id(0x0000001e), propput]
613    HRESULT PostalAddresses([in] VARIANT retval);
614
615    [id(0x0000001f), propget]
616    HRESULT PostalCodes([out, retval] VARIANT* retval);
617
618    [id(0x0000001f), propput]
619    HRESULT PostalCodes([in] VARIANT retval);
620
621    [id(0x00000075), propget]
622    HRESULT SeeAlso([out, retval] VARIANT* retval);
623
624    [id(0x00000075), propput]
625    HRESULT SeeAlso([in] VARIANT retval);
626
627    [id(0x00000025), propget]
628    HRESULT AccountDisabled([out, retval] VARIANT_BOOL* retval);
629
630    [id(0x00000025), propput]
631    HRESULT AccountDisabled([in] VARIANT_BOOL retval);
632
633    [id(0x00000026), propget]
634    HRESULT AccountExpirationDate([out, retval] DATE* retval);
635
636    [id(0x00000026), propput]
637    HRESULT AccountExpirationDate([in] DATE retval);
638
639    [id(0x00000029), propget]
640    HRESULT GraceLoginsAllowed([out, retval] long* retval);
641
642    [id(0x00000029), propput]
643    HRESULT GraceLoginsAllowed([in] long retval);
644
645    [id(0x0000002a), propget]
646    HRESULT GraceLoginsRemaining([out, retval] long* retval);
647
648    [id(0x0000002a), propput]
649    HRESULT GraceLoginsRemaining([in] long retval);
650
651    [id(0x0000002b), propget]
652    HRESULT IsAccountLocked([out, retval] VARIANT_BOOL* retval);
653
654    [id(0x0000002b), propput]
655    HRESULT IsAccountLocked([in] VARIANT_BOOL retval);
656
657    [id(0x0000002d), propget]
658    HRESULT LoginHours([out, retval] VARIANT* retval);
659
660    [id(0x0000002d), propput]
661    HRESULT LoginHours([in] VARIANT retval);
662
663    [id(0x0000002e), propget]
664    HRESULT LoginWorkstations([out, retval] VARIANT* retval);
665
666    [id(0x0000002e), propput]
667    HRESULT LoginWorkstations([in] VARIANT retval);
668
669    [id(0x0000002f), propget]
670    HRESULT MaxLogins([out, retval] long* retval);
671
672    [id(0x0000002f), propput]
673    HRESULT MaxLogins([in] long retval);
674
675    [id(0x00000030), propget]
676    HRESULT MaxStorage([out, retval] long* retval);
677
678    [id(0x00000030), propput]
679    HRESULT MaxStorage([in] long retval);
680
681    [id(0x00000031), propget]
682    HRESULT PasswordExpirationDate([out, retval] DATE* retval);
683
684    [id(0x00000031), propput]
685    HRESULT PasswordExpirationDate([in] DATE retval);
686
687    [id(0x00000032), propget]
688    HRESULT PasswordMinimumLength([out, retval] long* retval);
689
690    [id(0x00000032), propput]
691    HRESULT PasswordMinimumLength([in] long retval);
692
693    [id(0x00000033), propget]
694    HRESULT PasswordRequired([out, retval] VARIANT_BOOL* retval);
695
696    [id(0x00000033), propput]
697    HRESULT PasswordRequired([in] VARIANT_BOOL retval);
698
699    [id(0x00000034), propget]
700    HRESULT RequireUniquePassword([out, retval] VARIANT_BOOL* retval);
701
702    [id(0x00000034), propput]
703    HRESULT RequireUniquePassword([in] VARIANT_BOOL retval);
704
705    [id(0x0000003c), propget]
706    HRESULT EmailAddress([out, retval] BSTR* retval);
707
708    [id(0x0000003c), propput]
709    HRESULT EmailAddress([in] BSTR retval);
710
711    [id(0x0000003d), propget]
712    HRESULT HomeDirectory([out, retval] BSTR* retval);
713
714    [id(0x0000003d), propput]
715    HRESULT HomeDirectory([in] BSTR retval);
716
717    [id(0x0000003e), propget]
718    HRESULT Languages([out, retval] VARIANT* retval);
719
720    [id(0x0000003e), propput]
721    HRESULT Languages([in] VARIANT retval);
722
723    [id(0x0000003f), propget]
724    HRESULT Profile([out, retval] BSTR* retval);
725
726    [id(0x0000003f), propput]
727    HRESULT Profile([in] BSTR retval);
728
729    [id(0x00000040), propget]
730    HRESULT LoginScript([out, retval] BSTR* retval);
731
732    [id(0x00000040), propput]
733    HRESULT LoginScript([in] BSTR retval);
734
735    [id(0x00000041), propget]
736    HRESULT Picture([out, retval] VARIANT* retval);
737
738    [id(0x00000041), propput]
739    HRESULT Picture([in] VARIANT retval);
740
741    [id(0x00000078), propget]
742    HRESULT HomePage([out, retval] BSTR* retval);
743
744    [id(0x00000078), propput]
745    HRESULT HomePage([in] BSTR retval);
746
747    [id(0x00000042)]
748    HRESULT Groups([out, retval] IADsMembers** ppGroups);
749
750    [id(0x00000043)]
751    HRESULT SetPassword([in] BSTR NewPassword);
752
753    [id(0x00000044)]
754    HRESULT ChangePassword([in] BSTR bstrOldPassword, [in] BSTR bstrNewPassword);
755};
756
757/*****************************************************************************
758 *    IDirectorySearch interface
759 */
760[
761    odl,
762    local,
763    uuid(109BA8EC-92F0-11D0-A790-00C04FD8D5A8)
764]
765interface IDirectorySearch : IUnknown
766{
767    HRESULT SetSearchPreference([in] PADS_SEARCHPREF_INFO pSearchPrefs, [in] DWORD dwNumPrefs);
768    HRESULT ExecuteSearch([in] LPWSTR pszSearchFilter, [in] LPWSTR* pAttributeNames,
769                    [in] DWORD dwNumberAttributes, [out] PADS_SEARCH_HANDLE phSearchResult);
770    HRESULT AbandonSearch([in] ADS_SEARCH_HANDLE phSearchResult);
771    HRESULT GetFirstRow([in] ADS_SEARCH_HANDLE hSearchResult);
772    HRESULT GetNextRow([in] ADS_SEARCH_HANDLE hSearchResult);
773    HRESULT GetPreviousRow([in] ADS_SEARCH_HANDLE hSearchResult);
774    HRESULT GetNextColumnName([in] ADS_SEARCH_HANDLE hSearchHandle, [out] LPWSTR* ppszColumnName);
775    HRESULT GetColumn( [in] ADS_SEARCH_HANDLE hSearchResult, [in] LPWSTR szColumnName,
776                    [out] PADS_SEARCH_COLUMN pSearchColumn);
777    HRESULT FreeColumn([in] PADS_SEARCH_COLUMN pSearchColumn);
778    HRESULT CloseSearchHandle([in] ADS_SEARCH_HANDLE hSearchResult);
779};
780