mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
651 lines
25 KiB
651 lines
25 KiB
#ifndef __dsclient_h
|
|
#define __dsclient_h
|
|
#ifndef __dsclintp_h ;internal
|
|
#define __dsclintp_h ;internal
|
|
|
|
|
|
//---------------------------------------------------------------------------//
|
|
// CLSIDs exposed for the dsclient.
|
|
//---------------------------------------------------------------------------//
|
|
|
|
// this CLSID is used to signal that the DSOBJECTNAMEs structure originated
|
|
// for the Microsoft DS.
|
|
|
|
DEFINE_GUID(CLSID_MicrosoftDS, 0xfe1290f0, 0xcfbd, 0x11cf, 0xa3, 0x30, 0x0, 0xaa, 0x0, 0xc1, 0x6e, 0x65);
|
|
#define CLSID_DsFolder CLSID_MicrosoftDS
|
|
|
|
|
|
// this is the CLSID used by clients to get the IShellExtInit, IPropSheetExt
|
|
// and IContextMenus exposed from dsuiext.dll.
|
|
|
|
DEFINE_GUID(CLSID_DsPropertyPages, 0xd45d530, 0x764b, 0x11d0, 0xa1, 0xca, 0x0, 0xaa, 0x0, 0xc1, 0x6e, 0x65);
|
|
|
|
DEFINE_GUID(CLSID_DsDomainTreeBrowser, 0x1698790a, 0xe2b4, 0x11d0, 0xb0, 0xb1, 0x00, 0xc0, 0x4f, 0xd8, 0xdc, 0xa6);
|
|
DEFINE_GUID(IID_IDsBrowseDomainTree, 0x7cabcf1e, 0x78f5, 0x11d2, 0x96, 0xc, 0x0, 0xc0, 0x4f, 0xa3, 0x1a, 0x86);
|
|
|
|
DEFINE_GUID(CLSID_DsDisplaySpecifier, 0x1ab4a8c0, 0x6a0b, 0x11d2, 0xad, 0x49, 0x0, 0xc0, 0x4f, 0xa3, 0x1a, 0x86);
|
|
#define IID_IDsDisplaySpecifier CLSID_DsDisplaySpecifier
|
|
|
|
DEFINE_GUID(CLSID_DsFolderProperties, 0x9e51e0d0, 0x6e0f, 0x11d2, 0x96, 0x1, 0x0, 0xc0, 0x4f, 0xa3, 0x1a, 0x86);
|
|
#define IID_IDsFolderProperties CLSID_DsFolderProperties
|
|
|
|
#ifndef GUID_DEFS_ONLY ;both
|
|
|
|
#include "activeds.h"
|
|
#include "iadsp.h" ;internal
|
|
#include "comctrlp.h" ;internal
|
|
|
|
|
|
//---------------------------------------------------------------------------//
|
|
// Clipboard formats used within DSUI
|
|
//---------------------------------------------------------------------------//
|
|
|
|
//
|
|
// CF_DSOBJECTS
|
|
// ------------
|
|
// This clipboard format defines the seleciton for an DS IShellFolder to the
|
|
// shell extensions. All strings are stored as BSTR's, and an offset == 0
|
|
// is used to indicate that the string is not present.
|
|
//
|
|
|
|
#define DSOBJECT_ISCONTAINER 0x00000001 // = 1 => object is a container
|
|
#define DSOBJECT_READONLYPAGES 0x80000000 // = 1 => read only pages
|
|
|
|
#define DSPROVIDER_UNUSED_0 0x00000001
|
|
#define DSPROVIDER_UNUSED_1 0x00000002
|
|
#define DSPROVIDER_UNUSED_2 0x00000004
|
|
#define DSPROVIDER_UNUSED_3 0x00000008
|
|
#define DSPROVIDER_ADVANCED 0x00000010 // = 1 => advanced mode
|
|
|
|
#define CFSTR_DSOBJECTNAMES TEXT("DsObjectNames")
|
|
|
|
typedef struct
|
|
{
|
|
DWORD dwFlags; // item flags
|
|
DWORD dwProviderFlags; // flags for item provider
|
|
DWORD offsetName; // offset to ADS path of the object
|
|
DWORD offsetClass; // offset to object class name / == 0 not known
|
|
} DSOBJECT, * LPDSOBJECT;
|
|
|
|
typedef struct
|
|
{
|
|
CLSID clsidNamespace; // namespace identifier (indicates which namespace selection from)
|
|
UINT cItems; // number of objects
|
|
DSOBJECT aObjects[1]; // array of objects
|
|
} DSOBJECTNAMES, * LPDSOBJECTNAMES;
|
|
|
|
|
|
//
|
|
// CF_DSDISPLAYSPECOPTIONS
|
|
// -----------------------
|
|
// When invoking an object referenced by a display specifier (context menu, property
|
|
// page, etc) we call the IShellExtInit interface passing a IDataObject. This data
|
|
// object supports the CF_DSDISPLAYSPECOPTIONS format to give out configuration
|
|
// informaiton about admin/shell invocation.
|
|
//
|
|
// When interacting with dsuiext.dll the interfaces uses this clipboard format
|
|
// to determine which display specifier attributes to address (admin/shell)
|
|
// and pick up the values accordingly. If no format is suppoted then
|
|
// dsuiext.dll defaults to shell.
|
|
//
|
|
|
|
#define CFSTR_DS_DISPLAY_SPEC_OPTIONS TEXT("DsDisplaySpecOptions")
|
|
#define CFSTR_DSDISPLAYSPECOPTIONS CFSTR_DS_DISPLAY_SPEC_OPTIONS
|
|
|
|
typedef struct _DSDISPLAYSPECOPTIONS
|
|
{
|
|
DWORD dwSize; // size of struct, for versioning
|
|
DWORD dwFlags; // invocation flags
|
|
DWORD offsetAttribPrefix; // offset to attribute prefix string.
|
|
|
|
DWORD offsetUserName; // offset to UNICODE user name
|
|
DWORD offsetPassword; // offset to UNICODE password
|
|
DWORD offsetServer;
|
|
DWORD offsetServerConfigPath;
|
|
|
|
} DSDISPLAYSPECOPTIONS, * PDSDISPLAYSPECOPTIONS, * LPDSDISPLAYSPECOPTIONS;
|
|
|
|
#define DS_PROP_SHELL_PREFIX L"shell"
|
|
#define DS_PROP_ADMIN_PREFIX L"admin"
|
|
|
|
#define DSDSOF_HASUSERANDSERVERINFO 0x00000001 // = 1 => user name/password are valid
|
|
#define DSDSOF_SIMPLEAUTHENTICATE 0x00000002 // = 1 => don't use secure authentication to DS
|
|
#define DSDSOF_DSAVAILABLE 0x40000000 // = 1 => ignore DS available checks
|
|
;begin_internal
|
|
#define DSDSOF_INVOKEDFROMWAB 0x80000000 // = 1 => invoked from WAB
|
|
;end_internal
|
|
|
|
|
|
//
|
|
// CF_DSPROPERTYPAGEINFO
|
|
// ---------------------
|
|
// When the property pages for an object are being displayed the parsed
|
|
// display specifier string is passed to the page object via the IDataObject
|
|
// in the following clipboard format.
|
|
//
|
|
// Within the display specifier for a property page, the format for a
|
|
// Win32 extension is "n,{clsid}[,bla...]" we take the "bla" section and
|
|
// pass it down.
|
|
//
|
|
|
|
#define CFSTR_DSPROPERTYPAGEINFO TEXT("DsPropPageInfo")
|
|
|
|
typedef struct
|
|
{
|
|
DWORD offsetString; // offset to UNICODE string
|
|
} DSPROPERTYPAGEINFO, * LPDSPROPERTYPAGEINFO;
|
|
|
|
|
|
//
|
|
// To sync property pages and the admin tools this message is broadcast
|
|
//
|
|
|
|
#define DSPROP_ATTRCHANGED_MSG TEXT("DsPropAttrChanged")
|
|
|
|
//---------------------------------------------------------------------------//
|
|
|
|
|
|
//---------------------------------------------------------------------------//
|
|
//
|
|
// IDsBrowseDomainTree
|
|
// ===================
|
|
// This interface returns a list of the domains from a given computer name
|
|
// (or the current computer name if none is specified).
|
|
//
|
|
// NOTES:
|
|
// 1) The structure returned by ::GetDomains should be free'd using
|
|
// FreeDomains.
|
|
//
|
|
// 2) ::BrowseTo allocates a string on exit, this is allocated using
|
|
// CoTaskMemAlloc, and therefore should be free'd using CoTaskMemFree.
|
|
//
|
|
//---------------------------------------------------------------------------//
|
|
|
|
#define DBDTF_RETURNFQDN 0x00000001 // if not set, pszNCName will be blank
|
|
#define DBDTF_RETURNMIXEDDOMAINS 0x00000002 // set it if you want downlevel trust domains too
|
|
#define DBDTF_RETURNEXTERNAL 0x00000004 // set it if you want external trust domains too
|
|
#define DBDTF_RETURNINBOUND 0x00000008 // set it if you want trusting domains
|
|
#define DBDTF_RETURNINOUTBOUND 0x00000010 // set it if you want both trusted and trusting domains
|
|
|
|
typedef struct _DOMAINDESC
|
|
{
|
|
LPWSTR pszName; // domain name (if no dns, use netbios)
|
|
LPWSTR pszPath; // set to blank
|
|
LPWSTR pszNCName; // FQDN, e.g.,DC=mydomain,DC=microsoft,DC=com
|
|
LPWSTR pszTrustParent; // parent domain name (if no dns, use netbios)
|
|
LPWSTR pszObjectClass; // Object class of the domain object referenced
|
|
ULONG ulFlags; // Flags, from DS_TRUSTED_DOMAINS.Flags
|
|
BOOL fDownLevel; // == 1 if downlevel domain
|
|
struct _DOMAINDESC *pdChildList; // Children of this node
|
|
struct _DOMAINDESC *pdNextSibling; // Siblings of this node
|
|
} DOMAIN_DESC, DOMAINDESC, * PDOMAIN_DESC, * LPDOMAINDESC;
|
|
|
|
typedef struct
|
|
{
|
|
DWORD dsSize;
|
|
DWORD dwCount;
|
|
DOMAINDESC aDomains[1];
|
|
} DOMAIN_TREE, DOMAINTREE, * PDOMAIN_TREE, * LPDOMAINTREE;
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IDsBrowseDomainTree
|
|
|
|
DECLARE_INTERFACE_(IDsBrowseDomainTree, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
|
|
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
|
|
STDMETHOD_(ULONG,Release)(THIS) PURE;
|
|
|
|
// *** IDsBrowseDomainTree methods ***
|
|
STDMETHOD(BrowseTo)(THIS_ HWND hwndParent, LPWSTR *ppszTargetPath, DWORD dwFlags) PURE;
|
|
STDMETHOD(GetDomains)(THIS_ PDOMAIN_TREE *ppDomainTree, DWORD dwFlags) PURE;
|
|
STDMETHOD(FreeDomains)(THIS_ PDOMAIN_TREE *ppDomainTree) PURE;
|
|
STDMETHOD(FlushCachedDomains)(THIS) PURE;
|
|
STDMETHOD(SetComputer)(THIS_ LPCWSTR pszComputerName, LPCWSTR pszUserName, LPCWSTR pszPassword) PURE;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------//
|
|
|
|
|
|
//---------------------------------------------------------------------------//
|
|
//
|
|
// IDsDisplaySpecifier
|
|
// ===================
|
|
// This interface gives client UI access to the display specifiers for
|
|
// specific attributes.
|
|
//
|
|
//---------------------------------------------------------------------------//
|
|
|
|
//
|
|
// IDsDisplaySpecifier::SetServer flags
|
|
//
|
|
#define DSSSF_SIMPLEAUTHENTICATE 0x00000001 // = 1 => don't use secure authentication to DS
|
|
#define DSSSF_DSAVAILABLE 0x80000000 // = 1 => ignore DS available checks
|
|
|
|
//
|
|
// Flags for IDsDisplaySpecifier::GetIcon / GetIconLocation
|
|
//
|
|
#define DSGIF_ISNORMAL 0x0000000 // = icon is in normal state (default)
|
|
#define DSGIF_ISOPEN 0x0000001 // = icon is in open state
|
|
#define DSGIF_ISDISABLED 0x0000002 // = icon is in a disabled state
|
|
#define DSGIF_ISMASK 0x000000f
|
|
#define DSGIF_GETDEFAULTICON 0x0000010 // = 1 => if no icon then get default (from shell32.dll)
|
|
#define DSGIF_DEFAULTISCONTAINER 0x0000020 // = 1 => if returning default icon, return it as a container
|
|
|
|
//
|
|
// Flags for IDsDisplaySpecifier::IsClassContainer
|
|
//
|
|
#define DSICCF_IGNORETREATASLEAF 0x00000001 // = 1 => igore the "treatAsLeaf" and use only schema information
|
|
|
|
//
|
|
// Callback function used for IDsDisplaySpecifier::EnumClassAttributes
|
|
//
|
|
|
|
#define DSECAF_NOTLISTED 0x00000001 // = 1 => hide from the field drop down in the query UI
|
|
|
|
typedef HRESULT (CALLBACK *LPDSENUMATTRIBUTES)(LPARAM lParam, LPCWSTR pszAttributeName, LPCWSTR pszDisplayName, DWORD dwFlags);
|
|
|
|
//
|
|
// IDsDisplaySpecifier::GetClassCreationInfo information
|
|
//
|
|
|
|
#define DSCCIF_HASWIZARDDIALOG 0x00000001 // = 1 => return the wizard dialog CLSID
|
|
#define DSCCIF_HASWIZARDPRIMARYPAGE 0x00000002 // = 1 => returning a primary wizard dlg CLSID
|
|
|
|
typedef struct
|
|
{
|
|
DWORD dwFlags;
|
|
CLSID clsidWizardDialog;
|
|
CLSID clsidWizardPrimaryPage;
|
|
DWORD cWizardExtensions; // how many extension CLSIDs?
|
|
CLSID aWizardExtensions[1];
|
|
} DSCLASSCREATIONINFO, * LPDSCLASSCREATIONINFO;
|
|
|
|
//
|
|
// IDsDisplaySpecifier - a COM object for interacting with display specifiers
|
|
//
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IDsDisplaySpecifier
|
|
|
|
DECLARE_INTERFACE_(IDsDisplaySpecifier, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
|
|
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
|
|
STDMETHOD_(ULONG,Release)(THIS) PURE;
|
|
|
|
// *** IDsDisplaySpecifier methods ***
|
|
STDMETHOD(SetServer)(THIS_ LPCWSTR pszServer, LPCWSTR pszUserName, LPCWSTR pszPassword, DWORD dwFlags) PURE;
|
|
STDMETHOD(SetLanguageID)(THIS_ LANGID langid) PURE;
|
|
STDMETHOD(GetDisplaySpecifier)(THIS_ LPCWSTR pszObjectClass, REFIID riid, void **ppv) PURE;
|
|
STDMETHOD(GetIconLocation)(THIS_ LPCWSTR pszObjectClass, DWORD dwFlags, LPWSTR pszBuffer, INT cchBuffer, INT *presid) PURE;
|
|
STDMETHOD_(HICON, GetIcon)(THIS_ LPCWSTR pszObjectClass, DWORD dwFlags, INT cxIcon, INT cyIcon) PURE;
|
|
STDMETHOD(GetFriendlyClassName)(THIS_ LPCWSTR pszObjectClass, LPWSTR pszBuffer, INT cchBuffer) PURE;
|
|
STDMETHOD(GetFriendlyAttributeName)(THIS_ LPCWSTR pszObjectClass, LPCWSTR pszAttributeName, LPWSTR pszBuffer, UINT cchBuffer) PURE;
|
|
STDMETHOD_(BOOL, IsClassContainer)(THIS_ LPCWSTR pszObjectClass, LPCWSTR pszADsPath, DWORD dwFlags) PURE;
|
|
STDMETHOD(GetClassCreationInfo)(THIS_ LPCWSTR pszObjectClass, LPDSCLASSCREATIONINFO* ppdscci) PURE;
|
|
STDMETHOD(EnumClassAttributes)(THIS_ LPCWSTR pszObjectClass, LPDSENUMATTRIBUTES pcbEnum, LPARAM lParam) PURE;
|
|
STDMETHOD_(ADSTYPE, GetAttributeADsType)(THIS_ LPCWSTR pszAttributeName) PURE;
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------//
|
|
//
|
|
// DsBrowseForContainer
|
|
// --------------------
|
|
// Provides a container browser similar to the SHBrowseForFolder, except
|
|
// targetting the DS.
|
|
//
|
|
// In:
|
|
// pInfo -> DSBROWSEINFO structure
|
|
//
|
|
// Out:
|
|
// == IDOK/IDCANCEL depending on buttons, -1 if error
|
|
//
|
|
//---------------------------------------------------------------------------//
|
|
|
|
typedef struct
|
|
{
|
|
DWORD cbStruct; // size of structure in bytes
|
|
HWND hwndOwner; // dialog owner
|
|
LPCWSTR pszCaption; // dialog caption text (can be NULL)
|
|
LPCWSTR pszTitle; // displayed above the tree view control (can be NULL)
|
|
LPCWSTR pszRoot; // ADS path to root (NULL == root of DS namespace)
|
|
LPWSTR pszPath; // [in/out] initial selection & returned path (required)
|
|
ULONG cchPath; // size of pszPath buffer in characters
|
|
DWORD dwFlags;
|
|
BFFCALLBACK pfnCallback; // callback function (see SHBrowseForFolder)
|
|
LPARAM lParam; // passed to pfnCallback as lpUserData
|
|
DWORD dwReturnFormat; // ADS_FORMAT_* (default is ADS_FORMAT_X500_NO_SERVER)
|
|
LPCWSTR pUserName; // Username and Password to authenticate against DS with
|
|
LPCWSTR pPassword;
|
|
LPWSTR pszObjectClass; // UNICODE string for the object class
|
|
ULONG cchObjectClass;
|
|
} DSBROWSEINFOW, *PDSBROWSEINFOW;
|
|
|
|
typedef struct
|
|
{
|
|
DWORD cbStruct;
|
|
HWND hwndOwner;
|
|
LPCSTR pszCaption;
|
|
LPCSTR pszTitle;
|
|
LPCWSTR pszRoot; // ADS paths are always UNICODE
|
|
LPWSTR pszPath; // ditto
|
|
ULONG cchPath;
|
|
DWORD dwFlags;
|
|
BFFCALLBACK pfnCallback;
|
|
LPARAM lParam;
|
|
DWORD dwReturnFormat;
|
|
LPCWSTR pUserName; // Username and Password to authenticate against DS with
|
|
LPCWSTR pPassword;
|
|
LPWSTR pszObjectClass; // object class of the selected object
|
|
ULONG cchObjectClass;
|
|
} DSBROWSEINFOA, *PDSBROWSEINFOA;
|
|
|
|
#ifdef UNICODE
|
|
#define DSBROWSEINFO DSBROWSEINFOW
|
|
#define PDSBROWSEINFO PDSBROWSEINFOW
|
|
#else
|
|
#define DSBROWSEINFO DSBROWSEINFOA
|
|
#define PDSBROWSEINFO PDSBROWSEINFOA
|
|
#endif
|
|
|
|
// DSBROWSEINFO flags
|
|
#define DSBI_NOBUTTONS 0x00000001 // NOT TVS_HASBUTTONS
|
|
#define DSBI_NOLINES 0x00000002 // NOT TVS_HASLINES
|
|
#define DSBI_NOLINESATROOT 0x00000004 // NOT TVS_LINESATROOT
|
|
#define DSBI_CHECKBOXES 0x00000100 // TVS_CHECKBOXES
|
|
#define DSBI_NOROOT 0x00010000 // don't include pszRoot in tree (its children become top level nodes)
|
|
#define DSBI_INCLUDEHIDDEN 0x00020000 // display hidden objects
|
|
#define DSBI_EXPANDONOPEN 0x00040000 // expand to the path specified in pszPath when opening the dialog
|
|
#define DSBI_ENTIREDIRECTORY 0x00090000 // browse the entire directory (defaults to having DSBI_NOROOT set)
|
|
#define DSBI_RETURN_FORMAT 0x00100000 // dwReturnFormat field is valid
|
|
#define DSBI_HASCREDENTIALS 0x00200000 // pUserName & pPassword are valid
|
|
#define DSBI_IGNORETREATASLEAF 0x00400000 // ignore the treat as leaf flag when calling IsClassContainer
|
|
#define DSBI_SIMPLEAUTHENTICATE 0x00800000 // don't use secure authentication to DS
|
|
#define DSBI_RETURNOBJECTCLASS 0x01000000 // return object class of selected object
|
|
|
|
#define DSB_MAX_DISPLAYNAME_CHARS 64
|
|
|
|
typedef struct
|
|
{
|
|
DWORD cbStruct;
|
|
LPCWSTR pszADsPath; // ADS paths are always Unicode
|
|
LPCWSTR pszClass; // ADS properties are always Unicode
|
|
DWORD dwMask;
|
|
DWORD dwState;
|
|
DWORD dwStateMask;
|
|
WCHAR szDisplayName[DSB_MAX_DISPLAYNAME_CHARS];
|
|
WCHAR szIconLocation[MAX_PATH];
|
|
INT iIconResID;
|
|
} DSBITEMW, *PDSBITEMW;
|
|
|
|
typedef struct
|
|
{
|
|
DWORD cbStruct;
|
|
LPCWSTR pszADsPath; // ADS paths are always Unicode
|
|
LPCWSTR pszClass; // ADS properties are always Unicode
|
|
DWORD dwMask;
|
|
DWORD dwState;
|
|
DWORD dwStateMask;
|
|
CHAR szDisplayName[DSB_MAX_DISPLAYNAME_CHARS];
|
|
CHAR szIconLocation[MAX_PATH];
|
|
INT iIconResID;
|
|
} DSBITEMA, *PDSBITEMA;
|
|
|
|
#ifdef UNICODE
|
|
#define DSBITEM DSBITEMW
|
|
#define PDSBITEM PDSBITEMW
|
|
#else
|
|
#define DSBITEM DSBITEMA
|
|
#define PDSBITEM PDSBITEMA
|
|
#endif
|
|
|
|
// DSBITEM mask flags
|
|
#define DSBF_STATE 0x00000001
|
|
#define DSBF_ICONLOCATION 0x00000002
|
|
#define DSBF_DISPLAYNAME 0x00000004
|
|
|
|
// DSBITEM state flags
|
|
#define DSBS_CHECKED 0x00000001
|
|
#define DSBS_HIDDEN 0x00000002
|
|
#define DSBS_ROOT 0x00000004
|
|
|
|
//
|
|
// this message is sent to the callback to see if it wants to insert or modify
|
|
// the item that is about to be inserted into the view.
|
|
//
|
|
|
|
#define DSBM_QUERYINSERTW 100 // lParam = PDSBITEMW (state, icon & name may be modified). Return TRUE if handled.
|
|
#define DSBM_QUERYINSERTA 101 // lParam = PDSBITEMA (state, icon & name may be modified). Return TRUE if handled.
|
|
|
|
#ifdef UNICODE
|
|
#define DSBM_QUERYINSERT DSBM_QUERYINSERTW
|
|
#else
|
|
#define DSBM_QUERYINSERT DSBM_QUERYINSERTA
|
|
#endif
|
|
|
|
//
|
|
// Called before we change the state of the icon (on tree collapse/expand)
|
|
//
|
|
|
|
#define DSBM_CHANGEIMAGESTATE 102 // lParam = adspath. Return TRUE/FALSE top allow/disallow
|
|
|
|
//
|
|
// The dialog receives a WM_HELP
|
|
//
|
|
|
|
#define DSBM_HELP 103 // lParam == LPHELPINFO structure
|
|
|
|
//
|
|
// The dialog receives a WM_CONTEXTMENU, DSBID_xxx are the control ID's for this
|
|
// dialog so that you can display suitable help.
|
|
//
|
|
|
|
#define DSBM_CONTEXTMENU 104 // lParam == window handle to retrieve help for
|
|
|
|
;begin_internal
|
|
//
|
|
// The Exchange group use the DsBrowseForContainer API to brows the Exchange
|
|
// store, and other LDAP servers. To support them we issue this callback
|
|
// which will request the filter they want to use and any other information.
|
|
//
|
|
|
|
typedef struct
|
|
{
|
|
DWORD dwFlags;
|
|
LPWSTR pszFilter; // filter string to be used when searching the DS (== NULL for default)
|
|
INT cchFilter;
|
|
LPWSTR pszNameAttribute; // attribute to request to get the display name of objects in the DS (== NULL for default).
|
|
INT cchNameAttribute;
|
|
} DSBROWSEDATA, * PDSBROWSEDATA;
|
|
|
|
#define DSBM_GETBROWSEDATA 105 // lParam -> DSBROWSEDATA structure. Return TRUE if handled
|
|
;end_internal
|
|
|
|
//
|
|
// These are the control IDs for the controls in the dialog. The callback can use
|
|
// these to modify the contents of the dialog as required.
|
|
//
|
|
|
|
#define DSBID_BANNER 256
|
|
#define DSBID_CONTAINERLIST 257
|
|
|
|
//
|
|
// API exported for browsing for containers.
|
|
//
|
|
|
|
STDAPI_(int) DsBrowseForContainerW(PDSBROWSEINFOW pInfo);
|
|
STDAPI_(int) DsBrowseForContainerA(PDSBROWSEINFOA pInfo);
|
|
|
|
#ifdef UNICODE
|
|
#define DsBrowseForContainer DsBrowseForContainerW
|
|
#else
|
|
#define DsBrowseForContainer DsBrowseForContainerA
|
|
#endif
|
|
|
|
|
|
// NOTE: these are here to keep old clients building - remove soon
|
|
|
|
STDAPI_(HICON) DsGetIcon(DWORD dwFlags, LPWSTR pszObjectClass, INT cxImage, INT cyImage);
|
|
STDAPI DsGetFriendlyClassName(LPWSTR pszObjectClass, LPWSTR pszBuffer, UINT cchBuffer);
|
|
|
|
;begin_internal
|
|
|
|
//---------------------------------------------------------------------------//
|
|
//
|
|
// IDsFolderProperties
|
|
// ===================
|
|
// This is a private interface used to override the "Properties" verb
|
|
// displayed in the DS client UI.
|
|
//
|
|
// Below the {CLISD_NameSpace}\Classes\<class name>\PropertiesHandler is
|
|
// defined a GUID we will create an instance of that interface and
|
|
// display the relevant UI.
|
|
//
|
|
// dsfolder also supports this interface to allow the query UI to invoke
|
|
// properties for a given selection.
|
|
//
|
|
//---------------------------------------------------------------------------//
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IDsFolderProperties
|
|
|
|
DECLARE_INTERFACE_(IDsFolderProperties, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
// IDsFolder methods
|
|
STDMETHOD(ShowProperties)(THIS_ HWND hwndParent, IDataObject* pDataObject) PURE;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------//
|
|
|
|
|
|
//---------------------------------------------------------------------------//
|
|
// Private helper API's exported by 'dsuiext.dll'.
|
|
//---------------------------------------------------------------------------//
|
|
|
|
//
|
|
// To communicate information to the IShellFolder::ParseDisplayName method
|
|
// of the Directory namespace we pass a IBindCtx with a property bag
|
|
// associated with it.
|
|
//
|
|
// The property bag is used to pass in extra information about the
|
|
// objects we have selected.
|
|
//
|
|
|
|
#define DS_PDN_PROPERTYBAG L"DsNamespaceShellFolderParsePropertyBag"
|
|
|
|
//
|
|
// These are the properties passed to the objcts
|
|
//
|
|
|
|
#define DS_PDN_OBJECTLCASS L"objectClass"
|
|
|
|
|
|
//---------------------------------------------------------------------------//
|
|
// String DPA helpers, adding strings to a DPA calling LocalAllocString and
|
|
// then the relevant DPA functions.
|
|
//---------------------------------------------------------------------------//
|
|
|
|
STDAPI StringDPA_InsertStringA(HDPA hdpa, INT i, LPCSTR pszString);
|
|
STDAPI StringDPA_InsertStringW(HDPA hdpa, INT i, LPCWSTR pszString);
|
|
|
|
STDAPI StringDPA_AppendStringA(HDPA hdpa, LPCSTR pszString, PUINT_PTR presult);
|
|
STDAPI StringDPA_AppendStringW(HDPA hdpa, LPCWSTR pszString, PUINT_PTR presult);
|
|
|
|
STDAPI_(VOID) StringDPA_DeleteString(HDPA hdpa, INT index);
|
|
STDAPI_(VOID) StringDPA_Destroy(HDPA* pHDPA);
|
|
|
|
#define StringDPA_GetStringA(hdpa, i) ((LPSTR)DPA_GetPtr(hdpa, i))
|
|
#define StringDPA_GetStringW(hdpa, i) ((LPWSTR)DPA_GetPtr(hdpa, i))
|
|
|
|
#ifndef UNICODE
|
|
#define StringDPA_InsertString StringDPA_InsertStringA
|
|
#define StringDPA_AppendString StringDPA_AppendStringA
|
|
#define StringDPA_GetString StringDPA_GetStringA
|
|
#else
|
|
#define StringDPA_InsertString StringDPA_InsertStringW
|
|
#define StringDPA_AppendString StringDPA_AppendStringW
|
|
#define StringDPA_GetString StringDPA_GetStringW
|
|
#endif
|
|
|
|
|
|
//---------------------------------------------------------------------------//
|
|
// Handle strings via LocalAlloc
|
|
//---------------------------------------------------------------------------//
|
|
|
|
STDAPI LocalAllocStringA(LPSTR* ppResult, LPCSTR pszString);
|
|
STDAPI LocalAllocStringLenA(LPSTR* ppResult, UINT cLen);
|
|
STDAPI_(VOID) LocalFreeStringA(LPSTR* ppString);
|
|
STDAPI LocalQueryStringA(LPSTR* ppResult, HKEY hk, LPCTSTR lpSubKey);
|
|
|
|
STDAPI LocalAllocStringW(LPWSTR* ppResult, LPCWSTR pString);
|
|
STDAPI LocalAllocStringLenW(LPWSTR* ppResult, UINT cLen);
|
|
STDAPI_(VOID) LocalFreeStringW(LPWSTR* ppString);
|
|
STDAPI LocalQueryStringW(LPWSTR* ppResult, HKEY hk, LPCTSTR lpSubKey);
|
|
|
|
STDAPI LocalAllocStringA2W(LPWSTR* ppResult, LPCSTR pszString);
|
|
STDAPI LocalAllocStringW2A(LPSTR* ppResult, LPCWSTR pszString);
|
|
|
|
#ifndef UNICODE
|
|
#define LocalAllocString LocalAllocStringA
|
|
#define LocalAllocStringLen LocalAllocStringLenA
|
|
#define LocalFreeString LocalFreeStringA
|
|
#define LocalQueryString LocalQueryStringA
|
|
#define LocalAllocStringA2T LocalAllocString
|
|
#define LocalAllocStringW2T LocalAllocStringW2A
|
|
#else
|
|
#define LocalAllocString LocalAllocStringW
|
|
#define LocalAllocStringLen LocalAllocStringLenW
|
|
#define LocalFreeString LocalFreeStringW
|
|
#define LocalQueryString LocalQueryStringW
|
|
#define LocalAllocStringA2T LocalAllocStringA2W
|
|
#define LocalAllocStringW2T LocalAllocString
|
|
#endif
|
|
|
|
STDAPI_(VOID) PutStringElementA(LPSTR pszBuffer, UINT* pLen, LPCSTR pszElement);
|
|
STDAPI_(VOID) PutStringElementW(LPWSTR pszszBuffer, UINT* pLen, LPCWSTR pszElement);
|
|
STDAPI GetStringElementA(LPSTR pszString, INT index, LPSTR pszBuffer, INT cchBuffer);
|
|
STDAPI GetStringElementW(LPWSTR pszString, INT index, LPWSTR pszBuffer, INT cchBuffer);
|
|
|
|
#ifndef UNICODE
|
|
#define PutStringElement PutStringElementA
|
|
#define GetStringElement GetStringElementA
|
|
#else
|
|
#define PutStringElement PutStringElementW
|
|
#define GetStringElement GetStringElementW
|
|
#endif
|
|
|
|
|
|
//---------------------------------------------------------------------------//
|
|
// Utility stuff common to dsfolder, dsquery etc
|
|
//---------------------------------------------------------------------------//
|
|
|
|
STDAPI_(INT) FormatMsgBox(HWND hWnd, HINSTANCE hInstance, UINT uidTitle, UINT uidPrompt, UINT uType, ...);
|
|
STDAPI FormatMsgResource(LPTSTR* ppString, HINSTANCE hInstance, UINT uID, ...);
|
|
STDAPI FormatDirectoryName(LPTSTR* ppString, HINSTANCE hInstance, UINT uID);
|
|
|
|
STDAPI StringFromSearchColumn(PADS_SEARCH_COLUMN pColumn, LPWSTR* ppBuffer);
|
|
STDAPI ObjectClassFromSearchColumn(PADS_SEARCH_COLUMN pColumn, LPWSTR* ppBuffer);
|
|
|
|
typedef HRESULT (CALLBACK * LPGETARRAYCONTENTCB)(DWORD dwIndex, BSTR bstrValue, LPVOID pData);
|
|
STDAPI GetArrayContents(LPVARIANT pVariant, LPGETARRAYCONTENTCB pCB, LPVOID pData);
|
|
|
|
STDAPI GetDisplayNameFromADsPath(LPCWSTR pszszPath, LPWSTR pszszBuffer, INT cchBuffer, IADsPathname *padp, BOOL fPrefix);
|
|
|
|
STDAPI_(DWORD) CheckDsPolicy(LPCTSTR pszSubKey, LPCTSTR pszValue);
|
|
STDAPI_(BOOL) ShowDirectoryUI(VOID);
|
|
|
|
;end_internal
|
|
|
|
;begin_both
|
|
#endif // GUID_DEFS_ONLY
|
|
#endif
|
|
;end_both
|