240 lines
5.5 KiB
C
240 lines
5.5 KiB
C
/*
|
|
* Copyright (c) 1990-1999 Microsoft Corporation
|
|
* linkinfo.h - LinkInfo ADT module description.
|
|
*/
|
|
|
|
|
|
#ifndef __LINKINFO_H__
|
|
#define __LINKINFO_H__
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
#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__ */
|