226 lines
5 KiB
C
226 lines
5 KiB
C
/*++
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
ntddft.h
|
|
|
|
Abstract:
|
|
|
|
This file contains NTFT definitions and prototypes.
|
|
|
|
Authors:
|
|
|
|
Bob Rinne
|
|
Mike Glass
|
|
|
|
Notes:
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _NTDDFT_
|
|
#define _NTDDFT_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
#include <ntdskreg.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// Device Control Codes
|
|
//
|
|
|
|
#define FTTYPE ((ULONG)'f')
|
|
|
|
#define FT_INITIALIZE_SET CTL_CODE(FTTYPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FT_REGENERATE CTL_CODE(FTTYPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FT_CONFIGURE CTL_CODE(FTTYPE, 2, METHOD_NEITHER, FILE_ANY_ACCESS)
|
|
#define FT_VERIFY CTL_CODE(FTTYPE, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FT_SECONDARY_READ CTL_CODE(FTTYPE, 4, METHOD_OUT_DIRECT, FILE_READ_ACCESS)
|
|
#define FT_PRIMARY_READ CTL_CODE(FTTYPE, 5, METHOD_OUT_DIRECT, FILE_READ_ACCESS)
|
|
#define FT_BALANCED_READ_MODE CTL_CODE(FTTYPE, 6, METHOD_NEITHER, FILE_ANY_ACCESS)
|
|
#define FT_SYNC_REDUNDANT_COPY CTL_CODE(FTTYPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FT_SEQUENTIAL_WRITE_MODE CTL_CODE(FTTYPE, 8, METHOD_NEITHER, FILE_ANY_ACCESS)
|
|
#define FT_PARALLEL_WRITE_MODE CTL_CODE(FTTYPE, 9, METHOD_NEITHER, FILE_ANY_ACCESS)
|
|
#define FT_QUERY_SET_STATE CTL_CODE(FTTYPE,10, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FT_CLUSTER_SET_MEMBER_STATE CTL_CODE(FTTYPE,11, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FT_CLUSTER_GET_MEMBER_STATE CTL_CODE(FTTYPE,12, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
//
|
|
// Used as input parameters to the SECONDARY and PRIMARY read device controls
|
|
//
|
|
|
|
typedef struct _FT_SPECIAL_READ {
|
|
LARGE_INTEGER ByteOffset;
|
|
ULONG Length;
|
|
} FT_SPECIAL_READ, *PFT_SPECIAL_READ;
|
|
|
|
//
|
|
// Used to find a partition in the system.
|
|
//
|
|
|
|
typedef struct _FT_CONTROL_BLOCK {
|
|
USHORT Type;
|
|
USHORT FtGroup;
|
|
} FT_CONTROL_BLOCK, *PFT_CONTROL_BLOCK;
|
|
|
|
//
|
|
// FT SYNC primary from secondary IOCTL
|
|
//
|
|
|
|
typedef struct _FT_SYNC_INFORMATION {
|
|
LARGE_INTEGER ByteOffset;
|
|
LARGE_INTEGER ByteCount;
|
|
} FT_SYNC_INFORMATION, *PFT_SYNC_INFORMATION;
|
|
|
|
//
|
|
// Define for registry information.
|
|
//
|
|
|
|
#define DISK_REGISTRY_KEY "\\REGISTRY\\MACHINE\\SYSTEM\\DISK"
|
|
|
|
//
|
|
// Define for value name for registry information.
|
|
//
|
|
|
|
#define DISK_REGISTRY_VALUE "Information"
|
|
|
|
//
|
|
// Structures for config registry.
|
|
//
|
|
|
|
//
|
|
// The header for the registry information structure.
|
|
//
|
|
|
|
#include "pshpack4.h"
|
|
typedef struct _DISK_CONFIG_HEADER {
|
|
|
|
ULONG Version;
|
|
ULONG CheckSum;
|
|
BOOLEAN DirtyShutdown;
|
|
UCHAR Reserved[3];
|
|
ULONG DiskInformationOffset;
|
|
ULONG DiskInformationSize;
|
|
ULONG FtInformationOffset;
|
|
ULONG FtInformationSize;
|
|
ULONG FtStripeWidth;
|
|
ULONG FtPoolSize;
|
|
ULONG NameOffset; // Reserved for future.
|
|
ULONG NameSize; // Reserved for future.
|
|
|
|
} DISK_CONFIG_HEADER, *PDISK_CONFIG_HEADER;
|
|
|
|
#define DISK_INFORMATION_VERSION 0x03
|
|
|
|
//
|
|
// FT_STATE is an enumerated field that describes the state of the FT
|
|
// volume as a whole.
|
|
//
|
|
|
|
typedef enum _FT_STATE {
|
|
|
|
FtStateOk, // set is complete
|
|
FtHasOrphan, // set is running, but one member is turned off
|
|
FtDisabled, // set has been turned off - it cannot be used
|
|
FtRegenerating, // member of set is being generated from check data
|
|
FtInitializing, // set is being initialized
|
|
FtCheckParity, // check data is not in sync
|
|
FtNoCheckData // parity has not been initialized
|
|
|
|
} FT_STATE, *PFT_STATE;
|
|
|
|
//
|
|
// State information for an FT set. The partition state enum is used to
|
|
// specify the state for the complete set.
|
|
//
|
|
|
|
typedef struct _FT_SET_INFORMATION {
|
|
ULONG NumberOfMembers;
|
|
FT_TYPE Type;
|
|
FT_STATE SetState;
|
|
} FT_SET_INFORMATION, *PFT_SET_INFORMATION;
|
|
|
|
//
|
|
// The description information for an FT component member.
|
|
//
|
|
|
|
typedef struct _FT_MEMBER_DESCRIPTION {
|
|
|
|
USHORT State;
|
|
USHORT ReservedShort;
|
|
ULONG Signature;
|
|
ULONG OffsetToPartitionInfo;
|
|
ULONG LogicalNumber;
|
|
|
|
} FT_MEMBER_DESCRIPTION, *PFT_MEMBER_DESCRIPTION;
|
|
|
|
//
|
|
// Definitions for FT volume state.
|
|
//
|
|
|
|
//
|
|
// When this state is set, FT assumes at boot time that the volume
|
|
// must be initialized and starts a system thread of execution to
|
|
// perform the initialization work.
|
|
//
|
|
|
|
#define FT_VOLUME_INITIALIZING 0x0001
|
|
#define FT_VOLUME_REGENERATING 0x0002
|
|
|
|
//
|
|
// The description information for an FT component.
|
|
//
|
|
|
|
typedef struct _FT_DESCRIPTION {
|
|
|
|
USHORT NumberOfMembers;
|
|
USHORT Type;
|
|
ULONG Reserved;
|
|
|
|
//
|
|
// The volume state will indicate which member is being regenerated
|
|
//
|
|
|
|
FT_STATE FtVolumeState;
|
|
|
|
//
|
|
// Array for NumberOfMembers
|
|
//
|
|
|
|
FT_MEMBER_DESCRIPTION FtMemberDescription[1];
|
|
|
|
} FT_DESCRIPTION, *PFT_DESCRIPTION;
|
|
|
|
//
|
|
// Header for all FT information.
|
|
//
|
|
|
|
typedef struct _FT_REGISTRY {
|
|
|
|
USHORT NumberOfComponents;
|
|
USHORT ReservedShort;
|
|
|
|
//
|
|
// An array of NumberOfComponents
|
|
//
|
|
|
|
FT_DESCRIPTION FtDescription[1];
|
|
|
|
} FT_REGISTRY, *PFT_REGISTRY;
|
|
#include "poppack.h"
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // _NTDDFT_
|