You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
451 lines
18 KiB
451 lines
18 KiB
|
|
#define MAX_SHADOW_DIR_NAME 16 // maximum string size of shadow directory
|
|
|
|
// Stolen from IFSMgr code
|
|
#define MAX_SERVER_SHARE (31+63+2)
|
|
|
|
|
|
/********************** Type definitions for subclassed network objects ****/
|
|
|
|
typedef struct tagRESOURCE *PRESOURCE;
|
|
typedef struct tagFINDINFO *PFINDINFO;
|
|
typedef struct tagFILEINFO *PFILEINFO;
|
|
typedef struct tagFDB *PFDB, **PPFDB;
|
|
typedef struct tagELEM *PELEM;
|
|
typedef PELEM *PPELEM;
|
|
typedef PRESOURCE *PPRESOURCE;
|
|
typedef struct tagFINDSHADOW FINDSHADOW;
|
|
typedef FINDSHADOW *LPFINDSHADOW;
|
|
|
|
|
|
/******** Netowrk provider *********/
|
|
|
|
typedef struct tagNETPRO
|
|
{
|
|
PRESOURCE pheadResource;
|
|
pIFSFunc pOurConnectNet;
|
|
pIFSFunc pConnectNet; // Providers connection function
|
|
} NETPRO, DISKPRO, *PNETPRO, *PDISKPRO;
|
|
|
|
|
|
/************ Resource AKA Volume AKA share *****/
|
|
|
|
typedef struct tagRESOURCE
|
|
{
|
|
PRESOURCE pnextResource;
|
|
PFILEINFO pheadFileInfo; // list of file I/O calls on this resource
|
|
PFINDINFO pheadFindInfo; // list of finds on this resource
|
|
PFDB pheadFdb; // List of files being shadowed
|
|
HSHARE hShare; // Handle to the server shadow
|
|
HSHADOW hRoot; // Handle to the root
|
|
USHORT usFlags;
|
|
USHORT usLocalFlags;
|
|
PNETPRO pOurNetPro;
|
|
rh_t rhPro; // Providers resource handle;
|
|
fh_t fhSys; // System resource handle
|
|
vfunc_t pVolTab; // Pointer to volume functions structure
|
|
int cntLocks; // Count of locks on this resource
|
|
ULONG uDriveMap; // Drive map for this resource
|
|
PathElement pp_elements[1];
|
|
} RESOURCE, *PRESOURCE;
|
|
|
|
|
|
/********* per open file handle ****/
|
|
|
|
typedef struct tagFILEINFO
|
|
{
|
|
PFILEINFO pnextFileInfo; // Next FileInfo
|
|
PRESOURCE pResource; // Resource off which it is hanging
|
|
CSCHFILE hfShadow; // Shadow file handle
|
|
PFDB pFdb; // Info of Shadow File
|
|
fh_t fhProFile; // providers file handle
|
|
hndlfunc hfFileHandle; // providers file function table
|
|
UCHAR uchAccess; // Acess-share flags for this open
|
|
UCHAR uchDummy;
|
|
USHORT usFlags;
|
|
USHORT usLocalFlags;
|
|
ULONG cbTotalRead;
|
|
sfn_t sfnFile;
|
|
pid_t pidFile;
|
|
uid_t userFile;
|
|
} FILEINFO, *PFILEINFO;
|
|
|
|
|
|
/////////////////////////////////////////////////////////
|
|
|
|
|
|
/**** FileDescriptionBlock. Common info for all open instances of a file**/
|
|
typedef struct tagFDB
|
|
{
|
|
// I M P O R T A N T : the NT code for PFindFdbFromHshadow returns a PFDB
|
|
// but this pointer must not be used to get/put any field except usFlags!
|
|
|
|
PFDB pnextFdb; // Link to the next
|
|
PRESOURCE pResource; // Back pointer to our resource
|
|
USHORT usFlags; //
|
|
USHORT usCount; // Open Count
|
|
ULONG hShadow; // Shadow handle if any
|
|
ULONG hDir;
|
|
ULONG dwFileSize; // file size when first opened
|
|
dos_time dosFileTime;
|
|
ULONG dwAttr;
|
|
USHORT cntLocks; // Total outstanding locks
|
|
USHORT usLocalFlags;
|
|
ULONG dwRemoteFileSize; // size of the file when first created, used in the heuristic
|
|
ParsedPath sppathRemoteFile; // Parsed Path of the file
|
|
} FDB, *PFDB;
|
|
|
|
|
|
|
|
typedef struct tagOTHERINFO
|
|
{
|
|
ULONG ulRefPri;
|
|
union
|
|
{
|
|
ULONG ulIHPri;
|
|
ULONG ulRootStatus;
|
|
};
|
|
ULONG ulHintFlags;
|
|
ULONG ulHintPri;
|
|
HSHADOW hShadowOrg;
|
|
FILETIME ftOrgTime;
|
|
FILETIME ftLastRefreshTime;
|
|
|
|
} OTHERINFO, *LPOTHERINFO;
|
|
|
|
typedef int (PUBLIC *METAMATCHPROC)(LPFIND32, HSHADOW, HSHADOW, ULONG, LPOTHERINFO, LPVOID);
|
|
|
|
#define MM_RET_FOUND_CONTINUE 2
|
|
#define MM_RET_CONTINUE 1
|
|
#define MM_RET_FOUND_BREAK 0
|
|
#define MM_RET_BREAK -1
|
|
|
|
typedef struct tagFINDSHADOW
|
|
{
|
|
LPFINDSHADOW lpFSHNext;
|
|
ULONG ulFlags;
|
|
HSHADOW hDir;
|
|
ULONG ulCookie;
|
|
ULONG uAttrib;
|
|
ULONG uSrchFlags;
|
|
USHORT *lpPattern;
|
|
METAMATCHPROC lpfnMMProc;
|
|
} FINDSHADOW, *LPFINDSHADOW;
|
|
|
|
typedef struct tagSHADOWCHECK
|
|
{
|
|
USHORT uFlagsIn;
|
|
USHORT uFlagsOut;
|
|
ULONG ulCookie;
|
|
USHORT *lpuName;
|
|
USHORT *lpuType;
|
|
HSHADOW hShadow;
|
|
ULONG uStatus;
|
|
ULONG ulHintFlags;
|
|
ULONG ulHintPri;
|
|
#ifdef MAYBE
|
|
OTHERINFO sOI;
|
|
#endif //MAYBE
|
|
} SHADOWCHECK, *LPSHADOWCHECK;
|
|
|
|
#define FLAG_OUT_SHADOWCHECK_FOUND 0x1
|
|
|
|
|
|
#define FLAG_IN_SHADOWCHECK_EXCLUDE 0x0001
|
|
#define FLAG_IN_SHADOWCHECK_NAME 0x0002
|
|
#define FLAG_IN_SHADOWCHECK_SUBTREE 0x0004
|
|
#define FLAG_IN_SHADOWCHECK_IGNOREHINTS 0x0008
|
|
/*************** Our version of the find handle (VfnFindOpen)******/
|
|
|
|
typedef struct tagFINDINFO
|
|
{
|
|
PFINDINFO pnextFindInfo; // Next FindInfo
|
|
PRESOURCE pResource; // Resource off which it is hanging
|
|
fh_t fhProFind; // providers find handle
|
|
hndlfunc hfFindHandle; // providers find function table
|
|
USHORT usFlags;
|
|
USHORT usLocalFlags;
|
|
HSHADOW hDir; // Directory in which the search is going on
|
|
FINDSHADOW sFS;
|
|
PathElement pe_pattern[1]; // Search pattern in case of wildcard search
|
|
} FINDINFO, *PFINDINFO;
|
|
|
|
/************ Generic linked list element ****************/
|
|
typedef struct tagELEM
|
|
{
|
|
PELEM pnextElem;
|
|
} ELEM;
|
|
|
|
|
|
|
|
/********************* Flag definitions ************************************/
|
|
|
|
/** Flags set in usLocalFlags field of FDB (FileDescriptionBlock) **/
|
|
|
|
#define FLAG_FDB_SERIALIZE 0x0001
|
|
#define FLAG_FDB_INUSE_BY_AGENT 0x0002
|
|
#define FLAG_FDB_SHADOW_MODIFIED 0x0008
|
|
#define FLAG_FDB_DONT_SHADOW 0x0010
|
|
#define FLAG_FDB_FINAL_CLOSE_DONE 0x0020
|
|
#define FLAG_FDB_DISABLE_AGENT 0x0040
|
|
#define FLAG_FDB_ON_CACHEABLE_SHARE 0x0080
|
|
#define FLAG_FDB_SHADOW_SNAPSHOTTED 0x0100
|
|
#define FLAG_FDB_DELETE_ON_CLOSE 0x0200 // on NT we mark this file for delete after close
|
|
|
|
/** Flags set in usLocalFlags field of FILEINFO **/
|
|
|
|
#define FLAG_FILEINFO_INUSE_BY_AGENT 0x0002
|
|
#define FLAG_FILEINFO_DUP_HANDLE 0x2000 // Duplicate handle
|
|
#define FLAG_FILEINFO_INVALID_HANDLE 0x4000
|
|
#define FLAG_FILEINFO_INTERNAL_HANDLE 0x8000 // Handle created for internal find
|
|
|
|
|
|
/** Flags set in usLocalFlags field of FINDINFO **/
|
|
|
|
#define FLAG_FINDINFO_SHADOWFIND 0x0001 // Shadow find is in progress
|
|
#define FLAG_FINDINFO_INVALID_HANDLE 0x4000
|
|
#define FLAG_FINDINFO_INTERNAL_HANDLE 0x8000 // Handle created for internal find
|
|
|
|
|
|
/** Flags set on RESOURCE ***/
|
|
|
|
#define FLAG_RESOURCE_DISCONNECTED SHARE_DISCONNECTED_OP //0x8000
|
|
#define FLAG_RESOURCE_SHADOW_ERRORS SHARE_ERRORS // 0x4000
|
|
#define FLAG_RESOURCE_SHADOW_CONNECT_PENDING 0x2000
|
|
#define FLAG_RESOURCE_SHADOWNP SHARE_SHADOWNP // 0x1000
|
|
#define FLAG_RESOURCE_SLOWLINK 0x0800
|
|
#define FLAG_RESOURCE_OFFLINE_CONNECTION 0x0400
|
|
#define FLAG_RESOURCE_CSC_MASK 0x00C0
|
|
|
|
// the following defines deal with the CSC bits as obtained from the server and
|
|
// as stored in the RESOURCE data structure
|
|
|
|
#define ResourceCscBitsToSmbCscBits(uResBits) (((uResBits) & FLAG_RESOURCE_CSC_MASK) >> 4)
|
|
#define SmbCscBitsToResourceCscBits(uResBits) (((uResBits) & SMB_NEW_CSC_MASK) << 4)
|
|
#define ResourceCscBitsToShareCscBits(uResBits) ((uResBits) & FLAG_RESOURCE_CSC_MASK)
|
|
|
|
#define FLAG_RESOURCE_CSC_MANUAL_REINT 0x0000 // No automatic file by file reint
|
|
#define FLAG_RESOURCE_CSC_AUTO_REINT 0x0040 // File by file reint is OK
|
|
#define FLAG_RESOURCE_CSC_VDO 0x0080 // no need to flow opens
|
|
#define FLAG_RESOURCE_CSC_NO_CACHING 0x00C0 // client should not cache this share
|
|
|
|
/** Find types *****/
|
|
|
|
#define FLAG_FINDSHADOW_META 0x0001 // wild card matching
|
|
#define FLAG_FINDSHADOW_NEWSTYLE 0x0002 // NT stle matching
|
|
#define FLAG_FINDSHADOW_ALLOW_NORMAL 0x0004 // include non-sparse, undeleted shadows
|
|
#define FLAG_FINDSHADOW_ALLOW_SPARSE 0x0008 // include sparse shadows
|
|
#define FLAG_FINDSHADOW_ALLOW_DELETED 0x0010 // include shadows marked deleted
|
|
#define FLAG_FINDSHADOW_DONT_ALLOW_INSYNC 0x0020 // ??
|
|
#define FLAG_FINDSHADOW_ALL 0x8000
|
|
|
|
|
|
/******* Findshadow flags ***********/
|
|
|
|
#define FLAG_FINDSHADOW_INVALID_DIRECTORY 0x0001 //
|
|
|
|
/************** Convenience macros ****************************/
|
|
|
|
#define mShadowErrors(pRes) (((PRESOURCE)(pRes))->usLocalFlags & FLAG_RESOURCE_SHADOW_ERRORS)
|
|
#define mShadowFindON(pFI) (((PFINDINFO)(pFI))->usLocalFlags & FLAG_FINDINFO_SHADOWFIND)
|
|
#define mSetShadowFindON(pFI) (((PFINDINFO)(pFI))->usLocalFlags |= FLAG_FINDINFO_SHADOWFIND)
|
|
#define mResetShadowFindON(pFI) (((PFINDINFO)(pFI))->usLocalFlags &= ~FLAG_FINDINFO_SHADOWFIND)
|
|
#define mSerialize(pFdb) ((pFdb)->usLocalFlags & (FLAG_FDB_SERIALIZE))
|
|
#define mSetSerialize(pFdb) ((pFdb)->usLocalFlags |= FLAG_FDB_SERIALIZE)
|
|
#define mClearSerialize(pFdb) ((pFdb)->usLocalFlags &= ~FLAG_FDB_SERIALIZE)
|
|
#define mInvalidFileHandle(pFileInfo) (((PFILEINFO)(pFileInfo))->usLocalFlags & FLAG_FILEINFO_INVALID_HANDLE)
|
|
#define mInvalidFindHandle(pFileInfo) (((PFILEINFO)(pFileInfo))->usLocalFlags & FLAG_FINDINFO_INVALID_HANDLE)
|
|
|
|
#define mIsDisconnected(pResource) (((PRESOURCE)(pResource))->usLocalFlags & FLAG_RESOURCE_DISCONNECTED)
|
|
#define mMarkDisconnected(pResource) (((PRESOURCE)(pResource))->usLocalFlags |= FLAG_RESOURCE_DISCONNECTED)
|
|
#define mClearDisconnected(pResource) (((PRESOURCE)(pResource))->usLocalFlags &= ~FLAG_RESOURCE_DISCONNECTED)
|
|
#define mIsOfflineConnection(pResource) (((PRESOURCE)(pResource))->usLocalFlags & FLAG_RESOURCE_OFFLINE_CONNECTION)
|
|
#define mShadowConnectPending(pResource) (((PRESOURCE)(pResource))->usLocalFlags & FLAG_RESOURCE_SHADOW_CONNECT_PENDING)
|
|
#define mClearDriveUse(pResource, drvno) (((PRESOURCE)(pResource))->uDriveMap &= ~((1 << drvno)))
|
|
#define mSetDriveUse(pResource, drvno) (((PRESOURCE)(pResource))->uDriveMap |= (1 << drvno))
|
|
#define mGetDriveUse(pResource, drvno) (((PRESOURCE)(pResource))->uDriveMap & (1 << drvno))
|
|
#define mGetCSCBits(pRes) (((PRESOURCE)(pRes))->usLocalFlags & FLAG_RESOURCE_CSC_MASK)
|
|
#define mSetCSCBits(pRes, uBits) ((((PRESOURCE)(pRes))->usLocalFlags &= ~FLAG_RESOURCE_CSC_MASK), (((PRESOURCE)(pRes))->usLocalFlags |= ((uBits) & FLAG_RESOURCE_CSC_MASK)))
|
|
|
|
#define mAutoReint(pRes) ((((PRESOURCE)(pRes))->usLocalFlags & FLAG_RESOURCE_CSC_MASK)==FLAG_RESOURCE_CSC_AUTO_REINT)
|
|
#define mNotCacheable(pRes) ((((PRESOURCE)(pRes))->usLocalFlags & FLAG_RESOURCE_CSC_MASK)==FLAG_RESOURCE_CSC_NO_CACHING)
|
|
|
|
|
|
#define ANY_RESOURCE (void *)(0xFFFFFFFF)
|
|
#define ANY_FHID (void *)(0xFFFFFFFF)
|
|
#define RH_DISCONNECTED (void *)0
|
|
#define UseGlobalFind32() {AssertInShadowCrit();memset(&vsFind32, 0, sizeof(vsFind32));}
|
|
#define EnterHookCrit() Wait_Semaphore(semHook, BLOCK_SVC_INTS)
|
|
#define LeaveHookCrit() Signal_Semaphore(semHook)
|
|
/*************************** Globals ************************************/
|
|
/************************** Templates for exported functions ***************/
|
|
|
|
int GetDriveIndex(LPSTR lpDrive);
|
|
PFDB PFindFdbFromHShadow (HSHADOW hShadow);
|
|
int CopyChunk (HSHADOW, HSHADOW, PFILEINFO, COPYCHUNKCONTEXT *);
|
|
PRESOURCE PFindShadowResourceFromDriveMap(int indx);
|
|
PRESOURCE PFindResource (LPPE lppeIn, rh_t rhPro, fh_t fhPro, ULONG uFlags, PNETPRO pNetPro);
|
|
PRESOURCE PFindResourceFromHShare (HSHARE, USHORT, USHORT);
|
|
PRESOURCE PFindResourceFromRoot (HSHADOW, USHORT, USHORT);
|
|
void LinkResource (PRESOURCE pResource, PNETPRO pNetPro);
|
|
PRESOURCE PUnlinkResource (PRESOURCE pResource, PNETPRO pNetPro);
|
|
PRESOURCE PCreateResource (LPPE lppeIn);
|
|
void DestroyResource (PRESOURCE pResource);
|
|
int PUBLIC FindOpenHSHADOW(LPFINDSHADOW, LPHSHADOW, LPFIND32, ULONG far *, LPOTHERINFO);
|
|
int PUBLIC FindNextHSHADOW(LPFINDSHADOW, LPHSHADOW, LPFIND32, ULONG far *, LPOTHERINFO);
|
|
int PUBLIC FindCloseHSHADOW(LPFINDSHADOW);
|
|
|
|
HSHARE
|
|
HShareFromPath(
|
|
PRESOURCE pResource,
|
|
LPPE lppeShare,
|
|
ULONG uFlags,
|
|
LPFIND32 lpFind32,
|
|
HSHADOW *lphRoot,
|
|
ULONG *lpuShareStatus
|
|
);
|
|
|
|
PFILEINFO PFileInfoAgent(VOID);
|
|
|
|
BOOL IsDupHandle(PFILEINFO pFileInfo);
|
|
PFDB PFindFdbFromHShadow (HSHADOW);
|
|
PFINDINFO PFindFindInfoFromHShadow(HSHADOW);
|
|
|
|
int FsobjMMProc(LPFIND32, HSHADOW, HSHADOW, ULONG, LPOTHERINFO, LPFINDSHADOW);
|
|
int GetShadowWithChecksProc (LPFIND32, HSHADOW, HSHADOW, ULONG, LPOTHERINFO, LPSHADOWCHECK);
|
|
|
|
/* the fcb structures work very differently on NT/rdr2 from the shadow VxD.
|
|
accordingly, we have to do things a bit differently. there are the following
|
|
important considerations:
|
|
|
|
1. after you find a PFDBfromHShadow, it will continue to be valid until you
|
|
leavveshadowcrit. what we'll do is to return a pointer to the status as
|
|
part of the lookup routine and we'll use the pointer to fetch/update the status.
|
|
IMPORTANT>>>> what i do is to actually return a pointer so that the status is
|
|
act the correct offset from the pointer. the pointer must not be used for anything
|
|
else.
|
|
|
|
2. i cannot continue to be in the shadow crit while looking up a netroot. accordingly,
|
|
i'll have to drop the lock and reacquire it. so i get the status and the drive map at
|
|
the same time and remember them for later.
|
|
|
|
*/
|
|
|
|
|
|
#ifndef CSC_RECORDMANAGER_WINNT
|
|
int ReportCreateDelete( HSHADOW hShadow, BOOL fCreate);
|
|
|
|
#define SMB_NEW_CSC_MASK 0x000C // see below
|
|
|
|
#define SMB_NEW_CSC_CACHE_MANUAL_REINT 0x0000 // No automatic file by file reint
|
|
#define SMB_NEW_CSC_CACHE_AUTO_REINT 0x0004 // File by file reint is OK
|
|
#define SMB_NEW_CSC_CACHE_VDO 0x0008 // no need to flow opens
|
|
#define SMB_NEW_CSC_NO_CACHING 0x000C // client should not cache this share
|
|
|
|
#define IFNOT_CSC_RECORDMANAGER_WINNT if(TRUE)
|
|
#define MRxSmbCscGetSavedResourceStatus() (0)
|
|
#define MRxSmbCscGetSavedResourceDriveMap() (0)
|
|
#define DeclareFindFromShadowOnNtVars()
|
|
#define PLocalFlagsFromPFdb(pFdb) (&((pFdb)->usLocalFlags))
|
|
#else
|
|
//BUGBUG
|
|
//this comes from hook.c on win95
|
|
#define ReportCreateDelete(a,b) {NOTHING;}
|
|
|
|
#define IFNOT_CSC_RECORDMANAGER_WINNT if(FALSE)
|
|
|
|
#define DeclareFindFromShadowOnNtVars() \
|
|
ULONG mrxsmbShareStatus,mrxsmbDriveMap;
|
|
|
|
#define PFindFindInfoFromHShadow(a) ((NULL))
|
|
|
|
PFDB MRxSmbCscFindFdbFromHShadow (
|
|
IN HSHADOW hShadow
|
|
);
|
|
#define PFindFdbFromHShadow(a) MRxSmbCscFindFdbFromHShadow(a)
|
|
|
|
PRESOURCE MRxSmbCscFindResourceFromHandlesWithModify (
|
|
IN HSHARE hShare,
|
|
IN HSHADOW hRoot,
|
|
IN USHORT usLocalFlagsIncl,
|
|
IN USHORT usLocalFlagsExcl,
|
|
OUT PULONG ShareStatus,
|
|
OUT PULONG DriveMap,
|
|
IN ULONG uStatus,
|
|
IN ULONG uOp
|
|
);
|
|
|
|
USHORT *
|
|
MRxSmbCscFindLocalFlagsFromFdb(
|
|
PFDB pFdb
|
|
);
|
|
|
|
|
|
#define PFindResourceFromRoot(a,b,c) \
|
|
MRxSmbCscFindResourceFromHandlesWithModify(0xffffffff,a,b,c,\
|
|
&mrxsmbShareStatus, \
|
|
&mrxsmbDriveMap,0,0xffffffff)
|
|
#define MRxSmbCscGetSavedResourceStatus() (mrxsmbShareStatus)
|
|
#define MRxSmbCscGetSavedResourceDriveMap() (mrxsmbDriveMap)
|
|
|
|
#define PFindResourceFromHShare(a,b,c) \
|
|
MRxSmbCscFindResourceFromHandlesWithModify(a,0xffffffff,b,c,\
|
|
&mrxsmbShareStatus, \
|
|
&mrxsmbDriveMap,0,0xffffffff)
|
|
#define PSetResourceStatusFromHShare(a,b,c,d,e) \
|
|
MRxSmbCscFindResourceFromHandlesWithModify(a,0xffffffff,b,c,\
|
|
&mrxsmbShareStatus, \
|
|
&mrxsmbDriveMap,d,e)
|
|
#define ClearAllResourcesOfShadowingState() \
|
|
MRxSmbCscFindResourceFromHandlesWithModify(0xffffffff,0xffffffff,0,0,\
|
|
NULL, \
|
|
NULL,0,SHADOW_FLAGS_AND)
|
|
|
|
#define PLocalFlagsFromPFdb(a) MRxSmbCscFindLocalFlagsFromFdb(a)
|
|
|
|
NTSTATUS
|
|
MRxSmbCscCachingBitsFromCompleteUNCPath(
|
|
PWSTR lpShareShare,
|
|
ULONG *lpulBits
|
|
);
|
|
|
|
NTSTATUS
|
|
MRxSmbCscServerStateFromCompleteUNCPath(
|
|
PWSTR lpShareShare,
|
|
BOOL *lpfOnline,
|
|
BOOL *lpfPinnedOffline
|
|
);
|
|
|
|
NTSTATUS
|
|
MRxSmbCscIsLoopbackServer(
|
|
PWSTR lpServerShare,
|
|
BOOL *lpfIsLoopBack);
|
|
|
|
|
|
#define SIGNALAGENTFLAG_CONTINUE_FOR_NO_AGENT 0x00000001
|
|
#define SIGNALAGENTFLAG_DONT_LEAVE_CRIT_SECT 0x00000002
|
|
|
|
extern NTSTATUS
|
|
MRxSmbCscSignalAgent (
|
|
PRX_CONTEXT RxContext OPTIONAL,
|
|
ULONG Controls
|
|
);
|
|
|
|
extern NTSTATUS
|
|
MRxSmbCscSignalFillAgent (
|
|
PRX_CONTEXT RxContext OPTIONAL,
|
|
ULONG Controls
|
|
);
|
|
|
|
extern BOOL
|
|
IsCSCBusy(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
ClearCSCStateOnRedirStructures(
|
|
VOID
|
|
);
|
|
|
|
|
|
#endif //ifndef CSC_RECORDMANAGER_WINNT
|