Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygencdfs.h
Go to the documentation of this file.
00001 #ifndef CDFS_H 00002 #define CDFS_H 00003 00004 #include <ntifs.h> 00005 #include <ntddk.h> 00006 #include <ntddcdrm.h> 00007 00008 #define CDFS_BASIC_SECTOR 2048 00009 #define CDFS_PRIMARY_DESCRIPTOR_LOCATION 16 00010 #define BLOCKSIZE CDFS_BASIC_SECTOR 00011 #define CDFS_MAX_NAME_LEN 256 00012 00013 00014 /* Volume descriptor types (VdType) */ 00015 #define BOOT_VOLUME_DESCRIPTOR_TYPE 0 00016 #define PRIMARY_VOLUME_DESCRIPTOR_TYPE 1 00017 #define SUPPLEMENTARY_VOLUME_DESCRIPTOR_TYPE 2 00018 #define VOLUME_PARTITION_DESCRIPTOR_TYPE 3 00019 #define VOLUME_DESCRIPTOR_SET_TERMINATOR 255 00020 00021 #include <pshpack1.h> 00022 struct _DIR_RECORD 00023 { 00024 UCHAR RecordLength; // 1 00025 UCHAR ExtAttrRecordLength; // 2 00026 ULONG ExtentLocationL; // 3-6 00027 ULONG ExtentLocationM; // 7-10 00028 ULONG DataLengthL; // 11-14 00029 ULONG DataLengthM; // 15-18 00030 UCHAR Year; // 19 00031 UCHAR Month; // 20 00032 UCHAR Day; // 21 00033 UCHAR Hour; // 22 00034 UCHAR Minute; // 23 00035 UCHAR Second; // 24 00036 UCHAR TimeZone; // 25 00037 UCHAR FileFlags; // 26 00038 UCHAR FileUnitSize; // 27 00039 UCHAR InterleaveGapSize; // 28 00040 ULONG VolumeSequenceNumber; // 29-32 00041 UCHAR FileIdLength; // 33 00042 UCHAR FileId[1]; // 34 00043 }; 00044 #include <poppack.h> 00045 00046 typedef struct _DIR_RECORD DIR_RECORD, *PDIR_RECORD; 00047 00048 /* DIR_RECORD.FileFlags */ 00049 #define FILE_FLAG_HIDDEN 0x01 00050 #define FILE_FLAG_DIRECTORY 0x02 00051 #define FILE_FLAG_SYSTEM 0x04 00052 #define FILE_FLAG_READONLY 0x10 00053 00054 00055 /* Volume Descriptor header*/ 00056 #include <pshpack1.h> 00057 struct _VD_HEADER 00058 { 00059 UCHAR VdType; // 1 00060 UCHAR StandardId[5]; // 2-6 00061 UCHAR VdVersion; // 7 00062 }; 00063 00064 typedef struct _VD_HEADER VD_HEADER, *PVD_HEADER; 00065 00066 00067 00068 /* Primary Volume Descriptor */ 00069 struct _PVD 00070 { 00071 UCHAR VdType; // 1 00072 UCHAR StandardId[5]; // 2-6 00073 UCHAR VdVersion; // 7 00074 UCHAR unused0; // 8 00075 UCHAR SystemId[32]; // 9-40 00076 UCHAR VolumeId[32]; // 41-72 00077 UCHAR unused1[8]; // 73-80 00078 ULONG VolumeSpaceSizeL; // 81-84 00079 ULONG VolumeSpaceSizeM; // 85-88 00080 UCHAR unused2[32]; // 89-120 00081 ULONG VolumeSetSize; // 121-124 00082 ULONG VolumeSequenceNumber; // 125-128 00083 ULONG LogicalBlockSize; // 129-132 00084 ULONG PathTableSizeL; // 133-136 00085 ULONG PathTableSizeM; // 137-140 00086 ULONG LPathTablePos; // 141-144 00087 ULONG LOptPathTablePos; // 145-148 00088 ULONG MPathTablePos; // 149-152 00089 ULONG MOptPathTablePos; // 153-156 00090 DIR_RECORD RootDirRecord; // 157-190 00091 UCHAR VolumeSetIdentifier[128]; // 191-318 00092 UCHAR PublisherIdentifier[128]; // 319-446 00093 00094 /* more data ... */ 00095 00096 }; 00097 typedef struct _PVD PVD, *PPVD; 00098 00099 00100 /* Supplementary Volume Descriptor */ 00101 struct _SVD 00102 { 00103 UCHAR VdType; // 1 00104 UCHAR StandardId[5]; // 2-6 00105 UCHAR VdVersion; // 7 00106 UCHAR VolumeFlags; // 8 00107 UCHAR SystemId[32]; // 9-40 00108 UCHAR VolumeId[32]; // 41-72 00109 UCHAR unused1[8]; // 73-80 00110 ULONG VolumeSpaceSizeL; // 81-84 00111 ULONG VolumeSpaceSizeM; // 85-88 00112 UCHAR EscapeSequences[32]; // 89-120 00113 ULONG VolumeSetSize; // 121-124 00114 ULONG VolumeSequenceNumber; // 125-128 00115 ULONG LogicalBlockSize; // 129-132 00116 ULONG PathTableSizeL; // 133-136 00117 ULONG PathTableSizeM; // 137-140 00118 ULONG LPathTablePos; // 141-144 00119 ULONG LOptPathTablePos; // 145-148 00120 ULONG MPathTablePos; // 149-152 00121 ULONG MOptPathTablePos; // 153-156 00122 DIR_RECORD RootDirRecord; // 157-190 00123 UCHAR VolumeSetIdentifier[128]; // 191-318 00124 UCHAR PublisherIdentifier[128]; // 319-446 00125 00126 // more data ... 00127 }; 00128 #include <poppack.h> 00129 00130 typedef struct _SVD SVD, *PSVD; 00131 00132 00133 00134 00135 00136 00137 00138 typedef struct _CDINFO 00139 { 00140 ULONG VolumeOffset; 00141 ULONG VolumeSpaceSize; 00142 ULONG JolietLevel; 00143 ULONG RootStart; 00144 ULONG RootSize; 00145 WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; 00146 USHORT VolumeLabelLength; 00147 ULONG SerialNumber; 00148 } CDINFO, *PCDINFO; 00149 00150 00151 typedef struct 00152 { 00153 ERESOURCE VcbResource; 00154 ERESOURCE DirResource; 00155 00156 KSPIN_LOCK FcbListLock; 00157 LIST_ENTRY FcbListHead; 00158 00159 PVPB Vpb; 00160 PDEVICE_OBJECT VolumeDevice; 00161 PDEVICE_OBJECT StorageDevice; 00162 PFILE_OBJECT StreamFileObject; 00163 00164 CDINFO CdInfo; 00165 } DEVICE_EXTENSION, *PDEVICE_EXTENSION, VCB, *PVCB; 00166 00167 00168 #define FCB_CACHE_INITIALIZED 0x0001 00169 #define FCB_IS_VOLUME_STREAM 0x0002 00170 #define FCB_IS_VOLUME 0x0004 00171 00172 #define MAX_PATH 260 00173 00174 typedef struct _CDFS_SHORT_NAME 00175 { 00176 LIST_ENTRY Entry; 00177 LARGE_INTEGER StreamOffset; 00178 UNICODE_STRING Name; 00179 WCHAR NameBuffer[13]; 00180 } CDFS_SHORT_NAME, *PCDFS_SHORT_NAME; 00181 00182 typedef struct _FCB 00183 { 00184 FSRTL_COMMON_FCB_HEADER RFCB; 00185 SECTION_OBJECT_POINTERS SectionObjectPointers; 00186 ERESOURCE MainResource; 00187 ERESOURCE PagingIoResource; 00188 00189 PFILE_OBJECT FileObject; 00190 PDEVICE_EXTENSION DevExt; 00191 00192 UNICODE_STRING ShortNameU; 00193 00194 WCHAR *ObjectName; /* point on filename (250 chars max) in PathName */ 00195 WCHAR PathName[MAX_PATH]; /* path+filename 260 max */ 00196 WCHAR ShortNameBuffer[13]; 00197 00198 LIST_ENTRY FcbListEntry; 00199 struct _FCB* ParentFcb; 00200 00201 ULONG DirIndex; 00202 00203 LARGE_INTEGER IndexNumber; /* HighPart: Parent directory start sector */ 00204 /* LowPart: Directory record offset in the parent directory file */ 00205 00206 LONG RefCount; 00207 ULONG Flags; 00208 00209 DIR_RECORD Entry; 00210 00211 ERESOURCE NameListResource; 00212 LIST_ENTRY ShortNameList; 00213 } FCB, *PFCB; 00214 00215 00216 typedef struct _CCB 00217 { 00218 LIST_ENTRY NextCCB; 00219 PFILE_OBJECT PtrFileObject; 00220 LARGE_INTEGER CurrentByteOffset; 00221 /* for DirectoryControl */ 00222 ULONG Entry; 00223 ULONG Offset; 00224 /* for DirectoryControl */ 00225 UNICODE_STRING DirectorySearchPattern; 00226 ULONG LastCluster; 00227 ULONG LastOffset; 00228 } CCB, *PCCB; 00229 00230 #define TAG_CCB 'BCCI' 00231 #define TAG_FCB 'BCFI' 00232 00233 typedef struct 00234 { 00235 PDRIVER_OBJECT DriverObject; 00236 PDEVICE_OBJECT DeviceObject; 00237 ULONG Flags; 00238 CACHE_MANAGER_CALLBACKS CacheMgrCallbacks; 00239 } CDFS_GLOBAL_DATA, *PCDFS_GLOBAL_DATA; 00240 00241 extern PCDFS_GLOBAL_DATA CdfsGlobalData; 00242 00243 00244 /* cleanup.c */ 00245 00246 NTSTATUS NTAPI 00247 CdfsCleanup(PDEVICE_OBJECT DeviceObject, 00248 PIRP Irp); 00249 00250 00251 /* close.c */ 00252 00253 NTSTATUS NTAPI 00254 CdfsClose(PDEVICE_OBJECT DeviceObject, 00255 PIRP Irp); 00256 00257 NTSTATUS 00258 CdfsCloseFile(PDEVICE_EXTENSION DeviceExt, 00259 PFILE_OBJECT FileObject); 00260 00261 00262 /* common.c */ 00263 00264 NTSTATUS 00265 CdfsReadSectors(IN PDEVICE_OBJECT DeviceObject, 00266 IN ULONG DiskSector, 00267 IN ULONG SectorCount, 00268 IN OUT PUCHAR Buffer, 00269 IN BOOLEAN Override); 00270 00271 NTSTATUS 00272 CdfsDeviceIoControl (IN PDEVICE_OBJECT DeviceObject, 00273 IN ULONG CtlCode, 00274 IN PVOID InputBuffer, 00275 IN ULONG InputBufferSize, 00276 IN OUT PVOID OutputBuffer, 00277 IN OUT PULONG pOutputBufferSize, 00278 IN BOOLEAN Override); 00279 00280 /* create.c */ 00281 00282 NTSTATUS NTAPI 00283 CdfsCreate(PDEVICE_OBJECT DeviceObject, 00284 PIRP Irp); 00285 00286 /* devctrl.c */ 00287 00288 NTSTATUS NTAPI 00289 CdfsDeviceControl(PDEVICE_OBJECT DeviceObject, 00290 PIRP Irp); 00291 00292 /* dirctl.c */ 00293 00294 NTSTATUS NTAPI 00295 CdfsDirectoryControl(PDEVICE_OBJECT DeviceObject, 00296 PIRP Irp); 00297 00298 00299 /* fcb.c */ 00300 00301 PFCB 00302 CdfsCreateFCB(PCWSTR FileName); 00303 00304 VOID 00305 CdfsDestroyFCB(PFCB Fcb); 00306 00307 BOOLEAN 00308 CdfsFCBIsDirectory(PFCB Fcb); 00309 00310 BOOLEAN 00311 CdfsFCBIsRoot(PFCB Fcb); 00312 00313 VOID 00314 CdfsGrabFCB(PDEVICE_EXTENSION Vcb, 00315 PFCB Fcb); 00316 00317 VOID 00318 CdfsReleaseFCB(PDEVICE_EXTENSION Vcb, 00319 PFCB Fcb); 00320 00321 VOID 00322 CdfsAddFCBToTable(PDEVICE_EXTENSION Vcb, 00323 PFCB Fcb); 00324 00325 PFCB 00326 CdfsGrabFCBFromTable(PDEVICE_EXTENSION Vcb, 00327 PUNICODE_STRING FileName); 00328 00329 NTSTATUS 00330 CdfsFCBInitializeCache(PVCB Vcb, 00331 PFCB Fcb); 00332 00333 PFCB 00334 CdfsMakeRootFCB(PDEVICE_EXTENSION Vcb); 00335 00336 PFCB 00337 CdfsOpenRootFCB(PDEVICE_EXTENSION Vcb); 00338 00339 NTSTATUS 00340 CdfsMakeFCBFromDirEntry(PVCB Vcb, 00341 PFCB DirectoryFCB, 00342 PWSTR LongName, 00343 PWSTR ShortName, 00344 PDIR_RECORD Record, 00345 ULONG DirectorySector, 00346 ULONG DirectoryOffset, 00347 PFCB * fileFCB); 00348 00349 NTSTATUS 00350 CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb, 00351 PFCB Fcb, 00352 PFILE_OBJECT FileObject); 00353 00354 NTSTATUS 00355 CdfsDirFindFile(PDEVICE_EXTENSION DeviceExt, 00356 PFCB DirectoryFcb, 00357 PUNICODE_STRING FileToFind, 00358 PFCB *FoundFCB); 00359 00360 NTSTATUS 00361 CdfsGetFCBForFile(PDEVICE_EXTENSION Vcb, 00362 PFCB *pParentFCB, 00363 PFCB *pFCB, 00364 PUNICODE_STRING FileName); 00365 00366 00367 /* finfo.c */ 00368 00369 NTSTATUS NTAPI 00370 CdfsQueryInformation(PDEVICE_OBJECT DeviceObject, 00371 PIRP Irp); 00372 00373 NTSTATUS NTAPI 00374 CdfsSetInformation(PDEVICE_OBJECT DeviceObject, 00375 PIRP Irp); 00376 00377 00378 /* fsctl.c */ 00379 00380 NTSTATUS NTAPI 00381 CdfsFileSystemControl(PDEVICE_OBJECT DeviceObject, 00382 PIRP Irp); 00383 00384 00385 /* misc.c */ 00386 00387 VOID 00388 CdfsSwapString(PWCHAR Out, 00389 PUCHAR In, 00390 ULONG Count); 00391 00392 VOID 00393 CdfsDateTimeToSystemTime(PFCB Fcb, 00394 PLARGE_INTEGER SystemTime); 00395 00396 VOID 00397 CdfsFileFlagsToAttributes(PFCB Fcb, 00398 PULONG FileAttributes); 00399 00400 VOID 00401 CdfsShortNameCacheGet 00402 (PFCB DirectoryFcb, 00403 PLARGE_INTEGER StreamOffset, 00404 PUNICODE_STRING LongName, 00405 PUNICODE_STRING ShortName); 00406 00407 /* rw.c */ 00408 00409 NTSTATUS NTAPI 00410 CdfsRead(PDEVICE_OBJECT DeviceObject, 00411 PIRP Irp); 00412 00413 NTSTATUS NTAPI 00414 CdfsWrite(PDEVICE_OBJECT DeviceObject, 00415 PIRP Irp); 00416 00417 00418 /* volinfo.c */ 00419 00420 NTSTATUS NTAPI 00421 CdfsQueryVolumeInformation(PDEVICE_OBJECT DeviceObject, 00422 PIRP Irp); 00423 00424 NTSTATUS NTAPI 00425 CdfsSetVolumeInformation(PDEVICE_OBJECT DeviceObject, 00426 PIRP Irp); 00427 00428 /* cdfs.c */ 00429 00430 NTSTATUS NTAPI 00431 DriverEntry(PDRIVER_OBJECT DriverObject, 00432 PUNICODE_STRING RegistryPath); 00433 00434 BOOLEAN NTAPI 00435 CdfsAcquireForLazyWrite(IN PVOID Context, 00436 IN BOOLEAN Wait); 00437 00438 VOID NTAPI 00439 CdfsReleaseFromLazyWrite(IN PVOID Context); 00440 00441 #endif //CDFS_H Generated on Sun May 27 2012 04:27:29 for ReactOS by
1.7.6.1
|