#ifndef __LIB3_H__ #define __LIB3_H__ #ifdef __cplusplus extern "C" { #endif #undef VxD #include "shdcom.h" #ifndef __COPYCHUNKCONTEXT__ #define __COPYCHUNKCONTEXT__ typedef struct tagCOPYCHUNKCONTEXT { DWORD dwFlags; ULONG LastAmountRead; ULONG TotalSizeBeforeThisRead; HANDLE handle; ULONG ChunkSize; ULONG Context[1]; } COPYCHUNKCONTEXT; #endif /* lib3.c */ #ifdef UNICODE #define GetShadow GetShadowW #define GetShadowEx GetShadowExW #define CreateShadow CreateShadowW #define GetShadowInfo GetShadowInfoW #define GetShadowInfoEx GetShadowInfoExW #define SetShadowInfo SetShadowInfoW #define GetUNCPath GetUNCPathW #define FindOpenShadow FindOpenShadowW #define FindNextShadow FindNextShadowW #define AddHint AddHintW #define DeleteHint DeleteHintW #define GetShareInfo GetShareInfoW #define ChkUpdtStatus ChkUpdtStatusW #define FindOpenHint FindOpenHintW #define FindNextHint FindNextHintW #define LpAllocCopyParams LpAllocCopyParamsW #define FreeCopyParams FreeCopyParamsW #define CopyShadow CopyShadowW #define GetShadowDatabaseLocation GetShadowDatabaseLocationW #define GetNameOfServerGoingOffline GetNameOfServerGoingOfflineW #else #define GetShadow GetShadowA #define GetShadowEx GetShadowExA #define CreateShadow CreateShadowA #define GetShadowInfo GetShadowInfoA #define GetShadowInfoEx GetShadowInfoExA #define SetShadowInfo SetShadowInfoA #define GetUNCPath GetUNCPathA #define FindOpenShadow FindOpenShadowA #define FindNextShadow FindNextShadowA #define AddHint AddHintA #define DeleteHint DeleteHintA #define GetShareInfo GetShareInfoA #define ChkUpdtStatus ChkUpdtStatusA #define FindOpenHint FindOpenHintA #define FindNextHint FindNextHintA #define LpAllocCopyParams LpAllocCopyParamsA #define FreeCopyParams FreeCopyParamsA #define CopyShadow CopyShadowA #define GetShadowDatabaseLocation GetShadowDatabaseLocationA #endif HANDLE __OpenShadowDatabaseIO(ULONG WaitForDriver); #define OpenShadowDatabaseIO() (__OpenShadowDatabaseIO(0)) /*++ Routine Description: This routine is called by the callers in usermode using "APIs" in this file in order to establish a means of communicating with redir in the kernel mode. All the APIs are wrappers to various device IO controls to the redir in order to accomplish the appropriate task Arguments: None. The waitfordriver argument is a temporary hack which will be removed soon. All callers should call OpenShadowDatabaseIO(). Returns: If suuccessful, it returns a handle to the redir (actually a symbolic link called shadow) Returns IMVALID_HANDLE_VALUE if it fails. GetLastError() gives the error value. Notes: This is a wrapper function that does CreateFile on the "Shadow" deviceobject. --*/ void CloseShadowDatabaseIO(HANDLE hShadowDB); /*++ Routine Description: Closes the handle opened for communicating with the redir. Arguments: Handle returned from a successful OpenShadowDatabaseIO call. Returns: Nothing. Notes: It is important to have a matching CloseShadowDatabaseIO call for every successful open call, otherwise the redir may not be able to stop in the net stop redir command. --*/ int GetShadow(HANDLE hShadowDB, HSHADOW hDir, LPHSHADOW lphShadow, LPWIN32_FIND_DATA lpFind32, unsigned long *lpuStatus); /*++ Routine Description: Given the directory Inode and a name of an entry within that directory, returns the WIN32 strucutre for the entry and it's current status. For definition of status bits refer to shdcom.h. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine. If hDir is 0, then the name in the lpFind32 strucutre must be a UNC name of a share in \\server\share form. lphShadow returns the Inode number for the entry in the shadow database. If hDir is 0, the indoe is that of the root of this share. lpFind32 InOut parameter. Contains the name of the entry in cFileName member. On return all the elements of the find strucutre are filled up. These represent the find32 info as obtained from the server, with any subsequent local modifications if any. The only significant timestamp is ftLastWriteTime. ftLastCreateTime is set to 0. ftLastAccessTime contains the timestamp of the original file/directory as returned by the server. If this is a root inode of a share, the info in the Find32 strucutre is cooked up. lpuStatus returns the status of the entry, such as partially filled (sparse), locally modified etc. See SHADOW_xxx in shdcom.h If value returned in lphShadow is the root inode of a share, (ie if hDir is 0) then the status bits are SHARE_xxx as defined in shdcom.h. eg. the bits indicate whether the share is connected right now, whether it has any outstanding opens, whether it is operating in disconnected state etc. Returns: 1 if successful, 0 otherwise. GetlastError() gives the error of unsuccessful. Notes: --*/ int GetShadowEx(HANDLE hShadowDB, HSHADOW hDir, LPWIN32_FIND_DATA lpFind32, LPSHADOWINFO lpSI); /*++ Routine Description: Given the directory Inode and a name of an entry within that directory, returns the WIN32 strucutre for the entry and all it's metadata maintained by the shadowing database. For a defintion of SHADOWINFO structure refer to shdcom.h Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine If hDir is 0, then the name in the lpFind32 strucutre must be a UNC name of a share in \\server\share form. lphShadow returns the Inode number for the entry in the shadow database lpFind32 InOut parameter. Contains the name of the entry in cFileName member. On return all the elements of the find strucutre are filled up. These represent the find32 info as obtained from the server, with any subsequent local modifications if any. The only significant timestamp is ftLastWriteTime. ftLastCreateTime is set to 0. ftLastAccessTime contains the timestamp of the original file/directory as returned by the server. When the object is in ssync, both the local and remote timestamps are identical. If this is a root inode of a share, the info in the Find32 strucutre is cooked up. lpSI returns all the information about the entry maintained by the CSC database. If value returned in lphShadow is the root inode of a share, (ie if hDir is 0) then the status bits in lpSI->uStatus are SHARE_xxx as defined in shdcom.h. eg. the bits indicate whether the share is connected right now, whether it has any outstanding opens, whether it is operating in disconnected state etc. Returns: 1 if successful, 0 otherwise. GetlastError() gives the error of unsuccessful. Notes: GetShadowEx is a superset of GetShadow and should be preferred. --*/ int CreateShadow(HANDLE hShadowDB, HSHADOW hDir, LPWIN32_FIND_DATA lpFind32, unsigned long uStatus, LPHSHADOW lphShadow); /*++ Routine Description: Given the directory Inode and WIN32 strucutre for a file/directory, creates an Inode for the same. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine, or 0 which indicates the root inode of a share. lpFind32 Should contain all the elements of the find32 info as obtained from the server. Only the ftLastWriteTime timestamp is used, other timestamps are ignored. If hDir is 0, then the name in the lpFind32 strucutre must be a UNC name of a share in \\server\share form. All other elements of the strucutre are ignored uStatus the initial status of the entry to be created, such as partially filled (sparse) etc. See SHADOW_xxx in shdcom.h lphShadow returns the Inode number for the entry in the shadow database Returns: 1 if successful, 0 otherwise. GetlastError() gives the error of unsuccessful. Notes: For non-root entries, if the shadow already exists, the routine works just like SetShadowInfo. --*/ int DeleteShadow(HANDLE hShadowDB, HSHADOW hDir, HSHADOW hShadow); /*++ Routine Description: Deletes an entry from the shadow database. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine, or 0 which indicates the root inode of a share. hShadow Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine. This inode represents a child of the directory represented by hDir. Returns: 1 if successful, 0 if failed. (Error reporting is not very good here) Notes: The routine failes if hShadow is a directory and has descendents of it's own. If hDir is 0, then the root of the share is deleted. This would cause the share to be inaccessible in disconnected state, because it would have gone from the CSC database. --*/ int GetShadowInfo(HANDLE hShadowDB, HSHADOW hDir, HSHADOW hShadow, LPWIN32_FIND_DATA lpFind32, unsigned long *lpuStatus); /*++ Routine Description: Given the directory Inode and an inode within that directory, returns the WIN32 strucutre for the entry and it's current status. For definition of status bits refer to shdcom.h. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine, or 0 which indicates the root inode of a share. hShadow Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine. This inode represents a child of the directory represented by hDir. lpFind32 Can be NULL. If non-NULL on return all the elements of the find strucutre are filled up. These represent the find32 info as obtained from the server, with any subsequent local modifications if any. The only significant timestamp is ftLastWriteTime. ftLastCreateTime is set to 0. ftLastAccessTime contains the timestamp of the original file/directory as returned by the server. If this is a root inode of a share, the info in the Find32 strucutre is cooked up. lpuStatus returns the status of the entry, such as partially filled (sparse), locally modified etc. See SHADOW_xxx in shdcom.h If hShadow is the root inode of a share, (ie if hDir is 0) then the status bits are SHARE_xxx as defined in shdcom.h. eg. the bits indicate whether the share is connected right now, whether it has any outstanding opens, whether it is operating in disconnected state etc. Returns: 1 if successful, 0 otherwise. GetlastError() gives the error of unsuccessful. Notes: --*/ int GetShadowInfoEx(HANDLE hShadowDB, HSHADOW hDir, HSHADOW hShadow, LPWIN32_FIND_DATA lpFind32, LPSHADOWINFO lpSI); /*++ Routine Description: Given the directory Inode and an inode within that directory, returns the WIN32 strucutre for the entry and it's current status. For definition of status bits refer to shdcom.h. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine, or 0 which indicates the root inode of a share. hShadow Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine. This inode represents a child of the directory represented by hDir. lpFind32 Can be NULL. If non NULL, on return all the elements of the find strucutre are filled up. These represent the find32 info as obtained from the server. The only significant timestamp is ftLastWriteTime. ftLastCreateTime is set to 0. ftLastAccessTime contains the timestamp of the original file/directory as returned by the server. If this is a root inode of a share, the info in the Find32 strucutre is cooked up. lpSI returns all the information about the entry maintained by the CSC database. If hShadow a root inode of a share, (ie if hDir is 0) then the status bits in lpSI->uStatus are SHARE_xxx as defined in shdcom.h. eg. the bits indicate whether the share is connected right now, whether it has ant outstanding opens, whether it is operating in disconnected state etc. Returns: 1 if successful, 0 otherwise. GetlastError() gives the error of unsuccessful. Notes: GetShadowInfoEx is a superset of GetShadowInfo and should be preferred. --*/ int SetShadowInfo(HANDLE hShadowDB, HSHADOW hDir, HSHADOW hShadow, LPWIN32_FIND_DATA lpFind32, unsigned long uStatus, unsigned long uOp); /*++ Routine Description: Given the directory Inode and an inode within that directory, sets the WIN32 strucutre for the entry and it's current status. For definition of status bits refer to shdcom.h. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine, or 0 which indicates the root inode. hShadow Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine. This inode represents a child of the directory represented by hDir. lpFind32 If Non-NULL, should contain all the elements of the find32 info as obtained from the server. Only the ftLastWriteTime timestamp is used. If NULL, no modification is done to the find data strucutre. uStatus the initial status of the entry to be created, such as partially filled (sparse) etc. See SHADOW_xxx in shdcom.h uOp specifies operation SHADOW_FLAGS_ASSIGN, SHADOW_FLAGS_AND or SHADOW_FLAGS_OR to do the corresponding operation between the existing status bits and the one passed in the uStatus parameter. Returns: 1 if successful 0 if failed. The routine failes if hDir is 0, ie. there is no way to set info on the root of a share. Notes: --*/ int GetUNCPath(HANDLE hShadowDB, HSHARE hShare, HSHADOW hDir, HSHADOW hShadow, LPCOPYPARAMS lpCP); /*++ Routine Description: This routine returns the path of the remote file with respect to it's root, the UNC string of ths share and the fully qualified path of the local replica. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hShare The share ID on which this shadow lives. (not really necessary) hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine, or 0 which indicates the root inode. hShadow Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine. This inode represents a child of the directory represented by hDir. lpCP COPYPARAMS structure as defined in shdcom.h. The buffer should be big enough to hold two MAX_PATH size elements and one MAX_SHARE_PATH element. On return the appropriate entires are filled up. Returns: 1 if successful 0 if failed Notes: --*/ int GetGlobalStatus(HANDLE hShadowDB, LPGLOBALSTATUS lpGS); /*++ Routine Description: Returns the status of the entire CSC database, such as the maximum size, the current size etc. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. lpGS GLOBALSTATUS structure returned by the API. Refer to shdcom.h for the strucutre definition. Returns: 1 if successful 0 if failed Notes: --*/ int FindOpenShadow(HANDLE hShadowDB, HSHADOW hDir, unsigned uOp, LPWIN32_FIND_DATA lpFind32, LPSHADOWINFO lpSI); /*++ Routine Description: This API allows callers to begin enumeration of all entries in a directory in the CSC database. Does wildcard pattern matching. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. This API does not allow passing in INVALID_HANDLE_VALUE. hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine, or 0 which indicates the root inode of a share. uOp Bitfield indicating which type of entries to enumerate. The alternatives are a) All normal entries when FINDINFO_SHADOWINFO_NORMAL is set b) All sparse entries when FINDINFO_SHADOWINFO_SPARSE is set c) All entries marked deleted when FINDINFO_SHADOWINFO_DELETED is set Setting FINDOPEN_SHADOWINFO_ALL enumerates all the three kind. lpFind32 InOut parameter. Contains the name of the entry in cFileName member, the name can cotain wildcard characters. On return all the elements of the find strucutre are filled up. These represent the find32 info as obtained from the server, with any subsequent local modifications if any. The only significant timestamp is ftLastWriteTime. ftLastCreateTime is set to 0. ftLastAccessTime contains the timestamp of the original file/directory as returned by the server. If this is the root inode of a share, the info in the Find32 strucutre is cooked up. lpSI returns all the information about the entry maintained by the CSC database. If hShadow a root inode of a share, (ie if hDir is 0) then the status bits in lpSI->uStatus are SHARE_xxx as defined in shdcom.h. eg. the bits indicate whether the share is connected right now, whether it has ant outstanding opens, whether it is operating in disconnected state etc. lpSI->uEmumCookie contains the enumeration handle that should be used in subsequent FindNext calls. Returns: 1 if successful 0 if failed Notes: The wildcard matching is done on both Long File Name and Short File name of an entry and if either one matches, the entry is returned. --*/ int FindNextShadow(HANDLE hShadowDB, CSC_ENUMCOOKIE uEnumCookie, LPWIN32_FIND_DATA lpFind32, LPSHADOWINFO lpSI); /*++ Routine Description: This API allows callers to continue enumeration of entries in a directory in the CSC database begun by a FindOpenHSHADOW API call. The restrictions specified by the FindOpenHSHADOW call such as the wildcard pattern etc. apply to this API. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. This API does not allow passing in INVALID_HANDLE_VALUE. ulEnumCookie The enumeration handle returned in lpSI->uEnumCOokie after a successful FindOpenHSHADOW call. lpFind32 Output parameter. On return all the elements of the find strucutre are filled up. These represent the find32 info as obtained from the server, with any subsequent local modifications if any. The only significant timestamp is ftLastWriteTime. ftLastCreateTime is set to 0. ftLastAccessTime contains the timestamp of the original file/directory as returned by the server. If this is the root inode of a share, the info in the Find32 strucutre is cooked up. lpSI returns all the information about the entry maintained by the CSC database. If hShadow a root inode of a share, (ie if hDir is 0) then the status bits in lpSI->uStatus are SHARE_xxx as defined in shdcom.h. eg. the bits indicate whether the share is connected right now, whether it has ant outstanding opens, whether it is operating in disconnected state etc. Returns: 1 if successful 0 if either the enumeration completed or some error happened. Notes: --*/ int FindCloseShadow(HANDLE hShadowDB, CSC_ENUMCOOKIE uEnumCookie); /*++ Routine Description: This API frees up the resources associated with an enumeration initiated by FindOpenHSHADOW. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. This API does not allow appssing in INVALID_HANDLE_VALUE. ulEnumCookie The enumeration handle returned in lpSI->uEnumCookie after a successful FindOpenHSHADOW call. Returns: Notes: --*/ int AddHint(HANDLE hShadowDB, HSHADOW hDir, TCHAR *cFileName, LPHSHADOW lphShadow, unsigned long ulHintFlags, unsigned long ulHintPri); /*++ Routine Description: This API allows callers to set pincount and other flags on a database entry Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine, or 0 which indicates the root inode. cFileName The name of the element on which to set the pincount. lphShadow returns the Inode. ulHintFlags Misc flags to be set on the entry ulHintPri Pincount increment. Called hintpri for historical reasons. Returns: 1 if successful 0 if failed Notes: In the current implementation, the max pin count per entry is 255. --*/ int DeleteHint(HANDLE hShadowDB, HSHADOW hDir, TCHAR *cFileName, BOOL fClearAll); /*++ Routine Description: This API allows callers to decrement/remove pincount on a CSC database entry. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir The directory Inode value obtained from either a FindOpen/FindNext call or from an earlier call to a GetShadow(Ex)/CreateShadow routine, or 0 which indicates the root inode. cFileName The name of the element on which to set the pincount. fClearAll if TRUE, clears all pincounts and flags on the entry. Returns: 1 if successful 0 if failed Notes: --*/ int SetMaxShadowSpace(HANDLE hShadowDB, long nFileSizeHigh, long nFileSizeLow); /*++ Routine Description: Sets the maximum size of the shadow database Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. nFileSizeHigh The high order value of the space size nFileSizeLow The Low order value of the space size Returns: 1 if successful 0 otherwise Notes: Used by control panel shell extension to set the max space --*/ int FreeShadowSpace(HANDLE hShadowDB, long nFileSizeHigh, long nFileSizeLow, BOOL fClearAll); /*++ Routine Description: Allows the caller to free the requisite amount of space from the CSC database Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. nFileSizeHigh The high order value of the space size to be cleared nFileSizeLow The Low order value of the space size to be cleared fClearAll Clear the entire database, to the extent possible. Returns: 1 on success 0 on failure Notes: --*/ int SetShareStatus(HANDLE hShadowDB, HSHARE hShare, unsigned long uStatus, unsigned long uOp); /*++ Routine Description: This API allwos the caller to set the status bits on a share. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hShare Represents a share in the flat name space. hShare should have been obtained from lpSI->hShare of a successful call to GetShadowInfoEx or FindOpenHShadow/FindnextHShadow uStatus should have SHARE_xxx. uOp specifies operation SHADOW_FLAGS_ASSIGN, SHADOW_FLAGS_AND or SHADOW_FLAGS_OR to do the corresponding operation between the existing status bits and the one passed in the uStatus parameter. Returns: 1 if successful 0 if failed Notes: This should be used only for setting or clearing dirty bit on a share --*/ int GetShareStatus(HANDLE hShadowDB, HSHARE hShare, unsigned long *lpulStatus); /*++ Routine Description: This API allwos the caller to get the status bits set on a share. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hShare Represents a share in the flat name space. hShare should have been obtained from lpSI->hShare of a successful call to GetShadowInfoEx or FindOpenHShadow/FindnextHShadow lpuStatus Contains SHARE_xxx on return Returns: 1 if successful 0 if failed Notes: --*/ int GetShareInfo(HANDLE hShadowDB, HSHARE hShare, LPSHAREINFO lpSVRI, unsigned long *lpulStatus); /*++ Routine Description: This API allwos the caller to get the status bits set on a share as well at info about the filesystem it runs etc. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hShare Represents a share in the flat name space. hShare should have been obtained from lpSI->hShare of a successful call to GetShadowInfoEx or FindOpenHShadow/FindnextHShadow lpSVRI Info about the filesystem the share is running. Refer to shdcom.h lpuStatus Contains SHARE_xxx on return Returns: 1 if successful 0 if failed Notes: --*/ /**************** Routines below this line for the agent and the NP ************************/ int BeginInodeTransactionHSHADOW( VOID ); /*++ Routine Description: Arguments: Returns: Notes: --*/ int EndInodeTransactionHSHADOW( VOID ); /*++ Routine Description: Arguments: Returns: Notes: --*/ int ShadowSwitches(HANDLE hShadowDB, unsigned long * lpuSwitches, unsigned long uOp); /*++ Routine Description: Arguments: Returns: Notes: --*/ int BeginPQEnum(HANDLE hShadowDB, LPPQPARAMS lpPQP); /*++ Routine Description: Begin priority Q enumeration Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. This API does not allow appssing in INVALID_HANDLE_VALUE. lpPQ if successful, lpPQ->uEnumCookie containes the handle for enumeration Returns: 1 if successful 0 otherwise Notes: --*/ int NextPriShadow(HANDLE hShadowDB, LPPQPARAMS lpPQP); /*++ Routine Description: Gets the next entry from the priority queue in the order of priority Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. This API does not allow appssing in INVALID_HANDLE_VALUE. lpPQ Input: Must be the same lpPQ that was used in an earlier BeginPQEnum/NextPriShadow Output: If successful and lpPQ->hShadow is nono-zero then the lpPQ contains the next priority queue entry. If lpPQ->hShadow is 0, then we are at the end of the enumeration. Returns: 1 if successful 0 otherwise Notes: --*/ int PrevPriShadow(HANDLE hShadowDB, LPPQPARAMS lpPQP); /*++ Routine Description: Arguments: Returns: Notes: --*/ int EndPQEnum(HANDLE hShadowDB, LPPQPARAMS lpPQP); /*++ Routine Description: Arguments: Returns: Notes: --*/ int ChkUpdtStatus(HANDLE hShadowDB, unsigned long hDir, unsigned long hShadow, LPWIN32_FIND_DATA lpFind32, unsigned long *lpulShadowStatus); /*++ Routine Description: Arguments: Returns: Notes: --*/ int CopyChunk(HANDLE hShadowDB, LPSHADOWINFO lpSI, struct tagCOPYCHUNKCONTEXT FAR *CopyChunkContext); /*++ Routine Description: Arguments: Returns: Notes: --*/ // APIs for copying inward on NT, used only by the agent int OpenFileWithCopyChunkIntent(HANDLE hShadowDB, LPCWSTR lpFileName, struct tagCOPYCHUNKCONTEXT FAR *CopyChunkContext, int ChunkSize); int CloseFileWithCopyChunkIntent(HANDLE hShadowDB, struct tagCOPYCHUNKCONTEXT FAR *CopyChunkContext); int BeginReint(HSHARE hShare, BOOL fBlockingReint, LPVOID *lplpReintContext); /*++ Routine Description: Arguments: Returns: Notes: --*/ int EndReint(HSHARE hShare, LPVOID lpReintContext); /*++ Routine Description: Arguments: Returns: Notes: --*/ int RegisterAgent(HANDLE hShadowDB, HWND hwndAgent, HANDLE hEvent); /*++ Routine Description: Arguments: Returns: Notes: --*/ int UnregisterAgent(HANDLE hShadowDB, HWND hwndAgent); /*++ Routine Description: Arguments: Returns: Notes: --*/ int DisableShadowingForThisThread(HANDLE hShadowDB); /*++ Routine Description: Arguments: Returns: Notes: --*/ int EnableShadowingForThisThread(HANDLE hShadowDB); /*++ Routine Description: Arguments: Returns: Notes: --*/ int ReinitShadowDatabase( HANDLE hShadowDB, LPCSTR lpszDatabaseLocation, // location of the shadowing directory LPCSTR lpszUserName, // name of the user DWORD dwDefDataSizeHigh, // cache size if being created for the first time DWORD dwDefDataSizeLow, DWORD dwClusterSize ); /*++ Routine Description: Arguments: Returns: Notes: --*/ int EnableShadowing( HANDLE hShadowDB, LPCSTR lpszDatabaseLocation, // location of the shadowing directory LPCSTR lpszUserName, // user name DWORD dwDefDataSizeHigh, // cache size if being created for the first time DWORD dwDefDataSizeLow, DWORD dwClusterSize, // clustersize for rounding database space BOOL fReformat ); /*++ Routine Description: Arguments: Returns: Notes: --*/ int FindOpenHint(HANDLE hShadowDB, HSHADOW hDir, LPWIN32_FIND_DATA lpFind32, CSC_ENUMCOOKIE *lpuEnumCookie, HSHADOW *hShadow, unsigned long *lpulHintFlags, unsigned long *lpulHintPri); /*++ Routine Description: Arguments: Returns: Notes: --*/ int FindNextHint(HANDLE hShadowDB, CSC_ENUMCOOKIE uEnumCookie, LPWIN32_FIND_DATA lpFind32, HSHADOW *hShadow, unsigned long *lpulHintFlags, unsigned long *lpulHintPri); /*++ Routine Description: Arguments: Returns: Notes: --*/ int FindCloseHint(HANDLE hShadowDB, CSC_ENUMCOOKIE uEnumCookie); /*++ Routine Description: Arguments: Returns: Notes: --*/ AddHintFromInode( HANDLE hShadowDB, HSHADOW hDir, HSHADOW hShadow, unsigned long *lpulPinCount, unsigned long *lpulHintFlags ); /*++ Routine Description: The routine allows the caller to OR hintflags and increment one pincount, either for the system or for the user. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir Directory Inode hShadow Shadow on which the hintflags are to be applied lpulPinCount pincount on exit lpulHintFlags inout filed, contains flags to be ORed, returns the flags on the entry on a successful operation Returns: 1 if successful 0 if failed. It fails, if a) the pin count is about to go over MAX_PRI or b) it is attempting to pin it for the user but is already pinned for the user Notes: Mainly for CSCPinFile's use --*/ DeleteHintFromInode( HANDLE hShadowDB, HSHADOW hDir, HSHADOW hShadow, unsigned long *lpulPinCount, unsigned long *lpulHintFlags ); /*++ Routine Description: The routine allows the caller to AND ~ of hintflags and decrement one pincount, either for the system or for the user. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. hDir Directory Inode hShadow Shadow on which the hintflags are to be applied lpulPinCount pincount on exit lpulHintFlags inout filed, contains flags whose ~ is to be ANDed, returns the flags on the entry on a successful operation Returns: 1 if successful 0 if failed. It fails, if a) the pin count is about to go below MIN_PRI or b) it is attempting to unpin it for the user but isn't pinned for the user Notes: Mainly for CSCPinFile's use --*/ int DoShadowMaintenance(HANDLE hShadowDB, unsigned long uOp); /*++ Routine Description: The routine allows the caller to perform various maitenance tasks. Arguments: hShadowDB Handle to the shadow database as obtained from OpenShadowDatabaseIO. if INVALID_HANDLE_VALUE is passed in, the API, opens the shadow database, issues the corresponding ioctl, and closes it before returning. uOp Various operations to perform. Returns: 1 if successful 0 if failed Notes: Mainly for agents purposes, shouldn't be used by UI --*/ BOOL IsNetDisconnected( DWORD dwErrorCode ); /*++ Routine Description: The routine checks from the errocode whether the net is disconnected Arguments: dwErrorCode one of the codes defined in winerror.h Returns: TRUE if net is disconnected, FALSE otherwise Notes: A central place for all CSC users of lib3, to know whether net is disconnected --*/ BOOL PurgeUnpinnedFiles( HANDLE hShadowDB, LONG Timeout, PULONG pnFiles, PULONG pnYoungFiles); BOOL ShareIdToShareName( HANDLE hShadowDB, ULONG ShareId, PBYTE pBuffer, PDWORD pBufSize); BOOL CopyShadow( HANDLE hShadowDB, HSHADOW hDir, HSHADOW hShadow, TCHAR *lpFileName ); /*++ Routine Description: The routine makes a copy of an inode file in the CSC database Arguments: hDir Directory Inode hShadow Inode whose copy is wanted lpFileName Fully qualified local path of the filename to be given to the copy Returns: TRUE if the copy succeeded. Notes: Useful for backup/dragdrop etc. --*/ LPCOPYPARAMSW LpAllocCopyParamsW( VOID ); VOID FreeCopyParamsW( LPCOPYPARAMSW lpCP ); LPCOPYPARAMSA LpAllocCopyParamsA( VOID ); VOID FreeCopyParamsA( LPCOPYPARAMSA lpCP ); int GetSecurityInfoForCSC( HANDLE hShadowDB, HSHADOW hDir, HSHADOW hShadow, LPSECURITYINFO lpSecurityInfo, DWORD *lpdwBufferSize ); int FindCreatePrincipalIDFromSID( HANDLE hShadowDB, LPVOID lpSidBuffer, ULONG cbSidLength, ULONG *lpuPrincipalID, BOOL fCreate ); BOOL SetExclusionList( HANDLE hShadowDB, LPWSTR lpwList, DWORD cbSize ); BOOL SetBandwidthConservationList( HANDLE hShadowDB, LPWSTR lpwList, DWORD cbSize ); BOOL TransitionShareToOffline( HANDLE hShadowDB, HSHARE hShare, BOOL fTransition ); BOOL TransitionShareToOnline( HANDLE hShadowDB, HSHARE hShare ); BOOL IsServerOfflineW( HANDLE hShadowDB, LPCWSTR lptzServer, BOOL *lpfOffline ); BOOL IsServerOfflineA( HANDLE hShadowDB, LPCSTR lptzServer, BOOL *lpfOffline ); int GetShadowDatabaseLocation( HANDLE hShadowDB, WIN32_FIND_DATA *lpFind32 ); int GetSpaceStats( HANDLE hShadowDB, SHADOWSTORE *lpsST ); BOOL GetNameOfServerGoingOfflineW( HANDLE hShadowDB, LPBYTE lpBuffer, LPDWORD lpdwSize ); BOOL RenameShadow( HANDLE hShadowDB, HSHADOW hDirFrom, HSHADOW hShadowFrom, HSHADOW hDirTo, LPWIN32_FIND_DATAW lpFind32, BOOL fReplaceFileIfExists, HSHADOW *lphShadowTo ); BOOL GetSparseStaleDetectionCounter( HANDLE hShadowDB, LPDWORD lpdwCounter ); BOOL GetManualFileDetectionCounter( HANDLE hShadowDB, LPDWORD lpdwCounter ); int EnableShadowingForUser( HANDLE hShadowDB, LPCSTR lpszDatabaseLocation, // location of the shadowing directory LPCSTR lpszUserName, // name of the user DWORD dwDefDataSizeHigh, // cache size if being created for the first time DWORD dwDefDataSizeLow, DWORD dwClusterSize, BOOL fReformat ); int DisableShadowingForUser( HANDLE hShadowDB ); HANDLE OpenShadowDatabaseIOex( ULONG WaitForDriver, DWORD dwFlags); BOOL RecreateShadow( HANDLE hShadowDB, HSHADOW hDir, HSHADOW hShadow, ULONG ulAttrib ); BOOL SetDatabaseStatus( HANDLE hShadowDB, ULONG ulStatus, ULONG uMask ); #ifdef __cplusplus } #endif #endif