diff options
Diffstat (limited to 'public/sdk/inc/ntdskreg.h')
-rw-r--r-- | public/sdk/inc/ntdskreg.h | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/public/sdk/inc/ntdskreg.h b/public/sdk/inc/ntdskreg.h new file mode 100644 index 000000000..20b0ddcda --- /dev/null +++ b/public/sdk/inc/ntdskreg.h @@ -0,0 +1,257 @@ +/*++ + +Copyright (c) 1991-1993 Microsoft Corporation + +Module Name: + + ntdskreg.h + +Abstract: + + This file contains disk registry data structures. + +Authors: + + mglass + bobri + +Notes: + +Revision History: + +--*/ + +#ifndef _NTDSKREG_ +#define _NTDSKREG_ + + +// +// Component types for FT members. If a disk partition +// is not a part of an FT component then it is stamped +// as "NotAnFtMember". +// + +typedef enum { + Mirror, + Stripe, + StripeWithParity, + VolumeSet, + NotAnFtMember, + WholeDisk +} FT_TYPE; + +// +// FT_PARTITION_STATE is an enumerated type that describes the state of an +// NTFT member. +// Up to one member can be 'orphaned', that is missing or out of sync with +// the other members. The orphaned member will remain orphaned until recovery +// action is commenced in DISKMAN.EXE. +// When READs are directed at an orphaned member, the data is returned from +// the redundant copy. WRITEs go to the secondary members only. +// + +typedef enum _FT_PARTITION_STATE { + Healthy, + Orphaned, + Regenerating, + Initializing +} FT_PARTITION_STATE, *PFT_PARTITION_STATE; + +// +// The description of a partition on a disk. +// + +#include "pshpack4.h" +typedef struct _DISK_PARTITION { + + FT_TYPE FtType; + FT_PARTITION_STATE FtState; + LARGE_INTEGER StartingOffset; + LARGE_INTEGER Length; + LARGE_INTEGER FtLength; + ULONG ReservedTwoLongs[2]; + UCHAR DriveLetter; + BOOLEAN AssignDriveLetter; + USHORT LogicalNumber; + USHORT FtGroup; + USHORT FtMember; + BOOLEAN Modified; + UCHAR ReservedChars[3]; + +} DISK_PARTITION, *PDISK_PARTITION; + +// +// The description of a disk. +// + +typedef struct _DISK_DESCRIPTION { + + USHORT NumberOfPartitions; + USHORT ReservedShort; + ULONG Signature; + + // + // An array for NumberOfPartitions + // + + DISK_PARTITION Partitions[1]; + +} DISK_DESCRIPTION, *PDISK_DESCRIPTION; + +// +// Header for all disk descriptions. +// + +typedef struct _DISK_REGISTRY { + + USHORT NumberOfDisks; + USHORT ReservedShort; + + // + // An array for NumberOfDisks. + // + + DISK_DESCRIPTION Disks[1]; + +} DISK_REGISTRY, *PDISK_REGISTRY; +#include "poppack.h" + +// +// Function prototypes. +// + + +// +// Set the current registry information. +// + +NTSTATUS +DiskRegistrySet( + IN PDISK_REGISTRY Buffer + ); + + +// +// Add a single disk to the registry. This disk is not a part of +// a Fault Tolerance volume. +// + +NTSTATUS +DiskRegistryAddNewDisk( + IN PDISK_DESCRIPTION Buffer + ); + +// +// Get the current registry information. +// A Buffer address == NULL indicates that the caller only wants. +// to know the size of the registry information. +// + +NTSTATUS +DiskRegistryGet( + OUT PDISK_REGISTRY Buffer, + OUT PULONG LengthReturned + ); + +// +// Determine if FT is installed and currently active in the system. +// + +BOOLEAN +FtInstalled( + ); + +// +// Cause an FT set to be initialized at the earliest possible moment. +// + +VOID +DiskRegistryInitializeSet( + IN USHORT FtType, + IN USHORT FtGroup + ); + +// +// Cause an FT set member to be regenerated at the earliest possible moment. +// + +VOID +DiskRegistryRegenerateSet( + IN USHORT FtType, + IN USHORT FtGroup, + IN USHORT FtMember + ); + +// +// Enable the FT driver. +// + +BOOLEAN +DiskRegistryEnableFt(); + +// +// Disable the FT driver. +// + +VOID +DiskRegistryDisableFt(); + +// +// Determine if the existing FT registry information requires the FT driver. +// + +BOOLEAN +DiskRegistryRequiresFt(); + +// +// Update drive letter assignment. +// + +BOOLEAN +DiskRegistryAssignDriveLetter( + ULONG Signature, + LARGE_INTEGER StartingOffset, + LARGE_INTEGER Length, + UCHAR DriveLetter + ); + +// +// Determine if DoubleSpace support is set to automount double space +// volumes on removable media. +// + +BOOLEAN +DiskRegistryAutomountCurrentState( + ); + +// +// Set the automount state for double space volumes on removable media. +// + +NTSTATUS +DiskRegistryDblSpaceRemovable( + IN BOOLEAN Automount + ); + +// +// Set the drive letter for space mount information in the registry. +// + +NTSTATUS +DiskRegistryAssignDblSpaceLetter( + IN PWSTR CvfName, + IN WCHAR DriveLetter + ); + +// +// Set up the registry information for CdRom drive letters. +// + +NTSTATUS +DiskRegistryAssignCdRomLetter( + IN PWSTR CdromName, + IN WCHAR DriveLetter + ); + +#endif // _NTDSKREG_ + |