ReactOS 0.4.16-dev-329-g9223134
cddata.h
Go to the documentation of this file.
1/*++
2
3Copyright (c) 1989-2000 Microsoft Corporation
4
5Module Name:
6
7 CdData.c
8
9Abstract:
10
11 This module declares the global data used by the Cdfs file system.
12
13
14--*/
15
16#ifndef _CDDATA_
17#define _CDDATA_
18
19//
20// Global data structures
21//
22
23extern CD_DATA CdData;
25
26//
27// Global constants
28//
29
30//
31// This is the number of times a mounted Vcb will be referenced on behalf
32// of the system. The counts include the following references.
33//
34// 1 reference - shows the volume is mounted
35// 1 reference - 1 for VolumeDasdFcb.
36// 2 references - 1 for RootIndexFcb, 1 for internal stream.
37// 2 references - 1 for PathTableFcb, 1 for internal stream.
38//
39// For user references we add one for the reference in each of the internal
40// Fcb's.
41//
42
43#define CDFS_RESIDUAL_REFERENCE (6)
44#define CDFS_RESIDUAL_USER_REFERENCE (3)
45
46//
47// Reserved directory strings
48//
49
52
54
55//
56// Volume descriptor identifier strings.
57//
58
59extern CHAR CdHsgId[];
60extern CHAR CdIsoId[];
61extern CHAR CdXaId[];
62
63//
64// Volume label for audio disks.
65//
66
67extern WCHAR CdAudioLabel[];
69
70//
71// Pseudo file names for audio disks.
72//
73
74extern CHAR CdAudioFileName[];
79
80#define AUDIO_NAME_ONES_OFFSET (6)
81#define AUDIO_NAME_TENS_OFFSET (5)
82
83//
84// Escape sequences for mounting Unicode volumes.
85//
86
87extern PCHAR CdJolietEscape[];
88
89//
90// Hardcoded header for RIFF files.
91//
92
93extern LONG CdXAFileHeader[];
94extern LONG CdAudioPlayHeader[];
96
97#ifdef CDFS_TELEMETRY_DATA
98
99//
100// Globals for Telemetry data.
101//
102
103extern CDFS_TELEMETRY_DATA_CONTEXT CdTelemetryData;
104
105#endif // CDFS_TELEMETRY_DATA
106
107//
108// The following assertion macros ensure that the indicated structure
109// is valid
110//
111// ASSERT_STRUCT( _In_ PVOID Struct, _In_ CSHORT NodeType );
112// ASSERT_OPTIONAL_STRUCT( _In_opt_ PVOID Struct, _In_ CSHORT NodeType );
113//
114// ASSERT_VCB( _In_ PVCB Vcb );
115// ASSERT_OPTIONAL_VCB( _In_opt_ PVCB Vcb );
116//
117// ASSERT_FCB( _In_ PFCB Fcb );
118// ASSERT_OPTIONAL_FCB( _In_opt_ PFCB Fcb );
119//
120// ASSERT_FCB_NONPAGED( _In_ PFCB_NONPAGED FcbNonpaged );
121// ASSERT_OPTIONAL_FCB( _In_opt_ PFCB_NONPAGED FcbNonpaged );
122//
123// ASSERT_CCB( _In_ PSCB Ccb );
124// ASSERT_OPTIONAL_CCB( _In_opt_ PSCB Ccb );
125//
126// ASSERT_IRP_CONTEXT( _In_ PIRP_CONTEXT IrpContext );
127// ASSERT_OPTIONAL_IRP_CONTEXT( _In_opt_ PIRP_CONTEXT IrpContext );
128//
129// ASSERT_IRP( _In_ PIRP Irp );
130// ASSERT_OPTIONAL_IRP( _In_opt_ PIRP Irp );
131//
132// ASSERT_FILE_OBJECT( _In_ PFILE_OBJECT FileObject );
133// ASSERT_OPTIONAL_FILE_OBJECT( _In_opt_ PFILE_OBJECT FileObject );
134//
135// The following macros are used to check the current thread owns
136// the indicated resource
137//
138// ASSERT_EXCLUSIVE_RESOURCE( _In_ PERESOURCE Resource );
139//
140// ASSERT_SHARED_RESOURCE( _In_ PERESOURCE Resource );
141//
142// ASSERT_RESOURCE_NOT_MINE( _In_ PERESOURCE Resource );
143//
144// The following macros are used to check whether the current thread
145// owns the resoures in the given structures.
146//
147// ASSERT_EXCLUSIVE_CDDATA
148//
149// ASSERT_EXCLUSIVE_VCB( _In_ PVCB Vcb );
150//
151// ASSERT_SHARED_VCB( _In_ PVCB Vcb );
152//
153// ASSERT_EXCLUSIVE_FCB( _In_ PFCB Fcb );
154//
155// ASSERT_SHARED_FCB( _In_ PFCB Fcb );
156//
157// ASSERT_EXCLUSIVE_FILE( _In_ PFCB Fcb );
158//
159// ASSERT_SHARED_FILE( _In_ PFCB Fcb );
160//
161// ASSERT_LOCKED_VCB( _In_ PVCB Vcb );
162//
163// ASSERT_NOT_LOCKED_VCB( _In_ PVCB Vcb );
164//
165// ASSERT_LOCKED_FCB( _In_ PFCB Fcb );
166//
167// ASSERT_NOT_LOCKED_FCB( _In_ PFCB Fcb );
168//
169
170//
171// Turn on the sanity checks if this is DBG or CD_FREE_ASSERTS
172//
173
174#if DBG
175#undef CD_SANITY
176//#define CD_SANITY
177#endif
178
179#ifdef CD_SANITY
180
181#define ASSERT_STRUCT(S,T) NT_ASSERT( SafeNodeType( S ) == (T) )
182#define ASSERT_OPTIONAL_STRUCT(S,T) NT_ASSERT( ((S) == NULL) || (SafeNodeType( S ) == (T)) )
183
184#define ASSERT_VCB(V) ASSERT_STRUCT( (V), CDFS_NTC_VCB )
185#define ASSERT_OPTIONAL_VCB(V) ASSERT_OPTIONAL_STRUCT( (V), CDFS_NTC_VCB )
186
187#define ASSERT_FCB(F) \
188 NT_ASSERT( (SafeNodeType( F ) == CDFS_NTC_FCB_DATA ) || \
189 (SafeNodeType( F ) == CDFS_NTC_FCB_INDEX ) || \
190 (SafeNodeType( F ) == CDFS_NTC_FCB_PATH_TABLE ) )
191
192#define ASSERT_OPTIONAL_FCB(F) \
193 NT_ASSERT( ((F) == NULL) || \
194 (SafeNodeType( F ) == CDFS_NTC_FCB_DATA ) || \
195 (SafeNodeType( F ) == CDFS_NTC_FCB_INDEX ) || \
196 (SafeNodeType( F ) == CDFS_NTC_FCB_PATH_TABLE ) )
197
198#define ASSERT_FCB_NONPAGED(FN) ASSERT_STRUCT( (FN), CDFS_NTC_FCB_NONPAGED )
199#define ASSERT_OPTIONAL_FCB_NONPAGED(FN) ASSERT_OPTIONAL_STRUCT( (FN), CDFS_NTC_FCB_NONPAGED )
200
201#define ASSERT_CCB(C) ASSERT_STRUCT( (C), CDFS_NTC_CCB )
202#define ASSERT_OPTIONAL_CCB(C) ASSERT_OPTIONAL_STRUCT( (C), CDFS_NTC_CCB )
203
204#define ASSERT_IRP_CONTEXT(IC) ASSERT_STRUCT( (IC), CDFS_NTC_IRP_CONTEXT )
205#define ASSERT_OPTIONAL_IRP_CONTEXT(IC) ASSERT_OPTIONAL_STRUCT( (IC), CDFS_NTC_IRP_CONTEXT )
206
207#define ASSERT_IRP(I) ASSERT_STRUCT( (I), IO_TYPE_IRP )
208#define ASSERT_OPTIONAL_IRP(I) ASSERT_OPTIONAL_STRUCT( (I), IO_TYPE_IRP )
209
210#define ASSERT_FILE_OBJECT(FO) ASSERT_STRUCT( (FO), IO_TYPE_FILE )
211#define ASSERT_OPTIONAL_FILE_OBJECT(FO) ASSERT_OPTIONAL_STRUCT( (FO), IO_TYPE_FILE )
212
213#define ASSERT_EXCLUSIVE_RESOURCE(R) NT_ASSERT( ExIsResourceAcquiredExclusiveLite( R ))
214
215#define ASSERT_SHARED_RESOURCE(R) NT_ASSERT( ExIsResourceAcquiredSharedLite( R ))
216
217#define ASSERT_RESOURCE_NOT_MINE(R) NT_ASSERT( !ExIsResourceAcquiredSharedLite( R ))
218
219#define ASSERT_EXCLUSIVE_CDDATA NT_ASSERT( ExIsResourceAcquiredExclusiveLite( &CdData.DataResource ))
220#define ASSERT_EXCLUSIVE_VCB(V) NT_ASSERT( ExIsResourceAcquiredExclusiveLite( &(V)->VcbResource ))
221#define ASSERT_SHARED_VCB(V) NT_ASSERT( ExIsResourceAcquiredSharedLite( &(V)->VcbResource ))
222
223#define ASSERT_EXCLUSIVE_FCB(F) NT_ASSERT( ExIsResourceAcquiredExclusiveLite( &(F)->FcbNonpaged->FcbResource ))
224#define ASSERT_SHARED_FCB(F) NT_ASSERT( ExIsResourceAcquiredSharedLite( &(F)->FcbNonpaged->FcbResource ))
225
226#define ASSERT_EXCLUSIVE_FILE(F) NT_ASSERT( ExIsResourceAcquiredExclusiveLite( (F)->Resource ))
227#define ASSERT_SHARED_FILE(F) NT_ASSERT( ExIsResourceAcquiredSharedLite( (F)->Resource ))
228
229#define ASSERT_LOCKED_VCB(V) NT_ASSERT( (V)->VcbLockThread == PsGetCurrentThread() )
230#define ASSERT_NOT_LOCKED_VCB(V) NT_ASSERT( (V)->VcbLockThread != PsGetCurrentThread() )
231
232#define ASSERT_LOCKED_FCB(F) NT_ASSERT( !FlagOn( (F)->FcbState, FCB_STATE_IN_FCB_TABLE) || ((F)->FcbLockThread == PsGetCurrentThread()))
233#define ASSERT_NOT_LOCKED_FCB(F) NT_ASSERT( (F)->FcbLockThread != PsGetCurrentThread() )
234
235#else
236
237#define DebugBreakOnStatus(S) { NOTHING; }
238
239#define ASSERT_STRUCT(S,T) { NOTHING; }
240#define ASSERT_OPTIONAL_STRUCT(S,T) { NOTHING; }
241#define ASSERT_VCB(V) { NOTHING; }
242#define ASSERT_OPTIONAL_VCB(V) { NOTHING; }
243#define ASSERT_FCB(F) { NOTHING; }
244#define ASSERT_FCB_NONPAGED(FN) { NOTHING; }
245#define ASSERT_OPTIONAL_FCB(FN) { NOTHING; }
246#define ASSERT_CCB(C) { NOTHING; }
247#define ASSERT_OPTIONAL_CCB(C) { NOTHING; }
248#define ASSERT_IRP_CONTEXT(IC) { NOTHING; }
249#define ASSERT_OPTIONAL_IRP_CONTEXT(IC) { NOTHING; }
250#define ASSERT_IRP(I) { NOTHING; }
251#define ASSERT_OPTIONAL_IRP(I) { NOTHING; }
252#define ASSERT_FILE_OBJECT(FO) { NOTHING; }
253#define ASSERT_OPTIONAL_FILE_OBJECT(FO) { NOTHING; }
254#define ASSERT_EXCLUSIVE_RESOURCE(R) { NOTHING; }
255#define ASSERT_SHARED_RESOURCE(R) { NOTHING; }
256#define ASSERT_RESOURCE_NOT_MINE(R) { NOTHING; }
257#define ASSERT_EXCLUSIVE_CDDATA { NOTHING; }
258#define ASSERT_EXCLUSIVE_VCB(V) { NOTHING; }
259#define ASSERT_SHARED_VCB(V) { NOTHING; }
260#define ASSERT_EXCLUSIVE_FCB(F) { NOTHING; }
261#define ASSERT_SHARED_FCB(F) { NOTHING; }
262#define ASSERT_EXCLUSIVE_FILE(F) { NOTHING; }
263#define ASSERT_SHARED_FILE(F) { NOTHING; }
264#define ASSERT_LOCKED_VCB(V) { NOTHING; }
265#define ASSERT_NOT_LOCKED_VCB(V) { NOTHING; }
266#define ASSERT_LOCKED_FCB(F) { NOTHING; }
267#define ASSERT_NOT_LOCKED_FCB(F) { NOTHING; }
268
269#endif
270
271#endif // _CDDATA_
272
LONG CdAudioPlayHeader[]
Definition: cddata.c:102
LONG CdXAAudioPhileHeader[]
Definition: cddata.c:136
USHORT CdAudioLabelLength
Definition: cddata.c:70
WCHAR CdAudioLabel[]
Definition: cddata.c:69
UCHAR CdAudioFileNameLength
Definition: cddata.c:77
WCHAR CdUnicodeSelfArray[]
Definition: cddata.c:49
WCHAR CdUnicodeParentArray[]
Definition: cddata.c:50
CHAR CdHsgId[]
Definition: cddata.c:61
CHAR CdAudioFileName[]
Definition: cddata.c:76
ULONG CdAudioDirentsPerSector
Definition: cddata.c:79
LONG CdXAFileHeader[]
Definition: cddata.c:165
ULONG CdAudioDirentSize
Definition: cddata.c:78
CHAR CdIsoId[]
Definition: cddata.c:62
CD_DATA CdData
Definition: cddata.c:42
PCHAR CdJolietEscape[]
Definition: cddata.c:86
FAST_IO_DISPATCH CdFastIoDispatch
Definition: cddata.c:43
UNICODE_STRING CdUnicodeDirectoryNames[]
Definition: cddata.c:52
CHAR CdXaId[]
Definition: cddata.c:63
ULONG CdAudioSystemUseOffset
Definition: cddata.c:80
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
unsigned char UCHAR
Definition: xmlstorage.h:181
__wchar_t WCHAR
Definition: xmlstorage.h:180
char CHAR
Definition: xmlstorage.h:175