118 WARN_(FLOPPY,
"cleanup: warning: HwPowerOff failed\n");
150 TRACE_(FLOPPY,
"MotorStopDpcFunc called\n");
178 TRACE_(FLOPPY,
"StartMotor called\n");
183 INFO_(FLOPPY,
"StartMotor: motor turner-offer is already running; waiting for it\n");
185 INFO_(FLOPPY,
"StartMotor: wait satisfied\n");
192 WARN_(FLOPPY,
"StartMotor(): warning: HwTurnOnMotor failed\n");
213 TRACE_(FLOPPY,
"StopMotor called\n");
272 TRACE_(FLOPPY,
"CreateClose called\n");
308 WARN_(FLOPPY,
"FIXME: UN-HARDCODE DATA RATE\n");
311 WARN_(FLOPPY,
"Recalibrate: HwSetDataRate failed\n");
323 for(
i = 0;
i < 2;
i++)
329 WARN_(FLOPPY,
"Recalibrate: HwRecalibrate returned error\n");
339 WARN_(FLOPPY,
"Recalibrate: HwRecalibrateResult returned error\n");
375 TRACE_(FLOPPY,
"ResetChangeFlag called\n");
389 WARN_(FLOPPY,
"ResetChangeFlag(): HwSeek failed; returning STATUS_IO_DEVICE_ERROR\n");
398 WARN_(FLOPPY,
"ResetChangeFlag(): HwSenseInterruptStatus failed; bailing out\n");
406 WARN_(FLOPPY,
"ResetChangeFlag(): HwSeek failed; returning STATUS_IO_DEVICE_ERROR\n");
415 WARN_(FLOPPY,
"ResetChangeFlag(): HwSenseInterruptStatus #2 failed; bailing\n");
423 WARN_(FLOPPY,
"ResetChangeFlag(): HwDiskChanged failed; returning STATUS_IO_DEVICE_ERROR\n");
449 TRACE_(FLOPPY,
"unloading\n");
462 ULONG ControllerNumber,
465 ULONG PeripheralNumber,
519 TRACE_(FLOPPY,
"ConfigCallback called with ControllerNumber %d\n", ControllerNumber);
550 WARN_(FLOPPY,
"HalTranslateBusAddress failed; returning\n");
642 TRACE_(FLOPPY,
"ISR called\n");
684 TRACE_(FLOPPY,
"DpcForIsr called\n");
703 UCHAR HeadUnloadTime;
705 UCHAR ControllerVersion;
710 TRACE_(FLOPPY,
"InitController called with Controller 0x%p\n", ControllerInfo);
715 WARN_(FLOPPY,
"InitController: unable to configure controller\n");
727 WARN_(FLOPPY,
"InitController: unable to reset controller\n");
731 INFO_(FLOPPY,
"InitController: waiting for initial interrupt\n");
739 INFO_(FLOPPY,
"InitController: Sensing interrupt %d\n",
i);
743 WARN_(FLOPPY,
"InitController: Unable to clear interrupt 0x%x\n",
i);
748 INFO_(FLOPPY,
"InitController: done sensing interrupts\n");
756 WARN_(FLOPPY,
"InitController: unable to set up implied seek\n");
761 INFO_(FLOPPY,
"InitController: implied seeks set!\n");
788 INFO_(FLOPPY,
"InitController: enhanced version not supported; disabling implied seeks\n");
794 WARN_(FLOPPY,
"FIXME: Figure out speed\n");
799 INFO_(FLOPPY,
"InitController: setting data rate\n");
804 WARN_(FLOPPY,
"InitController: unable to set data rate\n");
808 INFO_(FLOPPY,
"InitController: issuing specify command to controller\n");
813 WARN_(FLOPPY,
"InitController: unable to specify options\n");
829 INFO_(FLOPPY,
"InitController: recalibrating drive 0x%x on controller 0x%p\n",
i, ControllerInfo);
833 INFO_(FLOPPY,
"InitController: done initializing; returning STATUS_SUCCESS\n");
869 WARN_(FLOPPY,
"ReportToMountMgr: Can't get MountMgr pointers %lx\n",
Status);
881 WARN_(FLOPPY,
"ReportToMountMgr: Allocation of mountTarget failed\n");
906 WARN_(FLOPPY,
"ReportToMountMgr: Allocation of irp failed\n");
922 INFO_(FLOPPY,
"Reported to the MountMgr: %lx\n",
Status);
975 WARN_(FLOPPY,
"AddControllers: failed to get controller info from registry\n");
993 INFO_(FLOPPY,
"Connecting interrupt %d to controller%d (object 0x%p)\n",
gControllerInfo[
i].MappedVector,
1001 WARN_(FLOPPY,
"AddControllers: unable to connect interrupt\n");
1020 WARN_(FLOPPY,
"AddControllers: unable to allocate an adapter object\n");
1029 WARN_(FLOPPY,
"AddControllers(): Unable to set up controller %d - initialization failed\n",
i);
1045 INFO_(FLOPPY,
"AddControllers(): Configuring drive %d on controller %d\n",
i,
j);
1061 DriveNumber = (
UCHAR)(
i*4 +
j);
1070 WARN_(FLOPPY,
"AddControllers: unable to register a Device object\n");
1076 INFO_(FLOPPY,
"AddControllers: New device: %S (0x%p)\n",
1121 INFO_(FLOPPY,
"AddControllers: --------------------------------------------> finished adding controllers\n");
1142 TRACE_(FLOPPY,
"SignalMediaChanged called\n");
1150 Irp->IoStatus.Information = 0;
1157 Irp->IoStatus.Information = 0;
1196 INFO_(FLOPPY,
"QueueThread terminating\n");
1200 INFO_(FLOPPY,
"QueueThread: servicing an IRP\n");
1207 INFO_(FLOPPY,
"QueueThread: IRP queue empty\n");
1218 switch(
Stack->MajorFunction)
1230 WARN_(FLOPPY,
"QueueThread(): Unrecognized irp: mj: 0x%x\n",
Stack->MajorFunction);
1232 Irp->IoStatus.Information = 0;
1312 WARN_(FLOPPY,
"Unable to create system thread; failing init\n");
1318 WARN_(FLOPPY,
"Unable to reference returned thread handle; failing init\n");
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
DRIVER_INITIALIZE DriverEntry
NTKERNELAPI NTSTATUS NTAPI IoCsqInitialize(_Out_ PIO_CSQ Csq, _In_ PIO_CSQ_INSERT_IRP CsqInsertIrp, _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp, _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock, _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp)
Set up a CSQ struct to initialize the queue.
NTKERNELAPI PIRP NTAPI IoCsqRemoveNextIrp(_Inout_ PIO_CSQ Csq, _In_opt_ PVOID PeekContext)
IoCsqRemoveNextIrp - Removes the next IRP from the queue.
KSEMAPHORE QueueSemaphore
#define STATUS_NOT_SUPPORTED
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
static const WCHAR Cleanup[]
BOOLEAN NTAPI KeInsertQueueDpc(IN PKDPC Dpc, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
struct _CONTROLLER_INFO * PCONTROLLER_INFO
#define MAX_DRIVES_PER_CONTROLLER
NTSTATUS NTAPI HwRecalibrateResult(PCONTROLLER_INFO ControllerInfo)
NTSTATUS NTAPI HwTurnOnMotor(PDRIVE_INFO DriveInfo)
NTSTATUS NTAPI HwConfigure(PCONTROLLER_INFO ControllerInfo, BOOLEAN EIS, BOOLEAN EFIFO, BOOLEAN POLL, UCHAR FIFOTHR, UCHAR PRETRK)
NTSTATUS NTAPI HwGetVersion(PCONTROLLER_INFO ControllerInfo)
NTSTATUS NTAPI HwSeek(PDRIVE_INFO DriveInfo, UCHAR Cylinder)
NTSTATUS NTAPI HwSetDataRate(PCONTROLLER_INFO ControllerInfo, UCHAR DataRate)
NTSTATUS NTAPI HwReset(PCONTROLLER_INFO ControllerInfo)
NTSTATUS NTAPI HwRecalibrate(PDRIVE_INFO DriveInfo)
NTSTATUS NTAPI HwSpecify(PCONTROLLER_INFO ControllerInfo, UCHAR HeadLoadTime, UCHAR HeadUnloadTime, UCHAR StepRateTime, BOOLEAN NonDma)
NTSTATUS NTAPI HwSenseInterruptStatus(PCONTROLLER_INFO ControllerInfo)
NTSTATUS NTAPI HwDiskChanged(PDRIVE_INFO DriveInfo, PBOOLEAN DiskChanged)
NTSTATUS NTAPI HwTurnOffMotor(PCONTROLLER_INFO ControllerInfo)
NTSTATUS NTAPI HwPowerOff(PCONTROLLER_INFO ControllerInfo)
#define DRSR_DSEL_500KBPS
VOID NTAPI DeviceIoctlPassive(PDRIVE_INFO DriveInfo, PIRP Irp)
DRIVER_DISPATCH DeviceIoctl
VOID NTAPI ReadWritePassive(PDRIVE_INFO DriveInfo, PIRP Irp)
NTSTATUS NTAPI RWDetermineMediaType(PDRIVE_INFO DriveInfo, BOOLEAN OneShot)
NTHALAPI ULONG NTAPI HalGetInterruptVector(INTERFACE_TYPE, ULONG, ULONG, ULONG, PKIRQL, PKAFFINITY)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
struct _DEVICE_OBJECT * PDEVICE_OBJECT
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeSetEvent(pEvt, foo, foo2)
#define KeGetCurrentIrql()
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
VOID NTAPI KeClearEvent(IN PKEVENT Event)
LONG NTAPI KeReadStateEvent(IN PKEVENT Event)
#define ExAllocatePool(type, size)
static NTSTATUS NTAPI InitController(PCONTROLLER_INFO ControllerInfo)
static VOID NTAPI QueueThread(PVOID Context)
static NTSTATUS NTAPI Recalibrate(PDRIVE_INFO DriveInfo)
static VOID NTAPI Unload(PDRIVER_OBJECT DriverObject)
NTSTATUS NTAPI WaitForControllerInterrupt(PCONTROLLER_INFO ControllerInfo, PLARGE_INTEGER Timeout)
static CONTROLLER_INFO gControllerInfo[MAX_CONTROLLERS]
static PVOID QueueThreadObject
NTSTATUS NTAPI ResetChangeFlag(PDRIVE_INFO DriveInfo)
static DRIVER_DISPATCH CreateClose
NTSYSAPI NTSTATUS NTAPI ZwWaitForSingleObject(_In_ HANDLE Handle, _In_ BOOLEAN Alertable, _In_opt_ PLARGE_INTEGER Timeout)
static BOOLEAN NTAPI AddControllers(PDRIVER_OBJECT DriverObject)
VOID NTAPI SignalMediaChanged(PDEVICE_OBJECT DeviceObject, PIRP Irp)
static NTSTATUS NTAPI ConfigCallback(PVOID Context, PUNICODE_STRING PathName, INTERFACE_TYPE BusType, ULONG BusNumber, PKEY_VALUE_FULL_INFORMATION *BusInformation, CONFIGURATION_TYPE ControllerType, ULONG ControllerNumber, PKEY_VALUE_FULL_INFORMATION *ControllerInformation, CONFIGURATION_TYPE PeripheralType, ULONG PeripheralNumber, PKEY_VALUE_FULL_INFORMATION *PeripheralInformation)
static VOID NTAPI MotorStopDpcFunc(PKDPC UnusedDpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2)
static ULONG gNumberOfControllers
VOID NTAPI DpcForIsr(PKDPC UnusedDpc, PVOID Context, PVOID SystemArgument1, PVOID SystemArgument2)
static KEVENT QueueThreadTerminate
VOID NTAPI StartMotor(PDRIVE_INFO DriveInfo)
VOID NTAPI StopMotor(PCONTROLLER_INFO ControllerInfo)
static VOID NTAPI ReportToMountMgr(UCHAR ControlerId, UCHAR DriveId)
static BOOLEAN NTAPI Isr(PKINTERRUPT Interrupt, PVOID ServiceContext)
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
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 NTAPI HalTranslateBusAddress(IN INTERFACE_TYPE InterfaceType, IN ULONG BusNumber, IN PHYSICAL_ADDRESS BusAddress, IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress)
PADAPTER_OBJECT NTAPI HalGetAdapter(IN PDEVICE_DESCRIPTION DeviceDescription, OUT PULONG NumberOfMapRegisters)
PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID)
Returns a pointer to the I/O manager's global configuration information structure.
NTSTATUS NTAPI IoQueryDeviceDescription(_In_opt_ PINTERFACE_TYPE BusType, _In_opt_ PULONG BusNumber, _In_opt_ PCONFIGURATION_TYPE ControllerType, _In_opt_ PULONG ControllerNumber, _In_opt_ PCONFIGURATION_TYPE PeripheralType, _In_opt_ PULONG PeripheralNumber, _In_ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, _In_opt_ PVOID Context)
Reads and returns Hardware information from the appropriate hardware registry key.
PVOID NTAPI MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, IN SIZE_T NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType)
#define MOUNTMGR_DEVICE_NAME
#define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION
#define _swprintf(buf, format,...)
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
_In_ PVOID _In_ BOOLEAN Alertable
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
DRIVER_DISPATCH(nfs41_FsdDispatch)
#define THREAD_ALL_ACCESS
#define FILE_READ_ATTRIBUTES
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define STANDARD_RIGHTS_ALL
#define FILE_FLOPPY_DISKETTE
#define FILE_REMOVABLE_MEDIA
#define UNREFERENCED_PARAMETER(P)
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)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
#define IoCompleteRequest
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)
VOID NTAPI IoDisconnectInterrupt(PKINTERRUPT InterruptObject)
NTSTATUS NTAPI IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, IN PKSERVICE_ROUTINE ServiceRoutine, IN PVOID ServiceContext, IN PKSPIN_LOCK SpinLock, IN ULONG Vector, IN KIRQL Irql, IN KIRQL SynchronizeIrql, IN KINTERRUPT_MODE InterruptMode, IN BOOLEAN ShareVector, IN KAFFINITY ProcessorEnableMask, IN BOOLEAN FloatingSave)
VOID NTAPI IoSetHardErrorOrVerifyDevice(IN PIRP Irp, IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI KeWaitForMultipleObjects(IN ULONG Count, IN PVOID Object[], IN WAIT_TYPE WaitType, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL, OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL)
POBJECT_TYPE PsThreadType
NTSTATUS NTAPI PsCreateSystemThread(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN PCLIENT_ID ClientId, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext)
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 IRP_MJ_DEVICE_CONTROL
DRIVER_DISPATCH ReadWrite
struct _CM_FULL_RESOURCE_DESCRIPTOR * PCM_FULL_RESOURCE_DESCRIPTOR
#define CmResourceTypeDma
#define CmResourceTypeDeviceSpecific
enum _INTERFACE_TYPE INTERFACE_TYPE
#define CmResourceTypePort
#define CM_RESOURCE_INTERRUPT_LATCHED
#define CmResourceTypeInterrupt
enum _CONFIGURATION_TYPE CONFIGURATION_TYPE
VOID NTAPI KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, IN LONG Count, IN LONG Limit)
UCHAR StepRateHeadUnloadTime
UCHAR FormatFillCharacter
CM_PARTIAL_RESOURCE_LIST PartialResourceList
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@384::@390 Dma
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@384::@387 Interrupt
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@384 u
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@384::@386 Port
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
PADAPTER_OBJECT AdapterObject
KINTERRUPT_MODE InterruptMode
INTERFACE_TYPE InterfaceType
DRIVE_INFO DriveInfo[MAX_DRIVES_PER_CONTROLLER]
PKINTERRUPT InterruptObject
struct _CONTROLLER_INFO * ControllerInfo
PDEVICE_OBJECT DeviceObject
CM_FLOPPY_DEVICE_DATA FloppyDeviceData
WCHAR DeviceNameBuffer[MAX_DEVICE_NAME]
DISK_GEOMETRY DiskGeometry
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
BOOLEAN NTAPI KeCancelTimer(IN OUT PKTIMER Timer)
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
#define RtlCopyMemory(Destination, Source, Length)
#define STATUS_IO_DEVICE_ERROR
#define STATUS_NO_SUCH_DEVICE
#define STATUS_UNSUCCESSFUL
#define STATUS_NO_MEDIA_IN_DEVICE
#define STATUS_VERIFY_REQUIRED
#define STATUS_INSUFFICIENT_RESOURCES
static int Link(const char **args)
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_In_ WDFDEVICE _In_ PPNP_BUS_INFORMATION BusInformation
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID InterfaceType
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
struct _CM_FLOPPY_DEVICE_DATA * PCM_FLOPPY_DEVICE_DATA
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE BusType
#define IoIsErrorUserInduced(Status)
_In_ PIO_CSQ_INSERT_IRP _In_ PIO_CSQ_REMOVE_IRP _In_ PIO_CSQ_PEEK_NEXT_IRP _In_ PIO_CSQ_ACQUIRE_LOCK _In_ PIO_CSQ_RELEASE_LOCK _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
_In_ PIO_CSQ_INSERT_IRP CsqInsertIrp
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG _In_ KIRQL _In_ KIRQL _In_ KINTERRUPT_MODE InterruptMode
FORCEINLINE VOID IoInitializeDpcRequest(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIO_DPC_ROUTINE DpcRoutine)
#define IoDeassignArcName
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG _Out_ PPHYSICAL_ADDRESS TranslatedAddress
#define IoAssignArcName(_ArcName, _DeviceName)
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG AddressSpace
_In_ PIO_CSQ_INSERT_IRP _In_ PIO_CSQ_REMOVE_IRP _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
_In_ PIO_CSQ_INSERT_IRP _In_ PIO_CSQ_REMOVE_IRP _In_ PIO_CSQ_PEEK_NEXT_IRP _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID ServiceContext
_In_ PIO_CSQ_INSERT_IRP _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp
_In_ PIO_CSQ_INSERT_IRP _In_ PIO_CSQ_REMOVE_IRP _In_ PIO_CSQ_PEEK_NEXT_IRP _In_ PIO_CSQ_ACQUIRE_LOCK _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock
#define DEVICE_DESCRIPTION_VERSION
@ IoQueryDeviceConfigurationData
DRIVER_DISPATCH * PDRIVER_DISPATCH
IO_DPC_ROUTINE * PIO_DPC_ROUTINE
#define IO_DISK_INCREMENT
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
_In_opt_ PVOID DeferredContext
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
#define ObDereferenceObject