blob: 1323f78dd980f5658b9685be445c76f4718d3438 (
plain) (
blame)
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
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
eaheader.hxx
Abstract:
This class models the header and tables of the EA file.
Author:
Norbert P. Kusters (norbertk) 28-Nov-90
Notes:
Luckily all the structures are well aligned.
--*/
#if !defined(EA_HEADER_DEFN)
#define EA_HEADER_DEFN
#include "cluster.hxx"
#if defined ( _AUTOCHECK_ )
#define UFAT_EXPORT
#elif defined ( _UFAT_MEMBER_ )
#define UFAT_EXPORT __declspec(dllexport)
#else
#define UFAT_EXPORT __declspec(dllimport)
#endif
//
// Forward references
//
DECLARE_CLASS( EA_HEADER );
DECLARE_CLASS( FAT );
DECLARE_CLASS( FAT_SA );
DECLARE_CLASS( LOG_IO_DP_DRIVE );
DECLARE_CLASS( MEM );
struct _EA_FILE_HEADER {
USHORT Signature;
USHORT FormatType;
USHORT LogType;
USHORT Cluster1;
USHORT NewCValue1;
USHORT Cluster2;
USHORT NewCValue2;
USHORT Cluster3;
USHORT NewCValue3;
USHORT Handle;
USHORT NewHOffset;
UCHAR Reserved[10];
};
DEFINE_TYPE( struct _EA_FILE_HEADER, EA_FILE_HEADER );
CONST BaseTableSize = 240;
struct _EA_MAP_TBL {
USHORT BaseTab[BaseTableSize];
USHORT OffTab[1];
};
DEFINE_TYPE( struct _EA_MAP_TBL, EA_MAP_TBL );
struct _EA_HEADER_AND_TABLE {
EA_FILE_HEADER Header;
EA_MAP_TBL Table;
};
DEFINE_TYPE( struct _EA_HEADER_AND_TABLE, EA_HEADER_AND_TABLE );
CONST USHORT HeaderSignature = 0x4445;
CONST USHORT CurrentFormatType = 0;
CONST USHORT CurrentLogType = 0;
CONST USHORT Bit15 = 0x8000;
CONST USHORT InvalidHandle = 0xFFFF;
class EA_HEADER : public CLUSTER_CHAIN {
public:
UFAT_EXPORT
DECLARE_CONSTRUCTOR( EA_HEADER );
VIRTUAL
UFAT_EXPORT
~EA_HEADER(
);
NONVIRTUAL
UFAT_EXPORT
BOOLEAN
Initialize(
IN OUT PMEM Mem,
IN OUT PLOG_IO_DP_DRIVE Drive,
IN PFAT_SA FatSuperArea,
IN PCFAT Fat,
IN USHORT StartingCluster,
IN USHORT LengthOfChain DEFAULT 0
);
NONVIRTUAL
PEA_FILE_HEADER
GetEaFileHeader(
);
NONVIRTUAL
PEA_MAP_TBL
GetMapTable(
);
NONVIRTUAL
LONG
QueryOffTabSize(
) CONST;
NONVIRTUAL
UFAT_EXPORT
USHORT
QueryEaSetClusterNumber(
IN USHORT Handle
) CONST;
private:
NONVIRTUAL
VOID
Construct (
);
NONVIRTUAL
VOID
Destroy(
);
PEA_HEADER_AND_TABLE _ht;
LONG _off_tab_size;
};
INLINE
PEA_FILE_HEADER
EA_HEADER::GetEaFileHeader(
)
/*++
Routine Description:
This routine returns a pointer to the EA file header. Dereferencing
this pointer will allow the client to examine and modify the
EA file header. These changes will take effect on disk when the
client issues a 'Write' command.
Arguments:
None.
Return Value:
A pointer to the EA file header.
--*/
{
return _ht ? &_ht->Header : NULL;
}
INLINE
PEA_MAP_TBL
EA_HEADER::GetMapTable(
)
/*++
Routine Description:
This routine returns a pointer to the EA mapping table. Dereferencing
this pointer will allow the client to examine and modify the
EA mapping table. These changes will take effect on disk when the
client issues a 'Write' command.
Arguments:
None.
Return Value:
A pointer to the EA mapping table.
--*/
{
return _ht ? &_ht->Table : NULL;
}
INLINE
LONG
EA_HEADER::QueryOffTabSize(
) CONST
/*++
Routine Description:
Computes the number of entries in the offset table.
Arguments:
None.
Return Value:
Returns the number of entries in the offset table.
--*/
{
return _off_tab_size;
}
#endif // EA_HEADER_DEFN
|