From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- public/sdk/inc/linkinfo.h | 235 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 public/sdk/inc/linkinfo.h (limited to 'public/sdk/inc/linkinfo.h') diff --git a/public/sdk/inc/linkinfo.h b/public/sdk/inc/linkinfo.h new file mode 100644 index 000000000..aa8ae35aa --- /dev/null +++ b/public/sdk/inc/linkinfo.h @@ -0,0 +1,235 @@ +/* + * 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__ */ -- cgit v1.2.3