1647 lines
42 KiB
C
1647 lines
42 KiB
C
#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
|
|
|
|
|