330 ULONG MediaChangeCount = 0;
331 ULONG Characteristics;
347 UDFPrint((
"\n !!! UDFMountVolume\n"));
350 fsDeviceObject = PtrIrpContext->TargetDeviceObject;
351 UDFPrint((
"Mount on device object %x\n", fsDeviceObject));
361 UDFPrintErr((
"Invalid node type in FS or FILTER DeviceObject\n"));
379 #ifdef UDF_HDD_SUPPORT 392 #endif //UDF_HDD_SUPPORT 408 UDFPrint((
"UDFMountVolume: removable media\n"));
419 &MediaChangeCount,
sizeof(
ULONG),
434 UDFPrint((
"UDFMountVolume: TEST_UNIT_READY %x\n", RC));
440 UDFPrint((
"UDFMountVolume: retry\n"));
448 UDFPrint((
"UDFMountVolume: additional delay 3 sec\n"));
459 &MediaChangeCount,
sizeof(
ULONG),
463 UDFPrint((
"UDFMountVolume: retry check verify\n"));
467 &MediaChangeCount,
sizeof(
ULONG),
476 MediaChangeCount = 0;
516 UDFPrint((
"UDFMountVolume: create device\n"));
543 Vcb = (
PVCB)VolDo->DeviceExtension;
561 Vcb->Vpb->ReferenceCount ++;
563 Vcb->MediaChangeCount = MediaChangeCount;
564 Vcb->FsDeviceType = FsDeviceType;
569 RestoreDoVerify =
TRUE;
572 DeviceNotTouched =
FALSE;
579 Vcb->MountPhErrorCount = 0;
584 Vcb->WCacheMaxFrames,
585 Vcb->WCacheMaxBlocks,
587 5,
Vcb->BlockSizeBits,
588 Vcb->WCacheBlocksPerFrameSh,
594 Vcb->WCacheFramesToKeepFree,
598 UDFTWriteAsync, UDFTReadAsync,
619 #ifdef UDF_READ_ONLY_BUILD 622 #endif //UDF_READ_ONLY_BUILD 625 UDFPrint((
"UDFMountVolume: try raw mount\n"));
627 UDFPrint((
"UDFMountVolume: block raw mount due to ISO9660 presence\n"));
632 UDFPrint((
"UDFMountVolume: try raw mount (2)\n"));
635 UDFPrint((
"UDFMountVolume: trying raw mount...\n"));
636 Vcb->VolIdent.Length =
638 if(
Vcb->VolIdent.Buffer)
641 if(!
Vcb->VolIdent.Buffer)
653 Vcb->MountPhErrorCount = -1;
654 #ifndef UDF_READ_ONLY_BUILD 657 UDFPrint((
"UDFMountVolume: writable volume\n"));
661 UDFPrint((
"UDFMountVolume: RAM mode\n"));
664 UDFPrint((
"UDFMountVolume: RW mode\n"));
672 UDFPrint((
"UDFMountVolume: R mode\n"));
677 UDFPrint((
"UDFMountVolume: NO ACL and ExtFE support\n"));
683 #endif //UDF_READ_ONLY_BUILD 697 Vcb->VCBOpenCount = 1;
705 #ifndef UDF_READ_ONLY_BUILD 710 UDFPrint((
"UDFMountVolume: RO mount\n"));
713 #endif //UDF_READ_ONLY_BUILD 715 Vcb->Vpb->SerialNumber =
Vcb->PhSerialNumber;
716 Vcb->Vpb->VolumeLabelLength =
Vcb->VolIdent.Length;
718 Vcb->VolIdent.Buffer,
719 Vcb->VolIdent.Length );
727 if(!
Vcb->ShutdownRegistered) {
728 UDFPrint((
"UDFMountVolume: Register shutdown routine\n"));
730 Vcb->ShutdownRegistered =
TRUE;
736 UDFPrint((
"UDFMountVolume: unlock media on RO volume\n"));
750 Vcb->IsVolumeJustMounted =
TRUE;
764 UDFPrint((
"UDFMountVolume: RC = %x\n", RC));
773 UDFPrint((
"UDFMountVolume: unlock media\n"));
784 if(!DeviceNotTouched &&
786 UDFPrint((
"UDFMountVolume: reset driver\n"));
791 UDFPrint((
"UDFMountVolume: status -> STATUS_UNRECOGNIZED_VOLUME\n"));
802 if(RestoreDoVerify) {
806 if(
Vcb->VCBOpenCount)
823 UDFPrint((
"UDFMountVolume: complete req RC %x\n", RC));
826 Irp->IoStatus.Status = RC;
834 Irp->CurrentLocation++;
835 Irp->Tail.Overlay.CurrentStackLocation++;
844 UDFPrint((
"UDFMountVolume: final RC = %x\n", RC));
NTSTATUS UDFBlankMount(IN PVCB Vcb)
#define DO_DEVICE_INITIALIZING
#define UDFAcquireResourceExclusive(Resource, CanWait)
#define UDF_VCB_FLAGS_MEDIA_READ_ONLY
#define UDF_NODE_TYPE_UDFFS_DEVOBJ
#define WCACHE_CHAINED_IO
NTSTATUS NTAPI UDFPhSendIOCTL(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, OUT PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN OverrideVerify, OUT PIO_STATUS_BLOCK Iosb OPTIONAL)
#define STATUS_INSUFFICIENT_RESOURCES
NTSTATUS UDFStartEjectWaiter(IN PVCB Vcb)
#define IOCTL_STORAGE_MEDIA_REMOVAL
int64 __fastcall UDFGetFreeSpace(IN PVCB Vcb)
struct _DEVICE_OBJECT * PDEVICE_OBJECT
#define UDFReleaseResource(Resource)
#define UDF_BLANK_VOLUME_LABEL
#define REG_MOUNT_ON_CDONLY_NAME
#define UDFNtAclSupported(Vcb)
VOID UDFReadRegKeys(PVCB Vcb, BOOLEAN Update, BOOLEAN UseCfg)
#define WCACHE_RO_BAD_BLOCKS
#define REG_MOUNT_ON_ZIP_NAME
#define UDF_DATA_FLAGS_BEING_UNLOADED
#define WCACHE_MARK_BAD_BLOCKS
#define SCSI_ADSENSE_LUN_NOT_READY
OSSTATUS WCacheInit__(IN PW_CACHE Cache, IN ULONG MaxFrames, IN ULONG MaxBlocks, IN SIZE_T MaxBytesToRead, IN ULONG PacketSizeSh, IN ULONG BlockSizeSh, IN ULONG BlocksPerFrameSh, IN lba_t FirstLba, IN lba_t LastLba, IN ULONG Mode, IN ULONG Flags, IN ULONG FramesToKeepFree, IN PWRITE_BLOCK WriteProc, IN PREAD_BLOCK ReadProc, IN PWRITE_BLOCK_ASYNC WriteProcAsync, IN PREAD_BLOCK_ASYNC ReadProcAsync, IN PCHECK_BLOCK CheckUsedProc, IN PUPDATE_RELOC UpdateRelocProc, IN PWC_ERROR_HANDLER ErrorHandlerProc)
#define REG_MOUNT_ON_HDD_NAME
OSSTATUS UDFGetDiskInfoAndVerify(IN PDEVICE_OBJECT DeviceObject, IN PVCB Vcb)
#define STATUS_VERIFY_REQUIRED
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
#define SCSI_SENSE_NOT_READY
UCHAR AdditionalSenseCode
struct _PREVENT_MEDIA_REMOVAL_USER_IN * PPREVENT_MEDIA_REMOVAL_USER_IN
#define WCACHE_CACHE_WHOLE_PACKET
VOID CompleteIrp(IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information)
ULONG UDFGetRegParameter(IN PVCB Vcb, IN PCWSTR Name, IN ULONG DefValue)
#define UDF_VCB_FLAGS_RAW_DISK
#define STATUS_IO_DEVICE_ERROR
#define FILE_DEVICE_CD_ROM
#define UDF_VCB_FLAGS_VOLUME_READ_ONLY
#define STATUS_FILE_CORRUPT_ERROR
NTSTATUS UDFCompleteMount(IN PVCB Vcb)
ULONG WCacheChFlags__(IN PW_CACHE Cache, IN ULONG SetFlags, IN ULONG ClrFlags)
uint32 UDFIsBlockAllocated(IN void *_Vcb, IN uint32 Lba)
#define STATUS_UNRECOGNIZED_VOLUME
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
#define FILE_REMOVABLE_MEDIA
OSSTATUS UDFUpdateVAT(IN void *_Vcb, IN uint32 Lba, IN uint32 *RelocTab, IN uint32 BCount)
NTSTATUS NTAPI KeDelayExecutionThread(IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Interval OPTIONAL)
UCHAR AdditionalSenseCodeQualifier
NTSTATUS UDFWCacheErrorHandler(IN PVOID Context, IN PWCACHE_ERROR_CONTEXT ErrorInfo)
#define UDFInterlockedDecrement(addr)
#define _SEH2_AbnormalTermination()
#define IoCompleteRequest
NTSTATUS UDFInitializeVCB(IN PDEVICE_OBJECT PtrVolumeDeviceObject, IN PDEVICE_OBJECT PtrTargetDeviceObject, IN PVPB PtrVPB)
#define FILE_DEVICE_DISK_FILE_SYSTEM
VOID UDFCloseResidual(IN PVCB Vcb)
#define IOCTL_STORAGE_CHECK_VERIFY
#define SCSI_SENSEQ_BECOMING_READY
#define NT_SUCCESS(StatCode)
#define IOCTL_CDROM_GET_DRIVE_GEOMETRY
#define UDF_READY_MAX_RETRY
#define UDF_VCB_FLAGS_OUR_DEVICE_DRIVER
BOOLEAN UDFDismountVcb(IN PVCB Vcb, IN BOOLEAN VcbAcquired)
#define VRS_ISO9660_FOUND
#define UDF_VCB_FLAGS_VOLUME_MOUNTED
#define UDF_NODE_TYPE_FILTER_DEVOBJ
OSSTATUS UDFResetDeviceDriver(IN PVCB Vcb, IN PDEVICE_OBJECT TargetDeviceObject, IN BOOLEAN Unlock)
PDEVICE_OBJECT lowerFSDeviceObject
ULONG AlignmentRequirement
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
#define IOCTL_CDRW_TEST_UNIT_READY
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
VOID UDFScanForDismountedVcb(IN PtrUDFIrpContext IrpContext)
OSSTATUS UDFTWriteVerify(IN void *_Vcb, IN void *Buffer, IN SIZE_T Length, IN uint32 LBA, OUT PSIZE_T WrittenBytes, IN uint32 Flags)
_In_ PIO_STACK_LOCATION IrpSp
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI IoRegisterShutdownNotification(PDEVICE_OBJECT DeviceObject)
#define WCACHE_DO_NOT_COMPARE
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM
#define FSRTL_VOLUME_MOUNT
#define UDFNotifyVolumeEvent(FileObject, EventCode)
#define UDFPrintErr(Args)
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
#define RtlCopyMemory(Destination, Source, Length)
OSSTATUS UDFTReadVerify(IN void *_Vcb, IN void *Buffer, IN SIZE_T Length, IN uint32 LBA, OUT PSIZE_T ReadBytes, IN uint32 Flags)
struct _FILTER_DEV_EXTENSION * PFILTER_DEV_EXTENSION
OSSTATUS UDFGetDiskInfo(IN PDEVICE_OBJECT DeviceObject, IN PVCB Vcb)
#define CdrwMediaClassEx_IsRAM(MediaClassEx)
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
#define FILE_FLOPPY_DISKETTE
OSSTATUS UDFVInit(IN PVCB Vcb)
IN OUT PVCB IN PDEVICE_OBJECT TargetDeviceObject
#define UDF_WAIT_CD_SPINUP
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB Vpb
OSSTATUS WCacheSetMode__(IN PW_CACHE Cache, IN ULONG Mode)
UDFIdentifier NodeIdentifier
int64 __fastcall UDFGetTotalSpace(IN PVCB Vcb)
#define STATUS_DEVICE_NOT_READY