windows-nt/Source/XPSP1/NT/public/sdk/inc/ntddft.h

226 lines
5 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
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_