73 ULONG OutputLength =
Stack->Parameters.DeviceIoControl.OutputBufferLength;
80 TRACE_(FLOPPY,
"DeviceIoctl called\n");
82 Irp->IoStatus.Information = 0;
90 INFO_(FLOPPY,
"IOCTL_DISK_GET_MEDIA_TYPES Called\n");
94 INFO_(FLOPPY,
"IOCTL_DISK_GET_MEDIA_TYPES: insufficient buffer; returning STATUS_INVALID_PARAMETER\n");
111 INFO_(FLOPPY,
"Ioctl: completing with STATUS_SUCCESS\n");
128 INFO_(FLOPPY,
"DeviceIoctl(): completing with STATUS_VERIFY_REQUIRED\n");
130 Irp->IoStatus.Information = 0;
145 WARN_(FLOPPY,
"DeviceIoctl(): unable to sense disk change; completing with STATUS_UNSUCCESSFUL\n");
147 Irp->IoStatus.Information = 0;
155 INFO_(FLOPPY,
"DeviceIoctl(): detected disk changed; signalling media change and completing\n");
178 INFO_(FLOPPY,
"IOCTL_DISK_IS_WRITABLE Called\n");
181 Irp->IoStatus.Information = 0;
185 WARN_(FLOPPY,
"IoctlDiskIsWritable(): unable to sense drive status\n");
193 WARN_(FLOPPY,
"IoctlDiskIsWritable(): unable to read drive status result\n");
201 INFO_(FLOPPY,
"IOCTL_DISK_IS_WRITABLE: disk is write protected\n");
210 INFO_(FLOPPY,
"IOCTL_DISK_CHECK_VERIFY called\n");
211 if (OutputLength != 0)
213 if (OutputLength <
sizeof(
ULONG))
216 Irp->IoStatus.Information = 0;
222 Irp->IoStatus.Information =
sizeof(
ULONG);
228 Irp->IoStatus.Information = 0;
234 INFO_(FLOPPY,
"IOCTL_DISK_GET_DRIVE_GEOMETRY Called\n");
249 ERR_(FLOPPY,
"Format called; not supported yet\n");
251 Irp->IoStatus.Information = 0;
255 INFO_(FLOPPY,
"IOCTL_DISK_GET_PARTITION_INFO Called; not supported by a floppy driver\n");
257 Irp->IoStatus.Information = 0;
264 Irp->IoStatus.Information = 0;
268 UniqueId =
Irp->AssociatedIrp.SystemBuffer;
289 Irp->IoStatus.Information = 0;
293 Name =
Irp->AssociatedIrp.SystemBuffer;
311 ERR_(FLOPPY,
"UNKNOWN IOCTL CODE: 0x%x\n",
Code);
313 Irp->IoStatus.Information = 0;
317 INFO_(FLOPPY,
"ioctl: completing with status 0x%x\n",
Irp->IoStatus.Status);
return STATUS_NOT_SUPPORTED
#define STATUS_NO_MEDIA_IN_DEVICE
VOID NTAPI StopMotor(PCONTROLLER_INFO ControllerInfo)
#define STATUS_INVALID_PARAMETER
NTKERNELAPI VOID NTAPI IoCsqInsertIrp(_Inout_ PIO_CSQ Csq, _Inout_ PIRP Irp, _Out_opt_ PIO_CSQ_IRP_CONTEXT Context)
Insert an IRP into the CSQ.
#define IOCTL_DISK_CHECK_VERIFY
#define STATUS_INVALID_DEVICE_REQUEST
#define IOCTL_DISK_IS_WRITABLE
#define STATUS_VERIFY_REQUIRED
struct _CONTROLLER_INFO * ControllerInfo
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_IO_DEVICE_ERROR
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
PDEVICE_OBJECT DeviceObject
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
_In_ PDEVICE_OBJECT DeviceObject
return STATUS_NOT_IMPLEMENTED
#define IOCTL_MOUNTDEV_QUERY_UNIQUE_ID
#define IOCTL_DISK_FORMAT_TRACKS
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
VOID NTAPI DeviceIoctlPassive(PDRIVE_INFO DriveInfo, PIRP Irp)
#define SR3_WRITE_PROTECT_STATUS_SIGNAL
struct _MOUNTDEV_NAME MOUNTDEV_NAME
#define IoCompleteRequest
#define SL_OVERRIDE_VERIFY_VOLUME
#define STATUS_MEDIA_WRITE_PROTECTED
#define IOCTL_DISK_GET_MEDIA_TYPES
NTSTATUS NTAPI HwSenseDriveStatus(PDRIVE_INFO DriveInfo)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
struct _MOUNTDEV_UNIQUE_ID MOUNTDEV_UNIQUE_ID
#define STATUS_UNSUCCESSFUL
#define IOCTL_DISK_GET_PARTITION_INFO
_In_ UCHAR _In_ UCHAR _In_ ULONG Code
#define memcpy(s1, s2, n)
DISK_GEOMETRY DiskGeometry
NTSTATUS NTAPI HwDiskChanged(PDRIVE_INFO DriveInfo, PBOOLEAN DiskChanged)
NTSTATUS NTAPI DeviceIoctl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
NTSTATUS NTAPI ResetChangeFlag(PDRIVE_INFO DriveInfo)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
struct _DISK_GEOMETRY DISK_GEOMETRY
VOID NTAPI StartMotor(PDRIVE_INFO DriveInfo)
#define STATUS_BUFFER_OVERFLOW
#define FIELD_OFFSET(t, f)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define IOCTL_DISK_FORMAT_TRACKS_EX
VOID NTAPI SignalMediaChanged(PDEVICE_OBJECT DeviceObject, PIRP Irp)
NTSTATUS NTAPI HwSenseDriveStatusResult(PCONTROLLER_INFO ControllerInfo, PUCHAR Status)
#define RtlCopyMemory(Destination, Source, Length)
#define IOCTL_DISK_GET_DRIVE_GEOMETRY
WCHAR DeviceNameBuffer[MAX_DEVICE_NAME]