/*
* linkinfo.h - LinkInfo ADT module description.
*/
#ifndef __LINKINFO_H__
#define __LINKINFO_H__
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++. */
#endif /* __cplusplus */
/* Constants
************/
/* Define API decoration for direct export or import of DLL functions. */
#ifdef _LINKINFO_
#define LINKINFOAPI
#else
#define LINKINFOAPI DECLSPEC_IMPORT
#endif
/* Types
********/
/* LinkInfo structure */
typedef struct _linkinfo
{
/* size of LinkInfo structure, including ucbSize field */
UINT ucbSize;
}
LINKINFO;
typedef LINKINFO *PLINKINFO;
typedef const LINKINFO CLINKINFO;
typedef const LINKINFO *PCLINKINFO;
/* input flags to ResolveLinkInfo() */
typedef enum _resolvelinkinfoinflags
{
/* Set up connection to referent. */
RLI_IFL_CONNECT = 0x0001,
/*
* Set up temporary connection to referent. May only be set if
* RLI_IFL_CONNECT is also set.
*/
RLI_IFL_TEMPORARY = 0x0002,
/* Allow interaction with user. */
RLI_IFL_ALLOW_UI = 0x0004,
/* Resolve to redirected local device path. */
RLI_IFL_REDIRECT = 0x0008,
/* Update source LinkInfo structure if necessary. */
RLI_IFL_UPDATE = 0x0010,
/* Search matching local devices for missing volume. */
RLI_IFL_LOCAL_SEARCH = 0x0020,
/* flag combinations */
ALL_RLI_IFLAGS = (RLI_IFL_CONNECT |
RLI_IFL_TEMPORARY |
RLI_IFL_ALLOW_UI |
RLI_IFL_REDIRECT |
RLI_IFL_UPDATE |
RLI_IFL_LOCAL_SEARCH)
}
RESOLVELINKINFOINFLAGS;
/* output flags from ResolveLinkInfo() */
typedef enum _resolvelinkinfooutflags
{
/*
* Only set if RLI_IFL_UPDATE was set in dwInFlags. The source LinkInfo
* structure needs updating, and *ppliUpdated points to an updated LinkInfo
* structure.
*/
RLI_OFL_UPDATED = 0x0001,
/*
* Only set if RLI_IFL_CONNECT was set in dwInFlags. A connection to a net
* resource was established to resolve the LinkInfo. DisconnectLinkInfo()
* should be called to shut down the connection when the caller is finished
* with the remote referent. DisconnectLinkInfo() need not be called if
* RLI_IFL_TEMPORARY was also set in dwInFlags.
*/
RLI_OFL_DISCONNECT = 0x0002,
/* flag combinations */
ALL_RLI_OFLAGS = (RLI_OFL_UPDATED |
RLI_OFL_DISCONNECT)
}
RESOLVELINKINFOOUTFLAGS;
/* LinkInfo data types used by GetLinkInfo() */
typedef enum _linkinfodatatype
{
/* PCDWORD - pointer to volume's serial number */
LIDT_VOLUME_SERIAL_NUMBER,
/* PCUINT - pointer to volume's host drive type */
LIDT_DRIVE_TYPE,
/* PCSTR - pointer to volume's label */
LIDT_VOLUME_LABEL,
/* PCSTR - pointer to local base path */
LIDT_LOCAL_BASE_PATH,
/* PCSTR - pointer to parent network resource's name */
LIDT_NET_RESOURCE,
/* PCSTR - pointer to last device redirected to parent network resource */
LIDT_REDIRECTED_DEVICE,
/* PCSTR - pointer to common path suffix */
LIDT_COMMON_PATH_SUFFIX,
/* PCDWORD - pointer to network type */
LIDT_NET_TYPE,
/* PCWSTR - pointer to possible unicode volume label */
LIDT_VOLUME_LABELW,
/* PCSTR - pointer to possible unicode parent network resource's name */
LIDT_NET_RESOURCEW,
/* PCSTR - pointer to possible unicode last device redirected to parent network resource */
LIDT_REDIRECTED_DEVICEW,
/* PCWSTR - pointer to possible unicode local base path */
LIDT_LOCAL_BASE_PATHW,
/* PCWSTR - pointer to possible unicode common path suffix */
LIDT_COMMON_PATH_SUFFIXW
}
LINKINFODATATYPE;
/* output flags from GetCanonicalPathInfo() */
typedef enum _getcanonicalpathinfooutflags
{
/* The path is on a remote volume. */
GCPI_OFL_REMOTE = 0x0001,
/* flag combinations */
ALL_GCPI_OFLAGS = GCPI_OFL_REMOTE
}
GETCANONICALPATHINFOOUTFLAGS;
/* Prototypes
*************/
/* LinkInfo APIs */
LINKINFOAPI BOOL WINAPI CreateLinkInfoA(LPCSTR, PLINKINFO *);
LINKINFOAPI BOOL WINAPI CreateLinkInfoW(LPCWSTR, PLINKINFO *);
#ifdef UNICODE
#define CreateLinkInfo CreateLinkInfoW
#else
#define CreateLinkInfo CreateLinkInfoA
#endif
LINKINFOAPI void WINAPI DestroyLinkInfo(PLINKINFO);
LINKINFOAPI int WINAPI CompareLinkInfoReferents(PCLINKINFO, PCLINKINFO);
LINKINFOAPI int WINAPI CompareLinkInfoVolumes(PCLINKINFO, PCLINKINFO);
LINKINFOAPI BOOL WINAPI ResolveLinkInfoA(PCLINKINFO, LPSTR, DWORD, HWND, PDWORD, PLINKINFO *);
LINKINFOAPI BOOL WINAPI ResolveLinkInfoW(PCLINKINFO, LPWSTR, DWORD, HWND, PDWORD, PLINKINFO *);
#ifdef UNICODE
#define ResolveLinkInfo ResolveLinkInfoW
#else
#define ResolveLinkInfo ResolveLinkInfoA
#endif
LINKINFOAPI BOOL WINAPI DisconnectLinkInfo(PCLINKINFO);
LINKINFOAPI BOOL WINAPI GetLinkInfoData(PCLINKINFO, LINKINFODATATYPE, const VOID **);
LINKINFOAPI BOOL WINAPI IsValidLinkInfo(PCLINKINFO);
/* canonical path APIs */
LINKINFOAPI BOOL WINAPI GetCanonicalPathInfoA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPSTR *);
LINKINFOAPI BOOL WINAPI GetCanonicalPathInfoW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPWSTR *);
#ifdef UNICODE
#define GetCanonicalPathInfo GetCanonicalPathInfoW
#else
#define GetCanonicalPathInfo GetCanonicalPathInfoA
#endif
#ifdef __cplusplus
} /* End of extern "C" {. */
#endif /* __cplusplus */
#endif /* ! __LINKINFO_H__ */