ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

cdfs.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.