172 PCHAR ModeSelectData;
174 UDFPrint((
"UDFCommonDeviceControl\n"));
194 #ifndef UDF_READ_ONLY_BUILD 196 #endif //UDF_READ_ONLY_BUILD 208 goto ioctl_do_default;
334 if(!
Irp->AssociatedIrp.SystemBuffer)
335 goto ioctl_do_default;
349 ScsiCommand =
Cdb->
CDB6.OperationCode;
352 UDFPrint((
"Write10, LBA %2.2x%2.2x%2.2x%2.2x\n",
360 UDFPrint((
"Write12, LBA %2.2x%2.2x%2.2x%2.2x\n",
369 switch(ScsiCommand) {
372 ModeSelectData = CdbData+4;
373 switch(ModeSelectData[0]) {
377 UDFPrint((
"Unsafe MODE_SELECT_6 via pass-through (%2.2x)\n", ModeSelectData[0]));
378 goto unsafe_direct_scsi_cmd;
384 ModeSelectData = CdbData+8;
385 switch(ModeSelectData[0]) {
389 UDFPrint((
"Unsafe MODE_SELECT_10 via pass-through (%2.2x)\n", ModeSelectData[0]));
390 goto unsafe_direct_scsi_cmd;
404 UDFPrint((
"UDF Direct media modification via pass-through (%2.2x)\n", ScsiCommand));
405 unsafe_direct_scsi_cmd:
407 goto ioctl_do_default;
417 #ifdef UDF_DELAYED_CLOSE 420 #endif //UDF_DELAYED_CLOSE 434 Vcb->MediaLockCount = 0;
452 goto notify_media_change;
458 UDFPrint((
"UDF Medium/Tray control IOCTL via pass-through\n"));
460 goto ioctl_do_default;
472 goto ioctl_do_default;
476 UDFPrint((
"UDF Register Autoformat\n"));
484 Irp->IoStatus.Information = 0;
512 Irp->IoStatus.Information = 0;
516 UDFPrint((
"UDF Invaidate volume\n"));
523 Irp->IoStatus.Information = 0;
536 if (MountEventHandle)
573 Irp->IoStatus.Information = 0;
585 *(
PBOOLEAN)
Irp->AssociatedIrp.SystemBuffer =
Vcb->IsVolumeJustMounted;
590 Irp->IoStatus.Information = 0;
597 UDFPrint((
"UDF: Get Retrieval Pointers\n"));
603 UDFPrint((
"UDF: Get Spec Retrieval Pointers\n"));
604 PUDF_GET_SPEC_RETRIEVAL_POINTERS_IN SpecRetrPointer;
605 SpecRetrPointer = (PUDF_GET_SPEC_RETRIEVAL_POINTERS_IN)(
Irp->AssociatedIrp.SystemBuffer);
611 UDFPrint((
"UDF: Get File Alloc mode (from ICB)\n"));
616 #ifndef UDF_READ_ONLY_BUILD 618 UDFPrint((
"UDF: Set File Alloc mode\n"));
623 #endif //UDF_READ_ONLY_BUILD 640 #ifndef UDF_READ_ONLY_BUILD 644 Irp->IoStatus.Information = 0;
648 #endif //UDF_READ_ONLY_BUILD 653 UDFPrint((
"UDFUserFsCtrlRequest: IOCTL_UDF_GET_VERSION\n"));
655 Irp->IoStatus.Information = 0;
659 UDFPrint((
"!OutputBufferLength\n"));
677 udf_ver->
header.DriverVersionMj = 0x00010005;
678 udf_ver->
header.DriverVersionMn = 0x12;
688 UDFPrint((
" UDF_USER_FS_FLAGS_RO\n"));
692 UDFPrint((
" UDF_USER_FS_FLAGS_OUR_DRIVER\n"));
696 UDFPrint((
" UDF_USER_FS_FLAGS_RAW\n"));
700 UDFPrint((
" UDF_USER_FS_FLAGS_MEDIA_RO\n"));
704 UDFPrint((
" UDF_USER_FS_FLAGS_FP\n"));
721 UDFPrint((
"UDF: IOCTL_UDF_SET_OPTIONS\n"));
723 Irp->IoStatus.Information = 0;
749 PrevVerifyOnWrite =
Vcb->VerifyOnWrite;
758 if(PrevVerifyOnWrite !=
Vcb->VerifyOnWrite) {
759 if(
Vcb->VerifyOnWrite) {
771 case IOCTL_UDF_GET_OPTIONS_VERSION: {
773 PUDF_GET_OPTIONS_VERSION_OUT udf_opt_ver;
775 UDFPrint((
"UDF: IOCTL_UDF_GET_OPTIONS_VERSION\n"));
777 Irp->IoStatus.Information = 0;
780 if(
IrpSp->
Parameters.DeviceIoControl.OutputBufferLength <
sizeof(UDF_GET_OPTIONS_VERSION_OUT)) {
781 UDFPrint((
"OutputBufferLength < %x\n",
sizeof(UDF_GET_OPTIONS_VERSION_OUT)));
785 udf_opt_ver = (PUDF_GET_OPTIONS_VERSION_OUT)(
Irp->AssociatedIrp.SystemBuffer);
798 udf_opt_ver->CfgVersion =
Vcb->CfgVersion;
799 Irp->IoStatus.Information =
sizeof(UDF_GET_OPTIONS_VERSION_OUT);
806 UDFPrint((
"UDF: IOCTL_CDRW_RESET_DRIVER\n"));
807 Vcb->MediaLockCount = 0;
809 goto ioctl_do_default;
813 UDFPrint((
"UDFUserFsCtrlRequest: FSCTL_ALLOW_EXTENDED_DASD_IO\n"));
818 Irp->IoStatus.Information = 0;
825 UDFPrint((
"UDFUserFsCtrlRequest: FSCTL_IS_VOLUME_DIRTY\n"));
836 UDFPrint((
"UDF Reset/Eject request\n"));
839 if(
Vcb->EjectWaiter) {
840 UDFPrint((
" Vcb->EjectWaiter present\n"));
841 Irp->IoStatus.Information = 0;
842 Vcb->EjectWaiter->SoftEjectReq =
TRUE;
848 goto ioctl_do_default;
872 UDFPrint((
"UDF Cdrom Disk Type\n"));
875 Irp->IoStatus.Information = 0;
886 for(TrackNumber=
Vcb->FirstTrackNum; TrackNumber<Vcb->LastTrackNum; TrackNumber++) {
909 goto ioctl_do_default;
913 Irp->IoStatus.Information = 0;
918 if(!
buffer->PreventMediaRemoval &&
919 !
Vcb->MediaLockCount) {
921 UDFPrint((
"!locked + unlock req\n"));
924 goto ioctl_do_default;
936 #ifdef UDF_DELAYED_CLOSE 939 #endif //UDF_DELAYED_CLOSE 947 Vcb->MediaLockCount = 0;
959 Irp->IoStatus.Information = 0;
963 if(
buffer->PreventMediaRemoval) {
965 Vcb->MediaLockCount++;
970 if(
Vcb->MediaLockCount) {
971 UDFPrint((
"lock count %d\n",
Vcb->MediaLockCount));
973 Vcb->MediaLockCount--;
978 goto ioctl_do_default;
988 if(
Vcb && UnsafeIoctl) {
1009 if(
Vcb && UnsafeIoctl) {
1020 AcquiredVcb =
FALSE;
1029 UDFPrint((
" complete Irp %x, ctx %x, status %x, iolen %x\n",
1030 Irp, PtrIrpContext, RC,
Irp->IoStatus.Information));
1031 Irp->IoStatus.Status = RC;
VOID UDFVRelease(IN PVCB Vcb)
#define UDFAcquireResourceExclusive(Resource, CanWait)
#define IOCTL_CDRW_SET_SPEED
#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
#define UDF_VCB_FLAGS_MEDIA_READ_ONLY
VOID UDFReleaseIrpContext(PtrUDFIrpContext PtrIrpContext)
#define IOCTL_CDROM_GET_CONTROL
#define IOCTL_CDROM_LOAD_MEDIA
#define IOCTL_DISK_EJECT_MEDIA
struct _UDFContextControlBlock * PtrUDFCCB
#define STATUS_INSUFFICIENT_RESOURCES
#define UDFCloseAllSystemDelayedInDir(Vcb, FI)
NTSTATUS UDFGetFileAllocModeFromICB(PtrUDFIrpContext PtrIrpContext, PIRP Irp)
struct _CDB::_WRITE_CD WRITE_CD
#define IOCTL_UDF_DISABLE_DRIVER
#define IOCTL_CDRW_READ_ATIP
#define IOCTL_STORAGE_MEDIA_REMOVAL
#define IOCTL_CDRW_READ_SESSION_INFO
#define IOCTL_CDRW_READ_TOC_EX
#define IOCTL_CDRW_READ_CD_TEXT
#define STATUS_INVALID_PARAMETER
#define IOCTL_CDROM_CHECK_VERIFY
#define UDF_NODE_TYPE_VCB
#define IOCTL_CDRW_FORMAT_UNIT
#define IOCTL_CDROM_GET_CONFIGURATION
struct _CDROM_DISK_DATA_USER_OUT * PCDROM_DISK_DATA_USER_OUT
#define UDFReleaseResource(Resource)
#define IOCTL_UDF_SET_FILE_ALLOCATION_MODE
VOID NTAPI IoUnregisterFileSystem(IN PDEVICE_OBJECT DeviceObject)
#define IOCTL_CDRW_BUFFER_CAPACITY
#define IOCTL_DISK_CHECK_VERIFY
#define IOCTL_CDRW_GET_DEVICE_NAME
#define IOCTL_CDRW_GET_MEDIA_TYPE
#define IOCTL_CDROM_GET_LAST_SESSION
VOID UDFReadRegKeys(PVCB Vcb, BOOLEAN Update, BOOLEAN UseCfg)
#define IOCTL_DISK_IS_WRITABLE
struct _FCB::@709::@712 Fcb
#define UDF_USER_FS_FLAGS_FP
#define IOCTL_UDF_GET_VERSION
#define IOCTL_UDF_UNLOCK_VOLUME_BY_PID
#define UDF_DATA_FLAGS_RESOURCE_INITIALIZED
PDEVICE_OBJECT TargetDeviceObject
#define IOCTL_CDRW_GET_MEDIA_TYPE_EX
#define IOCTL_CDRW_RESET_DRIVER
struct _PREVENT_MEDIA_REMOVAL_USER_IN * PPREVENT_MEDIA_REMOVAL_USER_IN
#define UDF_SET_OPTIONS_FLAG_MASK
struct _UDF_GET_VERSION_OUT * PUDF_GET_VERSION_OUT
#define UDFClearFlag(Flag, Value)
VOID CompleteIrp(IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information)
#define IOCTL_CDRW_READ_PMA
#define STATUS_BUFFER_TOO_SMALL
#define SCSIOP_SEND_CUE_SHEET
#define IOCTL_CDROM_GET_DRIVE_GEOMETRY_EX
#define IOCTL_CDROM_RAW_READ
#define IOCTL_CDROM_SET_VOLUME
#define UDF_VCB_FLAGS_RAW_DISK
struct _UDF_SET_OPTIONS_IN::@951 header
#define UDF_VCB_IC_DIRTY_RO
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
#define UDF_VCB_FLAGS_VOLUME_READ_ONLY
#define IOCTL_CDROM_DISK_TYPE
NTSTATUS UDFVerifyVcb(IN PtrUDFIrpContext IrpContext, IN PVCB Vcb)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
#define IO_DISK_INCREMENT
#define STATUS_SHARING_VIOLATION
#define UDF_USER_FS_FLAGS_RO
#define UDF_VCB_FLAGS_UNSAFE_IOCTL
#define SCSIOP_SET_STREAMING
NTSTATUS UDFGetRetrievalPointers(IN PtrUDFIrpContext IrpContext, IN PIRP Irp, IN ULONG Special)
VOID UDFStopEjectWaiter(PVCB Vcb)
#define IOCTL_CDRW_READ_DISC_INFO
#define IOCTL_CDROM_STOP_AUDIO
#define STATUS_INVALID_USER_BUFFER
#define IOCTL_STORAGE_EJECT_MEDIA
#define IOCTL_CDROM_SEEK_AUDIO_MSF
struct _CDROM_DISK_DATA_USER_OUT CDROM_DISK_DATA_USER_OUT
#define UDFInterlockedDecrement(addr)
#define IOCTL_UDF_INVALIDATE_VOLUMES
#define offsetof(TYPE, MEMBER)
#define _SEH2_AbnormalTermination()
#define IOCTL_CDROM_PLAY_AUDIO_MSF
#define IoCompleteRequest
#define IOCTL_DISK_GET_MEDIA_TYPES
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
#define UDF_USER_FS_FLAGS_OUR_DRIVER
#define IOCTL_STORAGE_CHECK_VERIFY
#define IOCTL_UDF_GET_RETRIEVAL_POINTERS
#define UDF_SET_OPTIONS_FLAG_TEMPORARY
NTSTATUS UDFUnlockVolume(IN PtrUDFIrpContext IrpContext, IN PIRP Irp, IN ULONG PID)
#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX
#define UDF_VCB_FLAGS_MEDIA_LOCKED
#define NT_SUCCESS(StatCode)
#define IOCTL_CDROM_GET_DRIVE_GEOMETRY
#define IOCTL_CDROM_MEDIA_REMOVAL
#define IOCTL_UDF_GET_SPEC_RETRIEVAL_POINTERS
#define UDF_VCB_FLAGS_OUR_DEVICE_DRIVER
#define IOCTL_CDRW_READ_FULL_TOC
NTSTATUS UDFIsVolumeDirty(IN PtrUDFIrpContext IrpContext, IN PIRP Irp)
#define UDFDeleteResource(Resource)
#define IOCTL_CDRW_GET_LAST_ERROR
#define IOCTL_UDF_IS_VOLUME_JUST_MOUNTED
#define ObDereferenceObject
#define IOCTL_CDROM_GET_VOLUME
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
#define IOCTL_STORAGE_LOAD_MEDIA2
#define UDF_USER_FS_FLAGS_RAW
#define UDF_USER_FS_FLAGS_MEDIA_RO
#define FSCTL_ALLOW_EXTENDED_DASD_IO
#define UDF_DATA_FLAGS_ZONES_INITIALIZED
#define IOCTL_CDRW_GET_EVENT
#define UDF_VCB_FLAGS_VOLUME_MOUNTED
#define Trk_QSubChan_Type_Mask
#define IOCTL_DISK_GET_PARTITION_INFO
#define IOCTL_CDRW_GET_DEVICE_INFO
#define IOCTL_CDRW_LL_READ
#define SCSIOP_MEDIUM_REMOVAL
#define IOCTL_CDRW_MODE_SENSE
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
#define IOCTL_CDRW_GET_CAPABILITIES
#define SCSIOP_FORMAT_UNIT
#define IOCTL_STORAGE_CHECK_VERIFY2
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
#define UDFAcquireResourceShared(Resource, CanWait)
#define IOCTL_CDROM_PAUSE_AUDIO
NTSTATUS UDFSetFileAllocModeFromICB(PtrUDFIrpContext IrpContext, PIRP Irp)
#define UDFInterlockedIncrement(addr)
#define IOCTL_UDF_SET_OPTIONS
#define IOCTL_DISK_GET_DRIVE_LAYOUT
#define IOCTL_SCSI_PASS_THROUGH
#define IOCTL_CDROM_RESUME_AUDIO
#define IOCTL_UDF_SET_NOTIFICATION_EVENT
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
#define IOCTL_UDF_LOCK_VOLUME_BY_PID
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
#define IOCTL_CDRW_TEST_UNIT_READY
#define IOCTL_STORAGE_GET_MEDIA_TYPES
#define IOCTL_DISK_GET_DRIVE_LAYOUT_EX
#define IOCTL_SCSI_PASS_THROUGH_DIRECT
struct _UDF_GET_VERSION_OUT::@950 header
#define IOCTL_UDF_SEND_LICENSE_KEY
#define IOCTL_DISK_LOAD_MEDIA
struct _CDB::_CDB12READWRITE CDB12READWRITE
#define IOCTL_CDROM_READ_TOC_EX
_In_ PIO_STACK_LOCATION IrpSp
#define CDROM_DISK_DATA_TRACK
#define IOCTL_STORAGE_LOAD_MEDIA
#define IOCTL_CDRW_GET_SIGNATURE
#define IOCTL_CDRW_LL_WRITE
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define FSCTL_IS_VOLUME_DIRTY
#define Trk_QSubChan_Type_Audio
#define IoSkipCurrentIrpStackLocation(Irp)
#define UDF_CURRENT_BUILD
ULONG UDFFlushLogicalVolume(IN PtrUDFIrpContext PtrIrpContext, IN PIRP Irp, IN PVCB Vcb, IN ULONG FlushFlags)
VOID UDFCloseAllDelayed(IN PVCB Vcb)
VOID UDFVFlush(IN PVCB Vcb)
#define INTEGRITY_TYPE_OPEN
#define IOCTL_CDRW_READ_TRACK_INFO
struct _UDF_SET_OPTIONS_IN * PUDF_SET_OPTIONS_IN
OSSTATUS WCacheFlushBlocks__(IN PW_CACHE Cache, IN PVOID Context, IN lba_t Lba, IN ULONG BCount)
struct _SCSI_PASS_THROUGH * PSCSI_PASS_THROUGH
#define RtlZeroMemory(Destination, Length)
#define IOCTL_CDRW_LOCK_DOOR
#define SCSIOP_RESERVE_TRACK
#define CDROM_DISK_AUDIO_TRACK
#define IOCTL_CDROM_READ_TOC
#define IOCTL_UDF_REGISTER_AUTOFORMAT
#define IOCTL_DISK_MEDIA_REMOVAL
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
NTSTATUS UDFLockVolume(IN PtrUDFIrpContext IrpContext, IN PIRP Irp, IN ULONG PID)
OSSTATUS UDFDoDismountSequence(IN PVCB Vcb, IN PPREVENT_MEDIA_REMOVAL_USER_IN Buf, IN BOOLEAN Eject)
VOID UDFDestroyZones(VOID)
OSSTATUS UDFVInit(IN PVCB Vcb)
#define MODE_PAGE_WRITE_PARAMS
#define SCSIOP_DOORUNLOCK
#define IOCTL_CDROM_READ_Q_CHANNEL
#define IOCTL_CDROM_EJECT_MEDIA
#define SCSIOP_MODE_SELECT10
#define IOCTL_CDRW_GET_WRITE_MODE
#define IOCTL_UDF_GET_FILE_ALLOCATION_MODE
#define SCSIOP_CLOSE_TRACK_SESSION
#define SCSIOP_START_STOP_UNIT
#define IOCTL_DISK_GET_DRIVE_GEOMETRY
struct _UDF_GET_VERSION_OUT UDF_GET_VERSION_OUT
#define SCSIOP_SEND_DVD_STRUCTURE
#define IOCTL_DISK_GET_PARTITION_INFO_EX
NTSTATUS UDFInvalidateVolumes(IN PtrUDFIrpContext IrpContext, IN PIRP Irp)
#define SCSIOP_MODE_SELECT
#define IOCTL_DVD_READ_STRUCTURE