text: #ifndef _INC_CSCAPI
  #define _INC_CSCAPI
  
  #ifdef  __cplusplus
  extern "C" {
  #endif
  // flags returned in the status field for files and folders.
  // NB!!!! these bit definitions match exactly with those in shdcom.h
  
  
  #define  FLAG_CSC_COPY_STATUS_DATA_LOCALLY_MODIFIED     0x0001
  #define  FLAG_CSC_COPY_STATUS_ATTRIB_LOCALLY_MODIFIED   0x0002
  #define  FLAG_CSC_COPY_STATUS_TIME_LOCALLY_MODIFIED     0x0004
  #define  FLAG_CSC_COPY_STATUS_STALE                     0x0008
  #define  FLAG_CSC_COPY_STATUS_LOCALLY_DELETED           0x0010
  #define  FLAG_CSC_COPY_STATUS_SPARSE                    0x0020
  
  #define  FLAG_CSC_COPY_STATUS_ORPHAN                    0x0100
  #define  FLAG_CSC_COPY_STATUS_SUSPECT                   0x0200
  #define  FLAG_CSC_COPY_STATUS_LOCALLY_CREATED           0x0400
  
  #define  FLAG_CSC_COPY_STATUS_IS_FILE                   0x80000000
  #define  FLAG_CSC_COPY_STATUS_FILE_IN_USE               0x40000000
  
  // Flags returned in the status field for shares
  
  #define FLAG_CSC_SHARE_STATUS_MODIFIED_OFFLINE          0x0001
  #define FLAG_CSC_SHARE_STATUS_CONNECTED                 0x0800
  #define FLAG_CSC_SHARE_STATUS_FILES_OPEN                0x0400
  #define FLAG_CSC_SHARE_STATUS_FINDS_IN_PROGRESS         0x0200
  #define FLAG_CSC_SHARE_STATUS_DISCONNECTED_OP           0x8000
  #define FLAG_CSC_SHARE_MERGING                          0x4000
  
  #define FLAG_CSC_SHARE_STATUS_MANUAL_REINT              0x0000  // No automatic file by file reint  (Persistent)
  #define FLAG_CSC_SHARE_STATUS_AUTO_REINT                0x0040  // File by file reint is OK         (Persistent)
  #define FLAG_CSC_SHARE_STATUS_VDO                       0x0080  // no need to flow opens            (Persistent)
  #define FLAG_CSC_SHARE_STATUS_NO_CACHING                0x00c0  // client should not cache this share (Persistent)
  
  #define FLAG_CSC_SHARE_STATUS_CACHING_MASK              0x00c0  // type of caching
  
  #define FLAG_CSC_ACCESS_MASK                            0x003F0000
  #define FLAG_CSC_USER_ACCESS_MASK                       0x00030000
  #define FLAG_CSC_GUEST_ACCESS_MASK                      0x000C0000
  #define FLAG_CSC_OTHER_ACCESS_MASK                      0x00300000
  
  #define FLAG_CSC_USER_ACCESS_SHIFT_COUNT                16
  #define FLAG_CSC_GUEST_ACCESS_SHIFT_COUNT               18
  #define FLAG_CSC_OTHER_ACCESS_SHIFT_COUNT               20
  
  #define FLAG_CSC_READ_ACCESS                            0x00000001
  #define FLAG_CSC_WRITE_ACCESS                           0x00000002
  
  // Hint flags Definitions:
  #define FLAG_CSC_HINT_PIN_USER                  0x01    // When this bit is set, the item is being pinned for the user
                                                          // Note that there is only one pincount allotted for user.
  #define FLAG_CSC_HINT_PIN_INHERIT_USER          0x02    // When this flag is set on a folder, all  descendents subsequently
                                                          // Created in this folder get pinned for the user
  #define FLAG_CSC_HINT_PIN_INHERIT_SYSTEM        0x04    // When this flag is set on a folder, all descendents
                                                          // Subsequently  created in this folder get pinned for the
                                                          // system
  #define FLAG_CSC_HINT_CONSERVE_BANDWIDTH        0x08    // When this flag is set on a folder,  for executables and
                                                          // Other related file, CSC tries to conserver bandwidth
                                                          // By not flowing opens when these files are fully
  
  
  #define FLAG_CSC_HINT_PIN_SYSTEM                0x10    // This flag indicates it is pinned for the system
  
  #define FLAG_CSC_HINT_COMMAND_MASK                      0xf0000000
  #define FLAG_CSC_HINT_COMMAND_ALTER_PIN_COUNT           0x80000000  // Increments/decrements pin count
  
  
  // Database status bits
  
  #define FLAG_DATABASESTATUS_DIRTY                   0x00000001
  
  #define FLAG_DATABASESTATUS_ENCRYPTION_MASK         0x00000006
  
  #define FLAG_DATABASESTATUS_UNENCRYPTED             0x00000000 // new fileinodes will NOT be encrypted
  #define FLAG_DATABASESTATUS_PARTIALLY_UNENCRYPTED   0x00000004
  
  #define FLAG_DATABASESTATUS_ENCRYPTED               0x00000002 // new fileinodes will be encrypted
  #define FLAG_DATABASESTATUS_PARTIALLY_ENCRYPTED     0x00000006
  
  
  // definitions for callback reason
  
  #define CSCPROC_REASON_BEGIN        1
  #define CSCPROC_REASON_MORE_DATA    2
  #define CSCPROC_REASON_END          3
  
  
  // Definitions for callback return values:
  
  #define CSCPROC_RETURN_CONTINUE         1
  #define CSCPROC_RETURN_SKIP             2
  #define CSCPROC_RETURN_ABORT            3
  #define CSCPROC_RETURN_FORCE_INWARD     4        // applies only while merging
  #define CSCPROC_RETURN_FORCE_OUTWARD    5    // applies only while merging
  #define CSCPROC_RETURN_RETRY            6
  
  
  
  typedef DWORD   (WINAPI *LPCSCPROCW)(
                  LPCWSTR             lpszName,
                  DWORD               dwStatus,
                  DWORD               dwHintFlags,
                  DWORD               dwPinCount,
                  WIN32_FIND_DATAW    *lpFind32,
                  DWORD               dwReason,
                  DWORD               dwParam1,
                  DWORD               dwParam2,
                  DWORD_PTR           dwContext
                  );
  
  typedef DWORD   (WINAPI *LPCSCPROCA)(
                  LPCSTR              lpszName,
                  DWORD               dwStatus,
                  DWORD               dwHintFlags,
                  DWORD               dwPinCount,
                  WIN32_FIND_DATAA    *lpFind32,
                  DWORD               dwReason,
                  DWORD               dwParam1,
                  DWORD               dwParam2,
                  DWORD_PTR           dwContext
                  );
  
  
  
  BOOL
  WINAPI
  CSCIsCSCEnabled(
      VOID
  );
  
  
  BOOL
  WINAPI
  CSCFindClose(
      IN  HANDLE    hFind
  );
  
  BOOL
  WINAPI
  CSCPinFileA(
      IN  LPCSTR      lpszFileName,
      IN  DWORD       dwHintFlags,
      OUT LPDWORD     lpdwStatus,
      OUT LPDWORD     lpdwPinCount,
      OUT LPDWORD     lpdwHintFlags
      );
  
  BOOL
  WINAPI
  CSCUnpinFileA(
      IN  LPCSTR  lpszFileName,
      IN  DWORD   dwHintFlags,
      OUT LPDWORD lpdwStatus,
      OUT LPDWORD lpdwPinCount,
      OUT LPDWORD lpdwHintFlags
      );
  
  BOOL
  WINAPI
  CSCQueryFileStatusA(
      IN  LPCSTR  lpszFileName,
      OUT LPDWORD lpdwStatus,
      OUT LPDWORD lpdwPinCount,
      OUT LPDWORD lpdwHintFlags
  );
  
  BOOL
  WINAPI
  CSCQueryFileStatusExA(
      IN  LPCSTR  lpszFileName,
      OUT LPDWORD lpdwStatus,
      OUT LPDWORD lpdwPinCount,
      OUT LPDWORD lpdwHintFlags,
      OUT LPDWORD lpdwUserPerms,
      OUT LPDWORD lpdwOtherPerms
  );
  
  BOOL
  WINAPI
  CSCQueryShareStatusA(
      IN  LPCSTR  lpszFileName,
      OUT LPDWORD lpdwStatus,
      OUT LPDWORD lpdwPinCount,
      OUT LPDWORD lpdwHintFlags,
      OUT LPDWORD lpdwUserPerms,
      OUT LPDWORD lpdwOtherPerms
  );
  
  HANDLE
  WINAPI
  CSCFindFirstFileA(
      IN  LPCSTR          lpszFileName,    // if NULL, returns the shares cached
      OUT WIN32_FIND_DATA *lpFind32,
      OUT LPDWORD         lpdwStatus,        // returns FLAG_CSC_SHARE_STATUS_XXX for shares
                                              // FLAG_CSC_STATUS_XXX for the rest
      OUT LPDWORD         lpdwPinCount,
      OUT LPDWORD         lpdwHintFlags,
      OUT FILETIME        *lpOrgFileTime
  );
  
  BOOL
  WINAPI
  CSCFindNextFileA(
      IN  HANDLE          hFind,
      OUT WIN32_FIND_DATA *lpFind32,
      OUT LPDWORD         lpdwStatus,
      OUT LPDWORD         lpdwPinCount,
      OUT LPDWORD         lpdwHintFlags,
      OUT FILETIME        *lpOrgFileTime
  );
  
  BOOL
  WINAPI
  CSCDeleteA(
      IN  LPCSTR    lpszFileName
  );
  
  
  BOOL
  WINAPI
  CSCFillSparseFilesA(
      IN    LPCSTR        lpszShareName,
      IN    BOOL          fFullSync,
      IN    LPCSCPROCA    lpprocFillProgress,
      IN    DWORD_PTR     dwContext
  );
  
  
  
  BOOL
  WINAPI
  CSCMergeShareA(
      IN  LPCSTR      lpszShareName,
      IN  LPCSCPROCA  lpfnMergeProgress,
      IN  DWORD_PTR   dwContext
  );
  
  
  BOOL
  WINAPI
  CSCCopyReplicaA(
      IN  LPCSTR  lpszFullPath,
      OUT LPSTR   *lplpszLocalName
  );
  
  
  BOOL
  WINAPI
  CSCEnumForStatsA(
      IN  LPCSTR      lpszShareName,
      IN  LPCSCPROCA  lpfnEnumProgress,
      IN  DWORD_PTR   dwContext
  );
  
  BOOL
  WINAPI
  CSCEnumForStatsExA(
      IN  LPCSTR      lpszShareName,
      IN  LPCSCPROCA  lpfnEnumProgress,
      IN  DWORD_PTR   dwContext
  );
  
  BOOL
  WINAPI
  CSCPinFileW(
      LPCWSTR     lpszFileName,
      DWORD       dwHintFlags,
      LPDWORD     lpdwStatus,
      LPDWORD     lpdwPinCount,
      LPDWORD     lpdwHintFlags
  );
  
  BOOL
  WINAPI
  CSCUnpinFileW(
      LPCWSTR     lpszFileName,
      DWORD       dwHintFlags,
      LPDWORD     lpdwStatus,
      LPDWORD     lpdwPinCount,
      LPDWORD     lpdwHintFlags
      );
  
  BOOL
  WINAPI
  CSCQueryFileStatusW(
      LPCWSTR lpszFileName,
      LPDWORD lpdwStatus,
      LPDWORD lpdwPinCount,
      LPDWORD lpdwHintFlags
  );
  
  BOOL
  WINAPI
  CSCQueryFileStatusExW(
      LPCWSTR lpszFileName,
      LPDWORD lpdwStatus,
      LPDWORD lpdwPinCount,
      LPDWORD lpdwHintFlags,
      LPDWORD lpdwUserPerms,
      LPDWORD lpdwOtherPerms
  );
  
  BOOL
  WINAPI
  CSCQueryShareStatusW(
      LPCWSTR lpszFileName,
      LPDWORD lpdwStatus,
      LPDWORD lpdwPinCount,
      LPDWORD lpdwHintFlags,
      LPDWORD lpdwUserPerms,
      LPDWORD lpdwOtherPerms
  );
  
  HANDLE
  WINAPI
  CSCFindFirstFileW(
      LPCWSTR             lpszFileName,
      WIN32_FIND_DATAW    *lpFind32,
      LPDWORD             lpdwStatus,
      LPDWORD             lpdwPinCount,
      LPDWORD             lpdwHintFlags,
      FILETIME            *lpOrgFileTime
  );
  
  HANDLE
  WINAPI
  CSCFindFirstFileForSidW(
      LPCWSTR             lpszFileName,
      PSID                pSid,
      WIN32_FIND_DATAW    *lpFind32,
      LPDWORD             lpdwStatus,
      LPDWORD             lpdwPinCount,
      LPDWORD             lpdwHintFlags,
      FILETIME            *lpOrgFileTime
  );
  BOOL
  WINAPI
  CSCFindNextFileW(
      HANDLE              hFind,
      WIN32_FIND_DATAW    *lpFind32,
      LPDWORD             lpdwStatus,
      LPDWORD             lpdwPinCount,
      LPDWORD             lpdwHintFlags,
      FILETIME            *lpOrgFileTime
  );
  
  BOOL
  WINAPI
  CSCDeleteW(
      IN  LPCWSTR    lpszFileName
  );
  
  BOOL
  WINAPI
  CSCFillSparseFilesW(
      IN    LPCWSTR       lpszShareName,
      IN    BOOL          fFullSync,
      IN    LPCSCPROCW    lpprocFillProgress,
      IN    DWORD_PTR     dwContext
  );
  
  
  
  BOOL
  WINAPI
  CSCMergeShareW(
      IN  LPCWSTR         lpszShareName,
      IN  LPCSCPROCW      lpfnMergeProgress,
      IN  DWORD_PTR       dwContext
  );
  
  
  BOOL
  WINAPI
  CSCCopyReplicaW(
      IN  LPCWSTR lpszFullPath,
      OUT LPWSTR  *lplpszLocalName
  );
  
  BOOL
  WINAPI
  CSCEnumForStatsW(
      IN  LPCWSTR     lpszShareName,
      IN  LPCSCPROCW  lpfnEnumProgress,
      IN  DWORD_PTR   dwContext
  );
  
  BOOL
  WINAPI
  CSCEnumForStatsExW(
      IN  LPCWSTR     lpszShareName,
      IN  LPCSCPROCW  lpfnEnumProgress,
      IN  DWORD_PTR   dwContext
  );
  
  BOOL
  WINAPI
  CSCFreeSpace(
      DWORD   nFileSizeHigh,
      DWORD   nFileSizeLow
      );
  
  BOOL
  WINAPI
  CSCIsServerOfflineA(
      IN  LPCSTR     lpszServerName,
      OUT BOOL        *lpfOffline
      );
  
  BOOL
  WINAPI
  CSCIsServerOfflineW(
      IN  LPCWSTR     lpszServerName,
      OUT BOOL        *lpfOffline
      );
  
  BOOL
  WINAPI
  CSCGetSpaceUsageA(
      OUT LPSTR   lptzLocation,
      IN  DWORD   dwSize,
      OUT LPDWORD lpdwMaxSpaceHigh,
      OUT LPDWORD lpdwMaxSpaceLow,
      OUT LPDWORD lpdwCurrentSpaceHigh,
      OUT LPDWORD lpdwCurrentSpaceLow,
      OUT LPDWORD lpcntTotalFiles,
      OUT LPDWORD lpcntTotalDirs
  );
  
  BOOL
  WINAPI
  CSCGetSpaceUsageW(
      OUT LPWSTR  lptzLocation,
      IN  DWORD   dwSize,
      OUT LPDWORD lpdwMaxSpaceHigh,
      OUT LPDWORD lpdwMaxSpaceLow,
      OUT LPDWORD lpdwCurrentSpaceHigh,
      OUT LPDWORD lpdwCurrentSpaceLow,
      OUT LPDWORD lpcntTotalFiles,
      OUT LPDWORD lpcntTotalDirs
  );
  
  BOOL
  WINAPI
  CSCSetMaxSpace(
      DWORD   nFileSizeHigh,
      DWORD   nFileSizeLow
  );
  
  BOOL
  WINAPI
  CSCTransitionServerOnlineW(
      IN  LPCWSTR     lpszServerName
      );
  
  BOOL
  WINAPI
  CSCTransitionServerOnlineA(
      IN  LPCSTR     lpszServerName
      );
  
  BOOL
  WINAPI
  CSCCheckShareOnlineW(
      IN  LPCWSTR     lpszShareName
      );
  
  BOOL
  WINAPI
  CSCCheckShareOnlineExW(
      IN  LPCWSTR     lpszShareName,
      IN  DWORD       *lpdwSpeed
      );
  
  BOOL
  WINAPI
  CSCCheckShareOnlineA(
      IN  LPCSTR     lpszShareName
      );
  
  BOOL
  WINAPI
  CSCDoLocalRenameW(
      IN  LPCWSTR     lpszSource,
      IN  LPCWSTR     lpszDestination,
      IN  BOOL        fReplaceFile
      );
  
  BOOL
  WINAPI
  CSCDoLocalRenameA(
      IN  LPCSTR      lpszSource,
      IN  LPCSTR      lpszDestination,
      IN  BOOL        fReplaceFile
      );
  
  BOOL
  WINAPI
  CSCDoLocalRenameExA(
      IN  LPCSTR     lpszSource,
      IN  LPCSTR     lpszDestination,
      IN  WIN32_FIND_DATAA    *lpFin32,
      IN  BOOL        fMarkAsLocal,
      IN  BOOL        fReplaceFileIfExists
      );
  
  BOOL
  WINAPI
  CSCDoLocalRenameExW(
      IN  LPCWSTR     lpszSource,
      IN  LPCWSTR     lpszDestination,
      IN  WIN32_FIND_DATAW    *lpFin32,
      IN  BOOL        fMarkAsLocal,
      IN  BOOL        fReplaceFileIfExists
      );
  
  BOOL
  WINAPI
  CSCDoEnableDisable(
      BOOL    fEnable
      );
  
  
  BOOL
  WINAPI
  CSCBeginSynchronizationW(
      IN  LPCWSTR     lpszShareName,
      LPDWORD         lpdwSpeed,
      LPDWORD         lpdwContext
      );
  
  
  BOOL
  WINAPI
  CSCEndSynchronizationW(
      IN  LPCWSTR     lpszShareName,
      DWORD           dwContext
      );
  
  BOOL
  WINAPI
  CSCEncryptDecryptDatabase(
      IN  BOOL        fEncrypt,
      IN  LPCSCPROCW  lpfnEnumProgress,
      IN  DWORD_PTR   dwContext
      );
  
  BOOL
  WINAPI
  CSCQueryDatabaseStatus(
      ULONG   *pulStatus,
      ULONG   *pulErrors
      );
  
  BOOL
  WINAPI
  CSCPurgeUnpinnedFiles(
      ULONG   Timeout,
      ULONG   *pulnFiles,
      ULONG   *pulnYoungFiles
      );
  
  BOOL
  WINAPI
  CSCShareIdToShareName(
      ULONG ShareId,
      PBYTE Buffer,
      PDWORD pdwBufSize
      );
  
  #ifdef UNICODE
  
  #define CSCPinFile          CSCPinFileW
  #define CSCUnpinFile        CSCUnpinFileW
  #define CSCQueryFileStatus  CSCQueryFileStatusW
  #define CSCQueryFileStatusEx  CSCQueryFileStatusExW
  #define CSCQueryShareStatus  CSCQueryShareStatusW
  #define CSCFindFirstFile    CSCFindFirstFileW
  #define CSCFindFirstFileForSid    CSCFindFirstFileForSidW
  #define CSCFindNextFile     CSCFindNextFileW
  #define CSCDelete           CSCDeleteW
  #define CSCFillSparseFiles  CSCFillSparseFilesW
  #define CSCMergeShare       CSCMergeShareW
  #define CSCCopyReplica      CSCCopyReplicaW
  #define CSCEnumForStats     CSCEnumForStatsW
  #define CSCIsServerOffline  CSCIsServerOfflineW
  #define LPCSCPROC           LPCSCPROCW
  #define CSCGetSpaceUsage    CSCGetSpaceUsageW
  #define CSCTransitionServerOnline   CSCTransitionServerOnlineW
  #define CSCCheckShareOnline         CSCCheckShareOnlineW
  #define CSCCheckShareOnlineEx         CSCCheckShareOnlineExW
  #define CSCDoLocalRename            CSCDoLocalRenameW
  #define CSCDoLocalRenameEx            CSCDoLocalRenameExW
  #define CSCEnumForStatsEx     CSCEnumForStatsExW
  #define CSCBeginSynchronization    CSCBeginSynchronizationW
  #define CSCEndSynchronization   CSCEndSynchronizationW
  #else
  
  #define CSCPinFile          CSCPinFileA
  #define CSCUnpinFile        CSCUnpinFileA
  #define CSCQueryFileStatus  CSCQueryFileStatusA
  #define CSCQueryFileStatusEx  CSCQueryFileStatusExA
  #define CSCQueryShareStatus  CSCQueryShareStatusA
  #define CSCFindFirstFile    CSCFindFirstFileA
  #define CSCFindFirstFileForSid    CSCFindFirstFileForSidA
  #define CSCFindNextFile     CSCFindNextFileA
  #define CSCDelete           CSCDeleteA
  #define CSCFillSparseFiles  CSCFillSparseFilesA
  #define CSCMergeShare       CSCMergeShareA
  #define CSCCopyReplica      CSCCopyReplicaA
  #define CSCEnumForStats     CSCEnumForStatsA
  #define CSCIsServerOffline  CSCIsServerOfflineA
  #define LPCSCPROC           LPCSCPROCA
  #define CSCGetSpaceUsage    CSCGetSpaceUsageA
  #define CSCTransitionServerOnline   CSCTransitionServerOnlineA
  #define CSCCheckShareOnline        CSCCheckShareOnlineA
  #define CSCCheckShareOnlineEx         CSCCheckShareOnlineExA
  #define CSCDoLocalRename            CSCDoLocalRenameA
  #define CSCEnumForStatsEx     CSCEnumForStatsExA
  #define CSCDoLocalRenameEx            CSCDoLocalRenameExA
  #endif
  
  #ifdef __cplusplus
  }   /* ... extern "C" */
  #endif
  
  
  #endif  // _INC_CSCAPI
  