2 * Copyright 2005 Francois Gouget
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.
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.
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
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,
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,
40 ADS_RIGHT_GENERIC_ALL
= 0x10000000,
41 ADS_RIGHT_GENERIC_EXECUTE
= 0x20000000,
42 ADS_RIGHT_GENERIC_WRITE
= 0x40000000,
43 ADS_RIGHT_GENERIC_READ
= 0x80000000
48 ADS_SECURE_AUTHENTICATION
= 0x1,
49 ADS_USE_ENCRYPTION
= 0x2,
51 ADS_READONLY_SERVER
= 0x4,
52 ADS_PROMPT_CREDENTIALS
= 0x8,
53 ADS_NO_AUTHENTICATION
= 0x10,
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
;
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
,
80 ADS_SEARCHPREF_ATTRIBUTE_QUERY
,
81 ADS_SEARCHPREF_SECURITY_MASK
,
82 ADS_SEARCHPREF_DIRSYNC_FLAG
,
83 ADS_SEARCHPREF_EXTENDED_DN
84 } ADS_SEARCHPREF_ENUM
;
86 typedef ADS_SEARCHPREF_ENUM
*PADS_SEARCHPREF_INFO
;
91 ADS_STATUS_INVALID_SEARCHPREF
,
92 ADS_STATUS_INVALID_SEARCHPREFVALUE
99 ADSTYPE_CASE_EXACT_STRING
,
100 ADSTYPE_CASE_IGNORE_STRING
,
101 ADSTYPE_PRINTABLE_STRING
,
102 ADSTYPE_NUMERIC_STRING
,
105 ADSTYPE_OCTET_STRING
,
107 ADSTYPE_LARGE_INTEGER
,
108 ADSTYPE_PROV_SPECIFIC
,
109 ADSTYPE_OBJECT_CLASS
,
110 ADSTYPE_CASEIGNORE_LIST
,
113 ADSTYPE_POSTALADDRESS
,
119 ADSTYPE_REPLICAPOINTER
,
122 ADSTYPE_NT_SECURITY_DESCRIPTOR
,
124 ADSTYPE_DN_WITH_BINARY
,
125 ADSTYPE_DN_WITH_STRING
130 ADS_PASSWORD_ENCODE_REQUIRE_SSL
,
131 ADS_PASSWORD_ENCODE_CLEAR
132 } ADS_PASSWORD_ENCODING_ENUM
;
134 typedef struct _ADS_CASEIGNORE_LIST
136 struct _ADS_CASEIGNORE_LIST
*Next
;
138 } ADS_CASEIGNORE_LIST
;
140 typedef struct _ADS_OCTET_LIST
142 struct _ADS_OCTET_LIST
*Next
;
152 } ADS_PATH
, *PADS_PATH
;
161 typedef ADSTYPEENUM ADSTYPE
;
162 typedef LPWSTR ADS_DN_STRING
;
163 typedef LPWSTR
*PADS_DN_STRING
;
164 typedef LPWSTR ADS_CASE_EXACT_STRING
;
165 typedef LPWSTR
*PADS_CASE_EXACT_STRING
;
166 typedef LPWSTR ADS_CASE_IGNORE_STRING
;
167 typedef LPWSTR
*PADS_CASE_IGNORE_STRING
;
168 typedef LPWSTR ADS_PRINTABLE_STRING
;
169 typedef LPWSTR
*PADS_PRINTABLE_STRING
;
170 typedef LPWSTR ADS_NUMERIC_STRING
;
171 typedef LPWSTR
*PADS_NUMERIC_STRING
;
172 typedef DWORD ADS_BOOLEAN
;
173 typedef DWORD
*LPNDS_BOOLEAN
;
174 typedef DWORD ADS_INTEGER
;
175 typedef DWORD
*PADS_INTEGER
;
176 typedef SYSTEMTIME ADS_UTC_TIME
;
177 typedef SYSTEMTIME
*PADS_UTC_TIME
;
178 typedef LARGE_INTEGER ADS_LARGE_INTEGER
;
179 typedef LARGE_INTEGER
*PADS_LARGE_INTEGER
;
180 typedef LPWSTR ADS_OBJECT_CLASS
;
181 typedef LPWSTR
*PADS_OBJECT_CLASS
;
182 typedef struct _ADS_OCTET_LIST
*PADS_OCTET_LIST
;
183 typedef struct _ADS_CASEIGNORE_LIST
*PADS_CASEIGNORE_LIST
;
184 typedef ADS_STATUSENUM ADS_STATUS
;
185 typedef ADS_SEARCHPREF_ENUM ADS_SEARCHPREF
;
186 typedef HANDLE ADS_SEARCH_HANDLE
;
187 typedef HANDLE *PADS_SEARCH_HANDLE
;
204 LPWSTR PostalAddress
[ 6 ];
205 } ADS_POSTALADDRESS
, *PADS_POSTALADDRESS
;
212 } ADS_TYPEDNAME
, *PADS_TYPEDNAME
;
231 } ADS_NETADDRESS
, *PADS_NETADDRESS
;
239 PADS_NETADDRESS ReplicaAddressHints
;
240 } ADS_REPLICAPOINTER
, *PADS_REPLICAPOINTER
;
244 LPWSTR TelephoneNumber
;
247 } ADS_FAXNUMBER
, *PADS_FAXNUMBER
;
254 } ADS_EMAIL
, *PADS_EMAIL
;
260 } ADS_NT_SECURITY_DESCRIPTOR
;
267 } ADS_DN_WITH_BINARY
, *PADS_DN_WITH_BINARY
;
271 LPWSTR pszStringValue
;
273 } ADS_DN_WITH_STRING
, *PADS_DN_WITH_STRING
;
275 typedef struct _adsvalue
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
;
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
;
295 PADS_POSTALADDRESS pPostalAddress
;
296 ADS_TIMESTAMP Timestamp
;
297 ADS_BACKLINK BackLink
;
298 PADS_TYPEDNAME pTypedName
;
300 PADS_NETADDRESS pNetAddress
;
301 PADS_REPLICAPOINTER pReplicaPointer
;
302 PADS_FAXNUMBER pFaxNumber
;
304 ADS_NT_SECURITY_DESCRIPTOR SecurityDescriptor
;
305 PADS_DN_WITH_BINARY pDNWithBinary
;
306 PADS_DN_WITH_STRING pDNWithString
;
308 } ADSVALUE
, *PADSVALUE
;
310 typedef struct ads_searchpref_info
312 ADS_SEARCHPREF dwSearchPref
;
315 } ADS_SEARCHPREF_INFO
;
317 typedef struct ads_search_column
321 PADSVALUE pADsValues
;
324 } ADS_SEARCH_COLUMN
, *PADS_SEARCH_COLUMN
;
326 /*****************************************************************************
327 * IADsContainer interface
331 uuid(001677d0
-fd16
-11ce
-abc4
-02608c9e7553
)
333 interface IADsContainer
: IDispatch
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
);
348 [in] BSTR bstrClassName
,
349 [in] BSTR bstrRelativeName
,
350 [out, retval] IDispatch
**ppObject
);
352 [in] BSTR bstrClassName
,
353 [in] BSTR bstrRelativeName
,
354 [out, retval] IDispatch
**ppObject
);
356 [in] BSTR bstrClassName
,
357 [in] BSTR bstrRelativeName
);
359 [in] BSTR bstrSourceName
,
360 [in] BSTR bstrNewName
,
361 [out, retval] IDispatch
**ppObject
);
363 [in] BSTR bstrSourceName
,
364 [in] BSTR bstrNewName
,
365 [out, retval] IDispatch
**ppObject
);
368 /*****************************************************************************
373 uuid(FD8256D0
-FD15
-11CE
-ABC4
-02608C9E7553
),
377 interface IADs
: IDispatch
379 [id(0x00000002), propget]
380 HRESULT Name
([out, retval] BSTR* retval);
382 [id(0x00000003), propget]
383 HRESULT Class
([out, retval] BSTR* retval);
385 [id(0x00000004), propget]
386 HRESULT GUID
([out, retval] BSTR* retval);
388 [id(0x00000005), propget]
389 HRESULT ADsPath
([out, retval] BSTR* retval);
391 [id(0x00000006), propget]
392 HRESULT Parent
([out, retval] BSTR* retval);
394 [id(0x00000007), propget]
395 HRESULT Schema
([out, retval] BSTR* retval);
404 HRESULT Get
([in] BSTR bstrName
, [out, retval] VARIANT* pvProp
);
407 HRESULT Put
([in] BSTR bstrName
, [in] VARIANT vProp
);
410 HRESULT GetEx
([in] BSTR bstrName
, [out, retval] VARIANT* pvProp
);
413 HRESULT PutEx
([in] long lnControlCode
, [in] BSTR bstrName
, [in] VARIANT vProp
);
416 HRESULT GetInfoEx
( [in] VARIANT vProperties
, [in] long lnReserved
);
419 /*****************************************************************************
420 * IADsMembers interface
424 uuid(451A0030
-72EC
-11CF
-B03B
-00AA006E0975
),
428 interface IADsMembers
: IDispatch
430 [id(0x00000002), propget]
431 HRESULT Count
([out, retval] long* plCount
);
433 [id(0xfffffffc), propget]
434 HRESULT _NewEnum
([out, retval] IUnknown
** ppEnumerator
);
436 [id(0x00000003), propget]
437 HRESULT Filter
([out, retval] VARIANT* pvFilter
);
439 [id(0x00000003), propput]
440 HRESULT Filter
([in] VARIANT pvFilter
);
443 /*****************************************************************************
444 * IADsGroup interface
448 uuid(27636B00
-410F
-11CF
-B1FF
-02608C9E7553
),
452 interface IADsGroup
: IADs
{
453 [id(0x0000000f), propget]
454 HRESULT Description
([out, retval] BSTR* retval);
456 [id(0x0000000f), propput]
457 HRESULT Description
([in] BSTR retval);
460 HRESULT Members
([out, retval] IADsMembers
** ppMembers
);
463 HRESULT IsMember
([in] BSTR bstrMember
, [out, retval] VARIANT_BOOL* bMember
);
466 HRESULT Add
([in] BSTR bstrNewItem
);
469 HRESULT Remove
([in] BSTR bstrItemToBeRemoved
);
472 /*****************************************************************************
477 uuid(3E37E320
-17E2
-11CF
-ABC4
-02608C9E7553
),
481 interface IADsUser
: IADs
483 [id(0x00000035), propget]
484 HRESULT BadLoginAddress
([out, retval] BSTR* retval);
486 [id(0x00000036), propget]
487 HRESULT BadLoginCount
([out, retval] long* retval);
489 [id(0x00000038), propget]
490 HRESULT LastLogin
([out, retval] DATE
* retval);
492 [id(0x00000039), propget]
493 HRESULT LastLogoff
([out, retval] DATE
* retval);
495 [id(0x0000003a), propget]
496 HRESULT LastFailedLogin
([out, retval] DATE
* retval);
498 [id(0x0000003b), propget]
499 HRESULT PasswordLastChanged
([out, retval] DATE
* retval);
501 [id(0x0000000f), propget]
502 HRESULT Description
([out, retval] BSTR* retval);
504 [id(0x0000000f), propput]
505 HRESULT Description
([in] BSTR retval);
507 [id(0x00000013), propget]
508 HRESULT Division
([out, retval] BSTR* retval);
510 [id(0x00000013), propput]
511 HRESULT Division
([in] BSTR retval);
513 [id(0x0000007a), propget]
514 HRESULT Department
([out, retval] BSTR* retval);
516 [id(0x0000007a), propput]
517 HRESULT Department
([in] BSTR retval);
519 [id(0x00000014), propget]
520 HRESULT EmployeeID
([out, retval] BSTR* retval);
522 [id(0x00000014), propput]
523 HRESULT EmployeeID
([in] BSTR retval);
525 [id(0x00000017), propget]
526 HRESULT FullName
([out, retval] BSTR* retval);
528 [id(0x00000017), propput]
529 HRESULT FullName
([in] BSTR retval);
531 [id(0x00000016), propget]
532 HRESULT FirstName
([out, retval] BSTR* retval);
534 [id(0x00000016), propput]
535 HRESULT FirstName
([in] BSTR retval);
537 [id(0x00000019), propget]
538 HRESULT LastName
([out, retval] BSTR* retval);
540 [id(0x00000019), propput]
541 HRESULT LastName
([in] BSTR retval);
543 [id(0x0000001b), propget]
544 HRESULT OtherName
([out, retval] BSTR* retval);
546 [id(0x0000001b), propput]
547 HRESULT OtherName
([in] BSTR retval);
549 [id(0x00000072), propget]
550 HRESULT NamePrefix
([out, retval] BSTR* retval);
552 [id(0x00000072), propput]
553 HRESULT NamePrefix
([in] BSTR retval);
555 [id(0x00000073), propget]
556 HRESULT NameSuffix
([out, retval] BSTR* retval);
558 [id(0x00000073), propput]
559 HRESULT NameSuffix
([in] BSTR retval);
561 [id(0x00000024), propget]
562 HRESULT Title
([out, retval] BSTR* retval);
564 [id(0x00000024), propput]
565 HRESULT Title
([in] BSTR retval);
567 [id(0x0000001a), propget]
568 HRESULT Manager
([out, retval] BSTR* retval);
570 [id(0x0000001a), propput]
571 HRESULT Manager
([in] BSTR retval);
573 [id(0x00000020), propget]
574 HRESULT TelephoneHome
([out, retval] VARIANT* retval);
576 [id(0x00000020), propput]
577 HRESULT TelephoneHome
([in] VARIANT retval);
579 [id(0x00000021), propget]
580 HRESULT TelephoneMobile
([out, retval] VARIANT* retval);
582 [id(0x00000021), propput]
583 HRESULT TelephoneMobile
([in] VARIANT retval);
585 [id(0x00000022), propget]
586 HRESULT TelephoneNumber
([out, retval] VARIANT* retval);
588 [id(0x00000022), propput]
589 HRESULT TelephoneNumber
([in] VARIANT retval);
591 [id(0x00000011), propget]
592 HRESULT TelephonePager
([out, retval] VARIANT* retval);
594 [id(0x00000011), propput]
595 HRESULT TelephonePager
([in] VARIANT retval);
597 [id(0x00000010), propget]
598 HRESULT FaxNumber
([out, retval] VARIANT* retval);
600 [id(0x00000010), propput]
601 HRESULT FaxNumber
([in] VARIANT retval);
603 [id(0x0000001c), propget]
604 HRESULT OfficeLocations
([out, retval] VARIANT* retval);
606 [id(0x0000001c), propput]
607 HRESULT OfficeLocations
([in] VARIANT retval);
609 [id(0x0000001e), propget]
610 HRESULT PostalAddresses
([out, retval] VARIANT* retval);
612 [id(0x0000001e), propput]
613 HRESULT PostalAddresses
([in] VARIANT retval);
615 [id(0x0000001f), propget]
616 HRESULT PostalCodes
([out, retval] VARIANT* retval);
618 [id(0x0000001f), propput]
619 HRESULT PostalCodes
([in] VARIANT retval);
621 [id(0x00000075), propget]
622 HRESULT SeeAlso
([out, retval] VARIANT* retval);
624 [id(0x00000075), propput]
625 HRESULT SeeAlso
([in] VARIANT retval);
627 [id(0x00000025), propget]
628 HRESULT AccountDisabled
([out, retval] VARIANT_BOOL* retval);
630 [id(0x00000025), propput]
631 HRESULT AccountDisabled
([in] VARIANT_BOOL retval);
633 [id(0x00000026), propget]
634 HRESULT AccountExpirationDate
([out, retval] DATE
* retval);
636 [id(0x00000026), propput]
637 HRESULT AccountExpirationDate
([in] DATE
retval);
639 [id(0x00000029), propget]
640 HRESULT GraceLoginsAllowed
([out, retval] long* retval);
642 [id(0x00000029), propput]
643 HRESULT GraceLoginsAllowed
([in] long retval);
645 [id(0x0000002a), propget]
646 HRESULT GraceLoginsRemaining
([out, retval] long* retval);
648 [id(0x0000002a), propput]
649 HRESULT GraceLoginsRemaining
([in] long retval);
651 [id(0x0000002b), propget]
652 HRESULT IsAccountLocked
([out, retval] VARIANT_BOOL* retval);
654 [id(0x0000002b), propput]
655 HRESULT IsAccountLocked
([in] VARIANT_BOOL retval);
657 [id(0x0000002d), propget]
658 HRESULT LoginHours
([out, retval] VARIANT* retval);
660 [id(0x0000002d), propput]
661 HRESULT LoginHours
([in] VARIANT retval);
663 [id(0x0000002e), propget]
664 HRESULT LoginWorkstations
([out, retval] VARIANT* retval);
666 [id(0x0000002e), propput]
667 HRESULT LoginWorkstations
([in] VARIANT retval);
669 [id(0x0000002f), propget]
670 HRESULT MaxLogins
([out, retval] long* retval);
672 [id(0x0000002f), propput]
673 HRESULT MaxLogins
([in] long retval);
675 [id(0x00000030), propget]
676 HRESULT MaxStorage
([out, retval] long* retval);
678 [id(0x00000030), propput]
679 HRESULT MaxStorage
([in] long retval);
681 [id(0x00000031), propget]
682 HRESULT PasswordExpirationDate
([out, retval] DATE
* retval);
684 [id(0x00000031), propput]
685 HRESULT PasswordExpirationDate
([in] DATE
retval);
687 [id(0x00000032), propget]
688 HRESULT PasswordMinimumLength
([out, retval] long* retval);
690 [id(0x00000032), propput]
691 HRESULT PasswordMinimumLength
([in] long retval);
693 [id(0x00000033), propget]
694 HRESULT PasswordRequired
([out, retval] VARIANT_BOOL* retval);
696 [id(0x00000033), propput]
697 HRESULT PasswordRequired
([in] VARIANT_BOOL retval);
699 [id(0x00000034), propget]
700 HRESULT RequireUniquePassword
([out, retval] VARIANT_BOOL* retval);
702 [id(0x00000034), propput]
703 HRESULT RequireUniquePassword
([in] VARIANT_BOOL retval);
705 [id(0x0000003c), propget]
706 HRESULT EmailAddress
([out, retval] BSTR* retval);
708 [id(0x0000003c), propput]
709 HRESULT EmailAddress
([in] BSTR retval);
711 [id(0x0000003d), propget]
712 HRESULT HomeDirectory
([out, retval] BSTR* retval);
714 [id(0x0000003d), propput]
715 HRESULT HomeDirectory
([in] BSTR retval);
717 [id(0x0000003e), propget]
718 HRESULT Languages
([out, retval] VARIANT* retval);
720 [id(0x0000003e), propput]
721 HRESULT Languages
([in] VARIANT retval);
723 [id(0x0000003f), propget]
724 HRESULT Profile
([out, retval] BSTR* retval);
726 [id(0x0000003f), propput]
727 HRESULT Profile
([in] BSTR retval);
729 [id(0x00000040), propget]
730 HRESULT LoginScript
([out, retval] BSTR* retval);
732 [id(0x00000040), propput]
733 HRESULT LoginScript
([in] BSTR retval);
735 [id(0x00000041), propget]
736 HRESULT Picture
([out, retval] VARIANT* retval);
738 [id(0x00000041), propput]
739 HRESULT Picture
([in] VARIANT retval);
741 [id(0x00000078), propget]
742 HRESULT HomePage
([out, retval] BSTR* retval);
744 [id(0x00000078), propput]
745 HRESULT HomePage
([in] BSTR retval);
748 HRESULT Groups
([out, retval] IADsMembers
** ppGroups
);
751 HRESULT SetPassword
([in] BSTR NewPassword
);
754 HRESULT ChangePassword
([in] BSTR bstrOldPassword
, [in] BSTR bstrNewPassword
);
757 /*****************************************************************************
758 * IDirectorySearch interface
763 uuid(109BA8EC
-92F0
-11D0
-A790
-00C04FD8D5A8
)
765 interface IDirectorySearch
: IUnknown
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
);