272 lines
4.5 KiB
C
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_
|