|
| 1 | +// IDirectorySearch interface definitions for comtypes |
| 2 | +// |
| 3 | +// References: |
| 4 | +// https://learn.microsoft.com/en-us/windows/win32/api/iads/nn-iads-idirectorysearch |
| 5 | + |
| 6 | +import { DWORD, LPCWSTR, LPVOID, HANDLE } from "../../wintypes.js"; |
| 7 | +import { COMInterface, STDMETHOD, HRESULT, IUnknown, GUID } from "../comtypes.js"; |
| 8 | + |
| 9 | +export const IID_IDirectorySearch = new GUID("{109BA8EC-92F0-11D0-A790-00C04FD8D5A8}"); |
| 10 | + |
| 11 | +// ═══════════════════════════════════════════════════════════════════════ |
| 12 | +// IDirectorySearch — Active Directory search interface |
| 13 | +// ═══════════════════════════════════════════════════════════════════════ |
| 14 | +// vtable: IUnknown (3) + 10 own methods = 13 slots |
| 15 | +// |
| 16 | +// ADS_SEARCH_HANDLE is `HANDLE` (void* pointer-sized). For `ExecuteSearch`, |
| 17 | +// pass (DWORD)-1 (= 0xFFFFFFFF) as dwNumberAttributes to request all attributes. |
| 18 | + |
| 19 | +export const IDirectorySearch = COMInterface({ |
| 20 | + name: "IDirectorySearch", |
| 21 | + iid: "{109BA8EC-92F0-11D0-A790-00C04FD8D5A8}", |
| 22 | + extends: IUnknown, |
| 23 | + methods: [ |
| 24 | + // slot 3: SetSearchPreference(PADS_SEARCHPREF_INFO, DWORD) |
| 25 | + STDMETHOD(HRESULT, "SetSearchPreference", [LPVOID, DWORD]), |
| 26 | + // slot 4: ExecuteSearch(LPWSTR, LPWSTR*, DWORD, PADS_SEARCH_HANDLE) |
| 27 | + STDMETHOD(HRESULT, "ExecuteSearch", [LPCWSTR, LPVOID, DWORD, LPVOID]), |
| 28 | + // slot 5: AbandonSearch(ADS_SEARCH_HANDLE) |
| 29 | + STDMETHOD(HRESULT, "AbandonSearch", [HANDLE]), |
| 30 | + // slot 6: GetFirstRow(ADS_SEARCH_HANDLE) |
| 31 | + STDMETHOD(HRESULT, "GetFirstRow", [HANDLE]), |
| 32 | + // slot 7: GetNextRow(ADS_SEARCH_HANDLE) |
| 33 | + STDMETHOD(HRESULT, "GetNextRow", [HANDLE]), |
| 34 | + // slot 8: GetPreviousRow(ADS_SEARCH_HANDLE) |
| 35 | + STDMETHOD(HRESULT, "GetPreviousRow", [HANDLE]), |
| 36 | + // slot 9: GetNextColumnName(ADS_SEARCH_HANDLE, LPWSTR*) |
| 37 | + STDMETHOD(HRESULT, "GetNextColumnName", [HANDLE, LPVOID]), |
| 38 | + // slot 10: GetColumn(ADS_SEARCH_HANDLE, LPWSTR, PADS_SEARCH_COLUMN) |
| 39 | + STDMETHOD(HRESULT, "GetColumn", [HANDLE, LPCWSTR, LPVOID]), |
| 40 | + // slot 11: FreeColumn(PADS_SEARCH_COLUMN) |
| 41 | + STDMETHOD(HRESULT, "FreeColumn", [LPVOID]), |
| 42 | + // slot 12: CloseSearchHandle(ADS_SEARCH_HANDLE) |
| 43 | + STDMETHOD(HRESULT, "CloseSearchHandle", [HANDLE]), |
| 44 | + ], |
| 45 | +}); |
| 46 | + |
| 47 | +// ═══════════════════════════════════════════════════════════════════════ |
| 48 | +// ADS_SEARCHPREF_ENUM — search preference identifiers |
| 49 | +// ═══════════════════════════════════════════════════════════════════════ |
| 50 | + |
| 51 | +export const ADS_SEARCHPREF_ASYNCHRONOUS = 0; |
| 52 | +export const ADS_SEARCHPREF_DEREF_ALIASES = 1; |
| 53 | +export const ADS_SEARCHPREF_SIZE_LIMIT = 2; |
| 54 | +export const ADS_SEARCHPREF_TIME_LIMIT = 3; |
| 55 | +export const ADS_SEARCHPREF_ATTRIBTYPES_ONLY = 4; |
| 56 | +export const ADS_SEARCHPREF_SEARCH_SCOPE = 5; |
| 57 | +export const ADS_SEARCHPREF_TIMEOUT = 6; |
| 58 | +export const ADS_SEARCHPREF_PAGESIZE = 7; |
| 59 | +export const ADS_SEARCHPREF_PAGED_TIME_LIMIT = 8; |
| 60 | +export const ADS_SEARCHPREF_CHASE_REFERRALS = 9; |
| 61 | +export const ADS_SEARCHPREF_SORT_ON = 10; |
| 62 | +export const ADS_SEARCHPREF_CACHE_RESULTS = 11; |
| 63 | +export const ADS_SEARCHPREF_DIRSYNC = 12; |
| 64 | +export const ADS_SEARCHPREF_TOMBSTONE = 13; |
| 65 | + |
| 66 | +// ═══════════════════════════════════════════════════════════════════════ |
| 67 | +// ADS_SCOPEENUM — search scope values |
| 68 | +// ═══════════════════════════════════════════════════════════════════════ |
| 69 | + |
| 70 | +export const ADS_SCOPE_BASE = 0; |
| 71 | +export const ADS_SCOPE_ONELEVEL = 1; |
| 72 | +export const ADS_SCOPE_SUBTREE = 2; |
| 73 | + |
| 74 | +// ═══════════════════════════════════════════════════════════════════════ |
| 75 | +// ADS_CHASE_REFERRALS_ENUM |
| 76 | +// ═══════════════════════════════════════════════════════════════════════ |
| 77 | + |
| 78 | +export const ADS_CHASE_REFERRALS_NEVER = 0; |
| 79 | +export const ADS_CHASE_REFERRALS_SUBORDINATE = 0x20; |
| 80 | +export const ADS_CHASE_REFERRALS_EXTERNAL = 0x40; |
| 81 | +export const ADS_CHASE_REFERRALS_ALWAYS = ADS_CHASE_REFERRALS_SUBORDINATE | ADS_CHASE_REFERRALS_EXTERNAL; |
| 82 | + |
| 83 | +// ═══════════════════════════════════════════════════════════════════════ |
| 84 | +// ADSTYPEENUM — column value types (for ADS_SEARCH_COLUMN.dwADsType) |
| 85 | +// ═══════════════════════════════════════════════════════════════════════ |
| 86 | + |
| 87 | +export const ADSTYPE_INVALID = 0; |
| 88 | +export const ADSTYPE_DN_STRING = 1; |
| 89 | +export const ADSTYPE_CASE_EXACT_STRING = 2; |
| 90 | +export const ADSTYPE_CASE_IGNORE_STRING = 3; |
| 91 | +export const ADSTYPE_PRINTABLE_STRING = 4; |
| 92 | +export const ADSTYPE_NUMERIC_STRING = 5; |
| 93 | +export const ADSTYPE_BOOLEAN = 6; |
| 94 | +export const ADSTYPE_INTEGER = 7; |
| 95 | +export const ADSTYPE_OCTET_STRING = 8; |
| 96 | +export const ADSTYPE_UTC_TIME = 9; |
| 97 | +export const ADSTYPE_LARGE_INTEGER = 10; |
| 98 | +export const ADSTYPE_TYPEDNAME = 11; |
| 99 | +export const ADSTYPE_FAXNUMBER = 12; |
| 100 | +export const ADSTYPE_PATH = 13; |
| 101 | +export const ADSTYPE_OBJECT_CLASS = 14; |
| 102 | +export const ADSTYPE_NT_SECURITY_DESCRIPTOR = 25; |
| 103 | + |
| 104 | +// S_ADS_NOMORE_ROWS — returned by GetNextRow/GetFirstRow when no more rows |
| 105 | +export const S_ADS_NOMORE_ROWS = 0x00005012; |
| 106 | +// S_ADS_NOMORE_COLUMNS — returned by GetNextColumnName when no more columns |
| 107 | +export const S_ADS_NOMORE_COLUMNS = 0x00005013; |
0 commit comments