320 lines
6.2 KiB
C
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_
|