|
|
/*++
Copyright (c) 1991-1999 Microsoft Corporation
Module Name:
ntdskreg.h
Abstract:
This file contains disk registry data structures.
Authors:
mglass bobri
Notes:
Revision History:
--*/
#ifndef _NTDSKREG_
#define _NTDSKREG_
#if _MSC_VER > 1000
#pragma once
#endif
#ifdef __cplusplus
extern "C" { #endif
//
// 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.
//
// Note that SyncRedundantCopy should NEVER be seen by anything other
// than ft itself.
//
typedef enum _FT_PARTITION_STATE { Healthy, Orphaned, Regenerating, Initializing, SyncRedundantCopy } 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 );
#ifdef __cplusplus
} #endif
#endif // _NTDSKREG_
|