windows-nt/Source/XPSP1/NT/public/ddk/inc/ntdskreg.h
2020-09-26 16:20:57 +08:00

272 lines
4.5 KiB
C

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