87 TRACE_(FLOPPY,
"MotorStopDpcFunc called\n");
115 TRACE_(FLOPPY,
"StartMotor called\n");
120 INFO_(FLOPPY,
"StartMotor: motor turner-offer is already running; waiting for it\n");
122 INFO_(FLOPPY,
"StartMotor: wait satisfied\n");
129 WARN_(FLOPPY,
"StartMotor(): warning: HwTurnOnMotor failed\n");
150 TRACE_(FLOPPY,
"StopMotor called\n");
209 TRACE_(FLOPPY,
"CreateClose called\n");
245 WARN_(FLOPPY,
"FIXME: UN-HARDCODE DATA RATE\n");
248 WARN_(FLOPPY,
"Recalibrate: HwSetDataRate failed\n");
260 for(
i = 0;
i < 2;
i++)
266 WARN_(FLOPPY,
"Recalibrate: HwRecalibrate returned error\n");
276 WARN_(FLOPPY,
"Recalibrate: HwRecalibrateResult returned error\n");
312 TRACE_(FLOPPY,
"ResetChangeFlag called\n");
326 WARN_(FLOPPY,
"ResetChangeFlag(): HwSeek failed; returning STATUS_IO_DEVICE_ERROR\n");
335 WARN_(FLOPPY,
"ResetChangeFlag(): HwSenseInterruptStatus failed; bailing out\n");
343 WARN_(FLOPPY,
"ResetChangeFlag(): HwSeek failed; returning STATUS_IO_DEVICE_ERROR\n");
352 WARN_(FLOPPY,
"ResetChangeFlag(): HwSenseInterruptStatus #2 failed; bailing\n");
360 WARN_(FLOPPY,
"ResetChangeFlag(): HwDiskChanged failed; returning STATUS_IO_DEVICE_ERROR\n");
389 TRACE_(FLOPPY,
"unloading\n");
421 WARN_(FLOPPY,
"unload: warning: HwPowerOff failed\n");
434 ULONG ControllerNumber,
437 ULONG PeripheralNumber,
491 TRACE_(FLOPPY,
"ConfigCallback called with ControllerNumber %d\n", ControllerNumber);
522 WARN_(FLOPPY,
"HalTranslateBusAddress failed; returning\n");
614 TRACE_(FLOPPY,
"ISR called\n");
656 TRACE_(FLOPPY,
"DpcForIsr called\n");
675 UCHAR HeadUnloadTime;
677 UCHAR ControllerVersion;
682 TRACE_(FLOPPY,
"InitController called with Controller 0x%p\n", ControllerInfo);
687 WARN_(FLOPPY,
"InitController: unable to configure controller\n");
699 WARN_(FLOPPY,
"InitController: unable to reset controller\n");
703 INFO_(FLOPPY,
"InitController: waiting for initial interrupt\n");
711 INFO_(FLOPPY,
"InitController: Sensing interrupt %d\n",
i);
715 WARN_(FLOPPY,
"InitController: Unable to clear interrupt 0x%x\n",
i);
720 INFO_(FLOPPY,
"InitController: done sensing interrupts\n");
728 WARN_(FLOPPY,
"InitController: unable to set up implied seek\n");
733 INFO_(FLOPPY,
"InitController: implied seeks set!\n");
760 INFO_(FLOPPY,
"InitController: enhanced version not supported; disabling implied seeks\n");
766 WARN_(FLOPPY,
"FIXME: Figure out speed\n");
771 INFO_(FLOPPY,
"InitController: setting data rate\n");
776 WARN_(FLOPPY,
"InitController: unable to set data rate\n");
780 INFO_(FLOPPY,
"InitController: issuing specify command to controller\n");
785 WARN_(FLOPPY,
"InitController: unable to specify options\n");
801 INFO_(FLOPPY,
"InitController: recalibrating drive 0x%x on controller 0x%p\n",
i, ControllerInfo);
805 INFO_(FLOPPY,
"InitController: done initializing; returning STATUS_SUCCESS\n");
841 WARN_(FLOPPY,
"ReportToMountMgr: Can't get MountMgr pointers %lx\n",
Status);
853 WARN_(FLOPPY,
"ReportToMountMgr: Allocation of mountTarget failed\n");
878 WARN_(FLOPPY,
"ReportToMountMgr: Allocation of irp failed\n");
894 INFO_(FLOPPY,
"Reported to the MountMgr: %lx\n",
Status);
947 WARN_(FLOPPY,
"AddControllers: failed to get controller info from registry\n");
965 INFO_(FLOPPY,
"Connecting interrupt %d to controller%d (object 0x%p)\n",
gControllerInfo[
i].MappedVector,
973 WARN_(FLOPPY,
"AddControllers: unable to connect interrupt\n");
992 WARN_(FLOPPY,
"AddControllers: unable to allocate an adapter object\n");
1000 WARN_(FLOPPY,
"AddControllers(): Unable to set up controller %d - initialization failed\n",
i);
1015 INFO_(FLOPPY,
"AddControllers(): Configuring drive %d on controller %d\n",
i,
j);
1031 DriveNumber = (
UCHAR)(
i*4 +
j);
1040 WARN_(FLOPPY,
"AddControllers: unable to register a Device object\n");
1045 INFO_(FLOPPY,
"AddControllers: New device: %S (0x%p)\n",
1090 INFO_(FLOPPY,
"AddControllers: --------------------------------------------> finished adding controllers\n");
1111 TRACE_(FLOPPY,
"SignalMediaChanged called\n");
1119 Irp->IoStatus.Information = 0;
1126 Irp->IoStatus.Information = 0;
1165 INFO_(FLOPPY,
"QueueThread terminating\n");
1169 INFO_(FLOPPY,
"QueueThread: servicing an IRP\n");
1176 INFO_(FLOPPY,
"QueueThread: IRP queue empty\n");
1187 switch(
Stack->MajorFunction)
1199 WARN_(FLOPPY,
"QueueThread(): Unrecognized irp: mj: 0x%x\n",
Stack->MajorFunction);
1201 Irp->IoStatus.Information = 0;
1276 WARN_(FLOPPY,
"Unable to create system thread; failing init\n");
1282 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 NT_SUCCESS(StatCode)
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
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)
struct _CM_FULL_RESOURCE_DESCRIPTOR * PCM_FULL_RESOURCE_DESCRIPTOR
#define CmResourceTypeDma
#define CmResourceTypeDeviceSpecific
enum _INTERFACE_TYPE INTERFACE_TYPE
#define CmResourceTypePort
#define CmResourceTypeInterrupt
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
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
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
#define CM_RESOURCE_INTERRUPT_LATCHED
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
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::@391::@393 Port
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@391 u
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@391::@394 Interrupt
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@391::@397 Dma
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
PADAPTER_OBJECT AdapterObject
KINTERRUPT_MODE InterruptMode
INTERFACE_TYPE InterfaceType
DRIVE_INFO DriveInfo[MAX_DRIVES_PER_CONTROLLER]
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_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG BusNumber
_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