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