31 #if !defined(__REACTOS__) || defined(_MSC_VER) 32 #pragma warning(disable:4214) // nonstandard extension used : bit field types other than int 33 #pragma warning(disable:4201) // nonstandard extension used : nameless struct/union 51 #define NonPagedPoolNx NonPagedPool 52 #define NonPagedPoolNxCacheAligned NonPagedPoolCacheAligned 55 #define MODE_DATA_SIZE 192 56 #define SCSI_FLOPPY_TIMEOUT 20 57 #define SFLOPPY_SRB_LIST_SIZE 4 65 #define NUMBER_OF_DRIVE_TYPES 7 66 #define DRIVE_TYPE_120M 4 //120MB Floptical 67 #define DRIVE_TYPE_NONE NUMBER_OF_DRIVE_TYPES 171 #define SECTORLENGTHCODE_TO_BYTESHIFT 7 220 #define NUMBER_OF_DRIVE_MEDIA_COMBINATIONS sizeof(DriveMediaConstants)/sizeof(DRIVE_MEDIA_CONSTANTS) 258 {0x000500, 0x0200,
TRUE},
259 {0x0005A0, 0x0200,
TRUE},
260 {0x000960, 0x0200,
TRUE},
261 {0x0004D0, 0x0400,
TRUE},
262 {0x000B40, 0x0200,
TRUE},
263 {0x000D20, 0x0200,
FALSE},
264 {0x010000, 0x0200,
TRUE},
265 {0x03C300, 0x0200,
TRUE},
266 {0x0600A4, 0x0200,
TRUE},
267 {0x072A00, 0x0200,
TRUE}
298 #define FLOPPY_CAPACITIES (sizeof(FloppyCapacities)/sizeof(FloppyCapacities[0])) 306 #pragma pack (push, 1) 478 #pragma alloc_text(INIT, DriverEntry) 480 #pragma alloc_text(PAGE, ScsiFlopUnload) 481 #pragma alloc_text(PAGE, ScsiFlopAddDevice) 482 #pragma alloc_text(PAGE, CreateFlopDeviceObject) 483 #pragma alloc_text(PAGE, ScsiFlopStartDevice) 484 #pragma alloc_text(PAGE, ScsiFlopRemoveDevice) 485 #pragma alloc_text(PAGE, IsFloppyDevice) 486 #pragma alloc_text(PAGE, DetermineMediaType) 487 #pragma alloc_text(PAGE, DetermineDriveType) 488 #pragma alloc_text(PAGE, FlCheckFormatParameters) 489 #pragma alloc_text(PAGE, FormatMedia) 490 #pragma alloc_text(PAGE, FlopticalFormatMedia) 491 #pragma alloc_text(PAGE, USBFlopGetMediaTypes) 492 #pragma alloc_text(PAGE, USBFlopFormatTracks) 594 #if !defined(__REACTOS__) || defined(_MSC_VER) 595 #pragma warning(push) 596 #pragma warning(disable:28152) 684 DebugPrint((3,
"CreateFlopDeviceObject: Enter routine\n"));
709 "\\Device\\Floppy%u",
723 DebugPrint((1,
"CreateFlopDeviceObjects: Can not create device\n"));
724 goto CreateFlopDeviceObjectExit;
796 goto CreateFlopDeviceObjectExit;
809 CreateFlopDeviceObjectExit:
818 #if !defined(__REACTOS__) || defined(_MSC_VER) 845 if (senseData ==
NULL) {
871 ClassInitializeMediaChangeDetection(fdoExtension,
878 timeOut = ClassQueryTimeOutRegistryValue(
Fdo);
880 fdoExtension->TimeOutValue = timeOut;
910 fdoExtension->DiskGeometry.MediaType =
Unknown;
922 (
LPGUID) &GUID_DEVINTERFACE_FLOPPY,
930 DebugPrint((1,
"ScsiFlopStartDevice: Unable to register device " 931 "interface for fdo %p [%08lx]\n",
939 #if !defined(__REACTOS__) || defined(_MSC_VER) 940 #pragma warning(suppress:6262) // This function uses 1096 bytes of stack which exceed default value of 1024 bytes used by Code Analysis for flagging as warning 958 WCHAR ntNameBuffer[256];
961 WCHAR arcNameBuffer[256];
979 sizeof(ntNameBuffer),
980 L"\\Device\\Floppy%u",
1001 sizeof(scsiAddress),
1025 sizeof(arcNameBuffer),
1026 L"\\ArcName\\scsi(%u)disk(%u)fdisk(%u)",
1047 sizeof(arcNameBuffer),
1048 L"\\ArcName\\multi(%u)disk(%u)fdisk(%u)",
1071 DebugPrint((1,
"ScsiFlopStartDevice: Unable to set device " 1072 "interface state to TRUE for fdo %p " 1152 ULONG outputBufferLength;
1163 Irp->IoStatus.Information = 0;
1205 if (irpStack->
Parameters.DeviceIoControl.InputBufferLength <
1330 DebugPrint((3,
"ScsiDeviceIoControl: Get drive geometry\n"));
1344 if ( irpStack->
Parameters.DeviceIoControl.OutputBufferLength <
1355 Irp->IoStatus.Information = 0;
1395 outputBufferLength =
1396 irpStack->
Parameters.DeviceIoControl.OutputBufferLength;
1418 ( highestDriveMediaType - lowestDriveMediaType + 1 ) ) ) {
1428 ( outputBufferLength /
1434 for (
i = (
UCHAR)lowestDriveMediaType;
i <= (
UCHAR)highestDriveMediaType;
i++ ) {
1533 if (modeData ==
NULL) {
1577 DebugPrint((3,
"ScsiIoDeviceControl: Unsupported device IOCTL\n"));
1657 if (modeData ==
NULL) {
1715 if (pageData !=
NULL) {
1717 DebugPrint((1,
"ScsiFlop: Flexible disk page found, This is a floppy.\n"));
1843 if (readData ==
NULL) {
1858 srb->CdbLength = 10;
1861 srb->Cdb[8] = (
UCHAR) 1;
1881 char *pchar = (
char *)readData;
1926 UCHAR numberOfHeads;
1927 UCHAR sectorsPerTrack;
1939 if (modeData ==
NULL) {
1981 if ((pageData !=
NULL) &&
1982 (pageData->PageLength + 2 >=
1989 numberOfHeads = pageData->NumberOfHeads;
1990 maximumTrack = pageData->NumberOfCylinders[1];
1991 maximumTrack |= pageData->NumberOfCylinders[0] << 8;
1992 sectorsPerTrack = pageData->SectorsPerTrack;
2038 if (!applyFix && maximumTrack >= 0x0100) {
2122 LowestDriveMediaType ) ) {
2131 #if !defined(__REACTOS__) || defined(_MSC_VER) 2132 #pragma warning(push) 2133 #pragma warning(disable:33010) // 33010: Enum used as array index may be negative 2143 if ( ( FormatParameters->StartHeadNumber >
2145 ( FormatParameters->EndHeadNumber >
2147 ( FormatParameters->StartCylinderNumber >
2149 ( FormatParameters->EndCylinderNumber >
2151 ( FormatParameters->EndCylinderNumber <
2152 FormatParameters->StartCylinderNumber ) ) {
2161 #if !defined(__REACTOS__) || defined(_MSC_VER) 2162 #pragma warning(pop) 2204 if (modeData ==
NULL) {
2230 if ((pageData ==
NULL) ||
2319 srb->
Cdb[1] |= 0x10;
2442 largeInt.QuadPart = 1;
2483 struct _START_STOP *startStopCdb;
2485 DebugPrint((2,
"Sending SCSIOP_START_STOP_UNIT\n"));
2494 #if (NTDDI_VERSION >= NTDDI_WIN8) 2506 startStopCdb = (
struct _START_STOP *)srb->Cdb;
2509 startStopCdb->Start = 1;
2545 DebugPrint((1,
"ScsiFlopProcessError: Reinitializing the floppy.\n"));
2559 if (
SUCCEEDED(ULongAdd(tmpSize, (
ULONG) alignment, &sizeNeeded))) {
2581 #if (NTDDI_VERSION >= NTDDI_WIN8) 2593 srb->DataTransferLength = 0x2a;
2609 cdb = (
PCDB)srb->Cdb;
2611 cdb->MODE_SENSE.PageCode = 0x2e;
2612 cdb->MODE_SENSE.AllocationLength = 0x2a;
2640 srb->DataTransferLength,
2663 srb->OriginalRequest =
irp;
2669 irpStack->Parameters.Others.Argument1 = (
PVOID)srb;
2864 DebugPrint((1,
"ScsiFlopRemoveDevice: Unable to set device " 2865 "interface state to FALSE for fdo %p " 2932 ULONG ioControlCode;
2935 ULONG outputBufferLength;
2938 ULONG dataTransferLength;
2939 struct _READ_FORMATTED_CAPACITIES *cdb;
2953 ioControlCode = irpStack->
Parameters.DeviceIoControl.IoControlCode;
2955 Irp->IoStatus.Information = 0;
2959 outputBufferLength = irpStack->
Parameters.DeviceIoControl.OutputBufferLength;
2969 outputBufferEnd = outputBuffer +
2979 outputBuffer =
NULL;
2981 outputBufferEnd =
NULL;
2983 outputBufferLength = 0;
3025 ASSERT(dataTransferLength < 0x100);
3041 srb->
CdbLength =
sizeof(
struct _READ_FORMATTED_CAPACITIES);
3045 cdb = (
struct _READ_FORMATTED_CAPACITIES *)srb->
Cdb;
3048 cdb->AllocationLength[1] = (
UCHAR)dataTransferLength;
3073 ULONG NumberOfBlocks;
3077 LONG currentGeometry;
3102 currentGeometry = -1;
3132 capacityMatches[
j] =
TRUE;
3139 currentGeometry =
j;
3157 capacityMatches[
j] =
TRUE;
3160 currentGeometry =
j;
3175 if (currentGeometry != -1)
3192 DebugPrint((2,
"geometry is: %3d %2d %d %2d %4d %2d %08X\n",
3227 if (outputBuffer < outputBufferEnd)
3233 DebugPrint((2,
"geometry : %3d %2d %d %2d %4d\n",
3312 if (irpStack->
Parameters.DeviceIoControl.InputBufferLength <
3337 if (geometry ==
NULL)
3389 if (parameterList ==
NULL)
3427 cylinder <= formatParameters->EndCylinderNumber;
3431 head <= formatParameters->EndHeadNumber;
3477 DebugPrint((2,
"geometry was: %3d %2d %d %2d %4d %2d %08X\n",
3499 DebugPrint((2,
"geometry is: %3d %2d %d %2d %4d %2d %08X\n",
#define DO_DEVICE_INITIALIZING
#define STATUS_OBJECT_NAME_COLLISION
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define SRB_FLAGS_DISABLE_AUTOSENSE
#define IRP_MN_REMOVE_DEVICE
#define STATUS_INSUFFICIENT_RESOURCES
#define IOCTL_SCSI_GET_ADDRESS
#define ClassAcquireRemoveLock(devobj, tag)
DRIVER_ADD_DEVICE ScsiFlopAddDevice
#define FLOPPY_CAPACITIES
struct _MODE_PARAMETER_HEADER MODE_PARAMETER_HEADER
#define STATUS_INFO_LENGTH_MISMATCH
_In_ PSCSI_REQUEST_BLOCK Srb
#define IRP_MJ_FLUSH_BUFFERS
PIRP NTAPI IoBuildSynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
struct outqueuenode * head
PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID)
DISK_GEOMETRY DiskGeometry
#define SRB_STATUS_AUTOSENSE_VALID
#define SCSI_FLOPPY_TIMEOUT
#define SCSIOP_MODE_SENSE
#define UNREFERENCED_PARAMETER(P)
#define STATUS_INVALID_PARAMETER
#define MODE_DSP_WRITE_PROTECT
struct _FORMAT_UNIT_PARAMETER_LIST FORMAT_UNIT_PARAMETER_LIST
GLuint GLuint GLsizei count
#define SFLOPPY_SRB_LIST_SIZE
#define IoIsErrorUserInduced(Status)
#define STATUS_OBJECT_NAME_EXISTS
COMMON_DEVICE_EXTENSION CommonExtension
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
NTSTATUS ScsiFlopStartDevice(IN PDEVICE_OBJECT Fdo)
DRIVER_UNLOAD ScsiFlopUnload
#define MODE_SENSE_RETURN_ALL
#define STATUS_INVALID_DEVICE_REQUEST
#define IOCTL_DISK_IS_WRITABLE
struct _DRIVE_MEDIA_LIMITS DRIVE_MEDIA_LIMITS
NTSTATUS USBFlopFormatTracks(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
BOOLEAN IsFloppyDevice(PDEVICE_OBJECT DeviceObject)
enum _MEDIA_TYPE MEDIA_TYPE
DRIVER_INITIALIZE DriverEntry
_In_ ULONG _In_ ULONG _In_ ULONG NumberOfHeads
struct _CDB::_CDB10 CDB10
#define SRB_FLAGS_DATA_IN
#define STATUS_VERIFY_REQUIRED
#define SCSI_SENSE_NOT_READY
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
#define SRB_STATUS(Status)
#define SENSE_BUFFER_SIZE
NTSTATUS ScsiFlopReadWriteVerification(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
FORMATTED_CAPACITY FloppyCapacities[]
#define STATUS_NONEXISTENT_SECTOR
struct _DRIVE_MEDIA_LIMITS * PDRIVE_MEDIA_LIMITS
#define RtlMoveMemory(Destination, Source, Length)
#define STATUS_BUFFER_TOO_SMALL
_Must_inspect_result_ NTSTATUS NTAPI ClassReadDriveCapacity(_In_ PDEVICE_OBJECT Fdo)
#define STATUS_UNRECOGNIZED_MEDIA
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
#define STATUS_IO_DEVICE_ERROR
#define SCSI_SENSE_MEDIUM_ERROR
PDEVICE_OBJECT DeviceObject
_In_ PDEVICE_OBJECT DeviceObject
VOID ScsiFlopProcessError(PDEVICE_OBJECT DeviceObject, PSCSI_REQUEST_BLOCK Srb, NTSTATUS *Status, BOOLEAN *Retry)
#define IOCTL_DISK_FORMAT_TRACKS
struct _CDB12FORMAT * PCDB12FORMAT
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_In_ ULONG _In_ ULONG SectorsPerTrack
#define IRP_MN_QUERY_REMOVE_DEVICE
struct _CLASS_INIT_DATA CLASS_INIT_DATA
#define IOCTL_DISK_VERIFY
C_ASSERT((sizeof(FloppyGeometries)/sizeof(FloppyGeometries[0]))==FLOPPY_CAPACITIES)
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_ WDFDRIVER _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT Pdo
#define FILE_REMOVABLE_MEDIA
struct _FUNCTIONAL_DEVICE_EXTENSION FUNCTIONAL_DEVICE_EXTENSION
PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice)
#define MODE_FD_SINGLE_SIDE
GLenum GLuint GLenum GLsizei length
struct _DISK_DATA DISK_DATA
VOID NTAPI ClassReleaseRemoveLock(_In_ PDEVICE_OBJECT DeviceObject, _In_opt_ PIRP Tag)
enum _DRIVE_MEDIA_TYPE DRIVE_MEDIA_TYPE
#define offsetof(TYPE, MEMBER)
#define SCSIOP_READ_FORMATTED_CAPACITY
#define SL_OVERRIDE_VERIFY_VOLUME
#define STATUS_MEDIA_WRITE_PROTECTED
#define IOCTL_DISK_GET_MEDIA_TYPES
struct _FORMATTED_CAPACITY_LIST * PFORMATTED_CAPACITY_LIST
NTSTATUS NTAPI IoSetDeviceInterfaceState(IN PUNICODE_STRING SymbolicLinkName, IN BOOLEAN Enable)
#define NUMBER_OF_DRIVE_MEDIA_COMBINATIONS
Windows helper functions for integer overflow prevention.
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
#define TEST_FLAG(Flags, Bit)
NTSTRSAFEVAPI RtlStringCbPrintfA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,...)
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 GLint GLint j
BOOLEAN FindScsiFlops(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath, IN PCLASS_INIT_DATA InitializationData, IN PDEVICE_OBJECT PortDeviceObject, IN ULONG PortNumber)
LARGE_INTEGER StartingOffset
struct _CDB12FORMAT CDB12FORMAT
#define DIRECT_ACCESS_DEVICE
DRIVE_MEDIA_CONSTANTS DriveMediaConstants[]
DISK_GEOMETRY FloppyGeometries[]
NTSTATUS NTAPI ClassSendSrbSynchronous(_In_ PDEVICE_OBJECT Fdo, _Inout_ PSCSI_REQUEST_BLOCK _Srb, _In_reads_bytes_opt_(BufferLength) PVOID BufferAddress, _In_ ULONG BufferLength, _In_ BOOLEAN WriteToDevice)
struct _DEFECT_LIST_HEADER DEFECT_LIST_HEADER
#define NT_SUCCESS(StatCode)
#define STATUS_NO_SUCH_DEVICE
PVOID NTAPI ClassFindModePage(_In_reads_bytes_(Length) PCHAR ModeSenseBuffer, _In_ ULONG Length, _In_ UCHAR PageMode, _In_ BOOLEAN Use6Byte)
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTATUS NTAPI ClassAsynchronousCompletion(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
PSTORAGE_ADAPTER_DESCRIPTOR AdapterDescriptor
PSTORAGE_DEVICE_DESCRIPTOR DeviceDescriptor
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
PIRP NTAPI IoBuildAsynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PIO_STATUS_BLOCK IoStatusBlock)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define SRB_STATUS_DATA_OVERRUN
#define NUMBER_OF_DRIVE_TYPES
UCHAR NumberOfCylinders[2]
#define STATUS_UNSUCCESSFUL
_Must_inspect_result_ _In_ WDFDEVICE Fdo
DRIVE_MEDIA_LIMITS DriveMediaLimits[NUMBER_OF_DRIVE_TYPES]
NTSTATUS DetermineMediaType(PDEVICE_OBJECT DeviceObject)
NTSTATUS ScsiFlopInitDevice(IN PDEVICE_OBJECT Fdo)
UNICODE_STRING FloppyInterfaceString
struct _DISK_GEOMETRY * PDISK_GEOMETRY
#define IOCTL_DISK_GET_PARTITION_INFO
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
_In_ PVOID _In_ PCLASS_INIT_DATA InitializationData
#define ExAllocatePool(type, size)
NTSTATUS ScsiFlopStopDevice(IN PDEVICE_OBJECT Fdo, IN UCHAR Type)
#define SCSIOP_FORMAT_UNIT
NTSTATUS FlopticalFormatMedia(PDEVICE_OBJECT DeviceObject, PFORMAT_PARAMETERS Format)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
struct _FORMAT_UNIT_PARAMETER_LIST * PFORMAT_UNIT_PARAMETER_LIST
MxDeviceObject deviceObject
NTSTATUS ScsiFlopRemoveDevice(IN PDEVICE_OBJECT Fdo, IN UCHAR Type)
struct _DRIVE_MEDIA_CONSTANTS DRIVE_MEDIA_CONSTANTS
ULONG NTAPI DebugPrint(IN PSTRING DebugString, IN ULONG ComponentId, IN ULONG Level)
struct _FORMAT_PARAMETERS * PFORMAT_PARAMETERS
#define SCSI_SENSEQ_INIT_COMMAND_REQUIRED
NTSTATUS ScsiFlopDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
struct _DISK_GEOMETRY DISK_GEOMETRY
NTSTATUS NTAPI IoRegisterDeviceInterface(IN PDEVICE_OBJECT PhysicalDeviceObject, IN CONST GUID *InterfaceClassGuid, IN PUNICODE_STRING ReferenceString OPTIONAL, OUT PUNICODE_STRING SymbolicLinkName)
#define KeInitializeEvent(pEvt, foo, foo2)
#define STATUS_BUFFER_OVERFLOW
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
struct _FORMATTED_CAPACITY_LIST FORMATTED_CAPACITY_LIST
NTSTATUS USBFlopGetMediaTypes(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _DRIVE_MEDIA_CONSTANTS * PDRIVE_MEDIA_CONSTANTS
#define IoAssignArcName(_ArcName, _DeviceName)
#define SCSI_REQUEST_BLOCK_SIZE
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID NTAPI KeRaiseIrql(KIRQL NewIrql, PKIRQL OldIrql)
IO_COMPLETION_ROUTINE * PIO_COMPLETION_ROUTINE
struct _FORMATTED_CAPACITY_DESCRIPTOR FORMATTED_CAPACITY_DESCRIPTOR
PIRP NTAPI IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
NTSTATUS CreateFlopDeviceObject(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PortDeviceObject, IN ULONG DeviceCount)
struct _DISK_DATA * PDISK_DATA
ULONG NTAPI ClassModeSense(_In_ PDEVICE_OBJECT Fdo, _In_reads_bytes_(Length) PCHAR ModeSenseBuffer, _In_ ULONG Length, _In_ UCHAR PageMode)
#define MODE_FD_MAXIMUM_TYPE
#define SRB_FUNCTION_EXECUTE_SCSI
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
VOID NTAPI IoSetHardErrorOrVerifyDevice(IN PIRP Irp, IN PDEVICE_OBJECT DeviceObject)
ULONG DetermineDriveType(PDEVICE_OBJECT DeviceObject)
struct _DEFECT_LIST_HEADER * PDEFECT_LIST_HEADER
SCSIPORT_API NTSTATUS NTAPI ClassSendSrbAsynchronous(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PSCSI_REQUEST_BLOCK Srb, _In_ PIRP Irp, _In_reads_bytes_opt_(BufferLength) __drv_aliasesMem PVOID BufferAddress, _In_ ULONG BufferLength, _In_ BOOLEAN WriteToDevice)
VOID NTAPI KeLowerIrql(KIRQL NewIrql)
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
#define FILE_FLOPPY_DISKETTE
VOID NTAPI ClassCompleteRequest(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ CCHAR PriorityBoost)
static SERVICE_STATUS status
NTSTATUS FormatMedia(PDEVICE_OBJECT DeviceObject, MEDIA_TYPE MediaType)
BOOLEAN FlCheckFormatParameters(IN PDEVICE_OBJECT DeviceObject, IN PFORMAT_PARAMETERS FormatParameters)
#define SCSIOP_START_STOP_UNIT
#define IOCTL_DISK_GET_DRIVE_GEOMETRY
struct _FORMATTED_CAPACITY FORMATTED_CAPACITY
#define SCSI_SENSE_UNIT_ATTENTION
#define RtlCompareMemory(s1, s2, l)
#define MODE_PAGE_FLEXIBILE
#define SCSI_ADSENSE_MEDIUM_CHANGED
static DRIVER_DISPATCH ClassDeviceControl
#define SCSIOP_MODE_SELECT
struct _FORMATTED_CAPACITY * PFORMATTED_CAPACITY