1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
|
/*++
Copyright (c) 1991-1993 Microsoft Corporation
Module Name:
ntddft.h
Abstract:
This file contains NTFT definitions and prototypes.
Authors:
Bob Rinne
Mike Glass
Notes:
Revision History:
--*/
#include <ntdskreg.h>
//
// 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_ANY_ACCESS)
#define FT_PRIMARY_READ CTL_CODE(FTTYPE, 5, METHOD_OUT_DIRECT, FILE_ANY_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)
//
// 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"
|