ULONG JolietLevel;
ULONG RootStart;
ULONG RootSize;
- WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH];
- ULONG VolumeLabelLength;
+ WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
+ USHORT VolumeLabelLength;
ULONG SerialNumber;
} CDINFO, *PCDINFO;
PFILE_OBJECT StreamFileObject;
CDINFO CdInfo;
-
-
} DEVICE_EXTENSION, *PDEVICE_EXTENSION, VCB, *PVCB;
#define MAX_PATH 260
+typedef struct _CDFS_SHORT_NAME
+{
+ LIST_ENTRY Entry;
+ LARGE_INTEGER StreamOffset;
+ UNICODE_STRING Name;
+ WCHAR NameBuffer[13];
+} CDFS_SHORT_NAME, *PCDFS_SHORT_NAME;
+
typedef struct _FCB
{
FSRTL_COMMON_FCB_HEADER RFCB;
ULONG Flags;
DIR_RECORD Entry;
+
+ ERESOURCE NameListResource;
+ LIST_ENTRY ShortNameList;
} FCB, *PFCB;
ULONG LastOffset;
} CCB, *PCCB;
-#ifndef TAG
-#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
-#endif
-
-#define TAG_CCB TAG('I', 'C', 'C', 'B')
-
-
+#define TAG_CCB 'BCCI'
+#define TAG_FCB 'BCFI'
typedef struct
{
/* cleanup.c */
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsCleanup(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
/* close.c */
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsClose(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
IN OUT PULONG pOutputBufferSize,
IN BOOLEAN Override);
-
/* create.c */
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsCreate(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
+/* devctrl.c */
+
+NTSTATUS NTAPI
+CdfsDeviceControl(PDEVICE_OBJECT DeviceObject,
+ PIRP Irp);
/* dirctl.c */
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsDirectoryControl(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
/* finfo.c */
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsQueryInformation(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsSetInformation(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
/* fsctl.c */
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsFileSystemControl(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
CdfsFileFlagsToAttributes(PFCB Fcb,
PULONG FileAttributes);
+VOID
+CdfsShortNameCacheGet
+(PFCB DirectoryFcb,
+ PLARGE_INTEGER StreamOffset,
+ PUNICODE_STRING LongName,
+ PUNICODE_STRING ShortName);
/* rw.c */
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsRead(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsWrite(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
/* volinfo.c */
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsQueryVolumeInformation(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
-NTSTATUS STDCALL
+NTSTATUS NTAPI
CdfsSetVolumeInformation(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
/* cdfs.c */
-NTSTATUS STDCALL
+NTSTATUS NTAPI
DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath);