/*++ Copyright (c) Microsoft Corporation. All rights reserved. Module Name: ntddsnap.h Abstract: This header file defines the public interface for the volume snapshot driver. Author: Norbert P. Kusters (norbertk) 30-July-1999 Notes: Revision History: Adi Oltean (aoltean) 08-May-2001 - Added Application Info GUID for Client accessible snapshots --*/ #ifndef _NTDDSNAP_ #define _NTDDSNAP_ #define VOLSNAPCONTROLTYPE ((ULONG) 'S') // ntifs // // The following IOCTLs are intended for proper volumes. // #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) // ntifs #define IOCTL_VOLSNAP_RELEASE_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_VOLSNAP_PREPARE_FOR_SNAPSHOT CTL_CODE(VOLSNAPCONTROLTYPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_VOLSNAP_ABORT_PREPARED_SNAPSHOT CTL_CODE(VOLSNAPCONTROLTYPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_VOLSNAP_COMMIT_SNAPSHOT CTL_CODE(VOLSNAPCONTROLTYPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_VOLSNAP_END_COMMIT_SNAPSHOT CTL_CODE(VOLSNAPCONTROLTYPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_VOLSNAP_QUERY_NAMES_OF_SNAPSHOTS CTL_CODE(VOLSNAPCONTROLTYPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_VOLSNAP_CLEAR_DIFF_AREA CTL_CODE(VOLSNAPCONTROLTYPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_VOLSNAP_ADD_VOLUME_TO_DIFF_AREA CTL_CODE(VOLSNAPCONTROLTYPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_VOLSNAP_QUERY_DIFF_AREA CTL_CODE(VOLSNAPCONTROLTYPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_VOLSNAP_SET_MAX_DIFF_AREA_SIZE CTL_CODE(VOLSNAPCONTROLTYPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_VOLSNAP_QUERY_DIFF_AREA_SIZES CTL_CODE(VOLSNAPCONTROLTYPE, 11, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_VOLSNAP_DELETE_OLDEST_SNAPSHOT CTL_CODE(VOLSNAPCONTROLTYPE, 12, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_VOLSNAP_AUTO_CLEANUP CTL_CODE(VOLSNAPCONTROLTYPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_VOLSNAP_DELETE_SNAPSHOT CTL_CODE(VOLSNAPCONTROLTYPE, 14, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) // // The following IOCTLs are intended for volume snapshots. // #define IOCTL_VOLSNAP_QUERY_ORIGINAL_VOLUME_NAME CTL_CODE(VOLSNAPCONTROLTYPE, 100, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_VOLSNAP_QUERY_CONFIG_INFO CTL_CODE(VOLSNAPCONTROLTYPE, 101, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_VOLSNAP_SET_APPLICATION_INFO CTL_CODE(VOLSNAPCONTROLTYPE, 102, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_VOLSNAP_QUERY_APPLICATION_INFO CTL_CODE(VOLSNAPCONTROLTYPE, 103, METHOD_BUFFERED, FILE_READ_ACCESS) // // Input buffer for IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES. // typedef struct _VOLSNAP_FLUSH_AND_HOLD_INPUT { GUID InstanceId; ULONG NumberOfVolumesToFlush; USHORT SecondsToHoldFileSystemsTimeout; // 60 seconds recommended. USHORT SecondsToHoldIrpsTimeout; // 10 seconds recommended. } VOLSNAP_FLUSH_AND_HOLD_INPUT, *PVOLSNAP_FLUSH_AND_HOLD_INPUT; // // Input buffer for IOCTL_VOLSNAP_PREPARE_FOR_SNAPSHOT. // #define VOLSNAP_ATTRIBUTE_PERSISTENT (0x1) #define VOLSNAP_ALL_ATTRIBUTES (0x1) typedef struct _VOLSNAP_PREPARE_INFO { ULONG Attributes; ULONG Reserved; // Must be 0. LONGLONG InitialDiffAreaAllocation; // 100 MB recommended. } VOLSNAP_PREPARE_INFO, *PVOLSNAP_PREPARE_INFO; // // Output buffer for IOCTL_VOLSNAP_END_COMMIT_SNAPSHOT. // Input buffer for IOCTL_VOLSNAP_ADD_VOLUME_TO_DIFF_AREA. // Output buffer for IOCTL_VOLSNAP_QUERY_ORIGINAL_VOLUME_NAME. // Input buffer for IOCTL_VOLSNAP_DELETE_SNAPSHOT. // typedef struct _VOLSNAP_NAME { USHORT NameLength; WCHAR Name[1]; } VOLSNAP_NAME, *PVOLSNAP_NAME; // // Input buffer for IOCTL_VOLSNAP_SET_DIFF_AREA. // Output buffer for IOCTL_VOLSNAP_QUERY_NAMES_OF_SNAPSHOTS and // IOCTL_VOLSNAP_QUERY_DIFF_AREA. // typedef struct _VOLSNAP_NAMES { ULONG MultiSzLength; WCHAR Names[1]; } VOLSNAP_NAMES, *PVOLSNAP_NAMES; // // Output buffer for IOCTL_VOLSNAP_QUERY_DIFF_AREA_SIZES. // Input buffer for IOCTL_VOLSNAP_SET_MAX_DIFF_AREA_SIZE. // typedef struct _VOLSNAP_DIFF_AREA_SIZES { LONGLONG UsedVolumeSpace; // This value is ignored on a SET call. LONGLONG AllocatedVolumeSpace; LONGLONG MaximumVolumeSpace; // A value of 0 indicates no maximum. } VOLSNAP_DIFF_AREA_SIZES, *PVOLSNAP_DIFF_AREA_SIZES; // // Output buffer for IOCTL_VOLSNAP_QUERY_CONFIG_INFO. // typedef struct _VOLSNAP_CONFIG_INFO { ULONG Attributes; ULONG Reserved; LARGE_INTEGER SnapshotCreationTime; } VOLSNAP_CONFIG_INFO, *PVOLSNAP_CONFIG_INFO; // // Input buffer for IOCTL_VOLSNAP_END_COMMIT_SNAPSHOT. // Input buffer for IOCTL_VOLSNAP_SET_APPLICATION_INFO. // Output buffer for IOCTL_VOLSNAP_QUERY_APPLICATION_INFO. // typedef struct _VOLSNAP_APPLICATION_INFO { ULONG InformationLength; UCHAR Information[1]; // // It is highly recommended that the first 16 bytes from the // Application Info should be a unique GUID indentifying the // unique structure layout of the subsequent Application Info. // } VOLSNAP_APPLICATION_INFO, *PVOLSNAP_APPLICATION_INFO; #ifdef DEFINE_GUID // // This GUID denotes the first 16 bytes from the Application // Info structure associated with Client accessible snapshots. // // {E5DE7D45-49F2-40a4-817C-7DC82B72587F} DEFINE_GUID(VOLSNAP_APPINFO_GUID_CLIENT_ACCESSIBLE, 0xe5de7d45, 0x49f2, 0x40a4, 0x81, 0x7c, 0x7d, 0xc8, 0x2b, 0x72, 0x58, 0x7f); #endif // DEFINE_GUID #endif