/*++ Copyright (c) 1998-1999 Microsoft Corporation Module Name: filelist.h Abstract: This is a local header file for filelist.c Author: Paul McDaniel (paulmcd) 23-Jan-2000 Revision History: --*/ #ifndef _FILELIST_H_ #define _FILELIST_H_ // // Enumerated type to describe the different classes of ACLs SR can set // on files and directories it controls. // typedef enum _SR_ACL_TYPE { // // For the \System Volume Information directory and the files contain // in this directory. // SrAclTypeSystemVolumeInformationDirectory, // // For the _restore{MachineGuid} directory and the files contained // in this directory. // SrAclTypeRestoreDirectoryAndFiles, // // For the _restore{MachineGuid}\RPx directories // SrAclTypeRPDirectory, // // For the files contained in the _restore{MachineGuid}\RPx directories // SrAclTypeRPFiles } SR_ACL_TYPE, *PSR_ACL_TYPE; NTSTATUS SrGetObjectName ( IN PSR_DEVICE_EXTENSION pExtension OPTIONAL, IN PVOID pObject, OUT PUNICODE_STRING pName, IN ULONG NameLength ); PWSTR SrpFindFilePartW ( IN PWSTR pPath ); PSTR SrpFindFilePart ( IN PSTR pPath ); NTSTATUS SrFindCharReverse( IN PWSTR pToken, IN ULONG TokenLength, IN WCHAR FindChar, OUT PWSTR * ppToken, OUT PULONG pTokenLength ); NTSTATUS SrGetDestFileName( IN PSR_DEVICE_EXTENSION pExtension, IN PUNICODE_STRING pFileName, OUT PUNICODE_STRING pDestFileName ); NTSTATUS SrGetNextFileNumber ( OUT PULONG pNextFileNumber ); NTSTATUS SrGetNextSeqNumber ( OUT PINT64 pNextSeqNumber ); NTSTATUS SrGetSystemVolume ( OUT PUNICODE_STRING pFileName, OUT PSR_DEVICE_EXTENSION *ppSystemVolumeExtension, IN ULONG FileNameLength ); // // a backup history, for only performing one backup per session // #define BACKUP_BUCKET_COUNT 2003 // a prime number #define BACKUP_BUCKET_LENGTH (5 * 1024 * 1024) // 5mb NTSTATUS SrMarkFileBackedUp( IN PSR_DEVICE_EXTENSION pExtension, IN PUNICODE_STRING pFileName, IN USHORT StreamNameLength, IN SR_EVENT_TYPE CurrentEvent, IN SR_EVENT_TYPE FutureEventsToIgnore ); BOOLEAN SrHasFileBeenBackedUp( IN PSR_DEVICE_EXTENSION pExtension, IN PUNICODE_STRING pFileName, IN USHORT StreamNameLength, IN SR_EVENT_TYPE EventType ); NTSTATUS SrResetBackupHistory ( IN PSR_DEVICE_EXTENSION pExtension, IN PUNICODE_STRING pFileName OPTIONAL, IN USHORT StreamNameLength OPTIONAL, IN SR_EVENT_TYPE EventType ); // // the size of the full buffer // #define SR_RENAME_BUFFER_LENGTH ( sizeof(FILE_RENAME_INFORMATION) \ +SR_MAX_FILENAME_LENGTH \ +sizeof(WCHAR) ) #define SR_FILENAME_BUFFER_LENGTH ( sizeof(UNICODE_STRING) \ +SR_MAX_FILENAME_LENGTH \ +sizeof(WCHAR) ) #define SR_FILENAME_BUFFER_DEPTH 50 NTSTATUS FORCEINLINE SrAddAccessAllowedAce ( PACL Acl, PSID Sid, ACCESS_MASK Access, ULONG AceIndex, UCHAR AceFlags ) /*++ Routine Description: This routine calls the appropriate Rtl routines to add an access ACE to an ACL and set the inheritance as specified by the AceFlags. Arguments: Acl - The Acl to which this ACE should be added. Sid - The id of the user/group to which this ACE applies. Access - The access to allow this Sid. AceIndex - The index for this ACE in the ACL. AceFlags - The flags to set on for this ACE. Return Value: STATUS_SUCCESS if the ACE was set successfully, or the appropriate error otherwise. --*/ { NTSTATUS status; PACE_HEADER aceHeader; status = RtlAddAccessAllowedAce( Acl, ACL_REVISION, Access, Sid ); if (!NT_SUCCESS( status )) { return status; } if (AceFlags != 0) { status = RtlGetAce( Acl, AceIndex, &aceHeader ); if (!NT_SUCCESS( status )) { return status; } aceHeader->AceFlags = AceFlags; } return status; } PVOID SrResetHistory( IN PHASH_KEY pKey, IN PVOID pEntryContext, PUNICODE_STRING pDirectoryName ); PDEVICE_OBJECT SrGetVolumeDevice ( PFILE_OBJECT pFileObject ); NTSTATUS SrSetFileSecurity ( IN HANDLE FileHandle, IN SR_ACL_TYPE AclType ); NTSTATUS SrGetVolumeGuid ( IN PUNICODE_STRING pVolumeName, OUT PWCHAR pVolumeGuid ); NTSTATUS SrAllocateFileNameBuffer ( IN ULONG TokenLength, OUT PUNICODE_STRING * ppBuffer ); VOID SrFreeFileNameBuffer ( IN PUNICODE_STRING pBuffer ); NTSTATUS SrGetNumberOfLinks ( IN PDEVICE_OBJECT NextDeviceObject, IN PFILE_OBJECT FileObject, OUT ULONG * pNumberOfLinks ); NTSTATUS SrCheckVolume ( IN PSR_DEVICE_EXTENSION pExtension, IN BOOLEAN ForceCheck ); NTSTATUS SrCheckForRestoreLocation ( IN PSR_DEVICE_EXTENSION pExtension ); NTSTATUS SrGetMountVolume ( IN PFILE_OBJECT pFileObject, OUT PUNICODE_STRING * ppMountVolume ); NTSTATUS SrCheckFreeDiskSpace ( IN HANDLE FileHandle, IN PUNICODE_STRING pVolumeName OPTIONAL ); NTSTATUS SrSetSecurityObjectAsSystem ( IN HANDLE Handle, IN SECURITY_INFORMATION SecurityInformation, IN PSECURITY_DESCRIPTOR SecurityDescriptor ); VOID SrSetSecurityObjectAsSystemWorker ( IN PSR_WORK_ITEM pWorkItem ); NTSTATUS SrCheckForMountsInPath( IN PSR_DEVICE_EXTENSION pExtension, IN PFILE_OBJECT pFileObject, OUT BOOLEAN * pMountInPath ); NTSTATUS SrGetShortFileName ( IN PSR_DEVICE_EXTENSION pExtension, IN PFILE_OBJECT pFileObject, OUT PUNICODE_STRING pShortName ); #endif // _FILELIST_H_