2025-04-27 07:49:33 -04:00

320 lines
6.2 KiB
C

/*++
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_