|
|
/*
* 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__ */
|