48 DPRINT(
"FdcFdoStartDevice called\n");
55 ResourceListTranslated ==
NULL)
57 DPRINT1(
"No allocated resources sent to driver\n");
63 DPRINT1(
"Wrong number of allocated resources sent to driver\n");
67 if (
ResourceList->List[0].PartialResourceList.Version != 1 ||
68 ResourceList->List[0].PartialResourceList.Revision != 1 ||
69 ResourceListTranslated->List[0].PartialResourceList.Version != 1 ||
70 ResourceListTranslated->List[0].PartialResourceList.Revision != 1)
72 DPRINT1(
"Revision mismatch: %u.%u != 1.1 or %u.%u != 1.1\n",
75 ResourceListTranslated->List[0].PartialResourceList.Version,
76 ResourceListTranslated->List[0].PartialResourceList.Revision);
82 PartialDescriptor = &
ResourceList->List[0].PartialResourceList.PartialDescriptors[
i];
85 switch (PartialDescriptor->
Type)
88 DPRINT(
"Port: 0x%lx (%lu)\n",
89 PartialDescriptor->
u.
Port.Start.u.LowPart,
90 PartialDescriptor->
u.
Port.Length);
91 if (PartialDescriptor->
u.
Port.Length >= 6)
96 DPRINT(
"Interrupt: Level %lu Vector %lu\n",
112 DPRINT(
"Dma: Channel %lu\n",
113 PartialDescriptor->
u.
Dma.Channel);
132 ULONG ControllerNumber,
135 ULONG PeripheralNumber,
149 DPRINT(
"FdcFdoConfigCallback() called\n");
165 ControllerFound =
TRUE;
170 if (ControllerFound ==
FALSE)
215 DPRINT(
"Detected %lu floppy drives!\n",
232 L"FDC\\GENERIC_FLOPPY_DRIVE");
269 ULONG PeripheralNumber)
293 WCHAR DeviceNameBuffer[80];
300 DPRINT(
"FdcFdoQueryBusRelations() called\n");
318 if (Relations ==
NULL)
335 DPRINT(
"Device name: %S\n", DeviceNameBuffer);
354 DPRINT(
"PDO created: %S\n", DeviceNameBuffer);
365 PdoDeviceExtension->
DriveInfo = DriveInfo;
373 L"FDC\\GENERIC_FLOPPY_DRIVE");
432 *DeviceRelations = Relations;
436 if (Relations !=
NULL)
463 DPRINT(
" IRP_MN_START_DEVICE received\n");
483 DPRINT(
" IRP_MN_QUERY_REMOVE_DEVICE\n");
487 DPRINT(
" IRP_MN_REMOVE_DEVICE received\n");
491 DPRINT(
" IRP_MN_CANCEL_REMOVE_DEVICE\n");
495 DPRINT(
" IRP_MN_STOP_DEVICE received\n");
499 DPRINT(
" IRP_MN_QUERY_STOP_DEVICE received\n");
503 DPRINT(
" IRP_MN_CANCEL_STOP_DEVICE\n");
507 DPRINT(
" IRP_MN_QUERY_DEVICE_RELATIONS\n");
512 DPRINT(
" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
518 DPRINT(
" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
522 DPRINT(
" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
529 DPRINT(
" IRP_MN_SURPRISE_REMOVAL received\n");
#define DO_DEVICE_INITIALIZING
#define STATUS_REVISION_MISMATCH
#define STATUS_OBJECT_NAME_COLLISION
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define CmResourceTypeDeviceSpecific
return STATUS_NOT_SUPPORTED
#define IRP_MN_REMOVE_DEVICE
#define STATUS_INSUFFICIENT_RESOURCES
NTSTATUS NTAPI ForwardIrpAndForget(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
enum _INTERFACE_TYPE INTERFACE_TYPE
#define STATUS_NO_MORE_ENTRIES
NTSTATUS NTAPI FdcFdoPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
IN BOOLEAN OUT PSTR Buffer
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE BusType
NTSTATUS PciCreateDeviceDescriptionString(PUNICODE_STRING DeviceDescription, PPCI_DEVICE Device)
BOOLEAN NTAPI IoForwardIrpSynchronously(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PDEVICE_OBJECT Objects[1]
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
UNICODE_STRING HardwareIds
IN PVOID IN PVOID IN USHORT IN USHORT Size
static NTSTATUS PciCreateCompatibleIDsString(PUNICODE_STRING CompatibleIDs)
#define FILE_DEVICE_MASS_STORAGE
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378 u
static NTSTATUS FdcFdoQueryBusRelations(IN PDEVICE_OBJECT DeviceObject, OUT PDEVICE_RELATIONS *DeviceRelations)
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
struct _CONTROLLER_INFO * ControllerInfo
#define CmResourceTypePort
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
PDEVICE_OBJECT DeviceObject
CM_PARTIAL_RESOURCE_LIST PartialResourceList
PDEVICE_OBJECT DeviceObject
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define IRP_MN_QUERY_REMOVE_DEVICE
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@380 Port
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@384 Dma
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
struct _CM_FULL_RESOURCE_DESCRIPTOR * PCM_FULL_RESOURCE_DESCRIPTOR
struct _DEVICE_RELATIONS * PDEVICE_RELATIONS
#define IoCompleteRequest
COMMON_DEVICE_EXTENSION Common
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG BusNumber
#define IRP_MN_QUERY_STOP_DEVICE
NTSTATUS NTAPI IoQueryDeviceDescription(PINTERFACE_TYPE BusType OPTIONAL, PULONG BusNumber OPTIONAL, PCONFIGURATION_TYPE ControllerType OPTIONAL, PULONG ControllerNumber OPTIONAL, PCONFIGURATION_TYPE PeripheralType OPTIONAL, PULONG PeripheralNumber OPTIONAL, PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, PVOID Context)
#define IRP_MN_SURPRISE_REMOVAL
UNICODE_STRING DeviceLocation
#define IRP_MN_STOP_DEVICE
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
NTSTATUS DuplicateUnicodeString(IN ULONG Flags, IN PCUNICODE_STRING SourceString, OUT PUNICODE_STRING DestinationString)
#define IRP_MN_START_DEVICE
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING InstanceID
#define STATUS_UNSUCCESSFUL
UNICODE_STRING DeviceDescription
static NTSTATUS FdcFdoStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PCM_RESOURCE_LIST ResourceList, IN PCM_RESOURCE_LIST ResourceListTranslated)
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
CM_FLOPPY_DEVICE_DATA FloppyDeviceData
#define ExAllocatePool(type, size)
UCHAR FormatFillCharacter
static NTSTATUS NTAPI FdcFdoConfigCallback(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)
int _cdecl swprintf(const WCHAR *,...)
_Must_inspect_result_ _In_ WDFDEVICE Device
COMMON_DEVICE_EXTENSION Common
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@381 Interrupt
UCHAR StepRateHeadUnloadTime
struct _DEVICE_RELATIONS DEVICE_RELATIONS
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
static NTSTATUS PciCreateHardwareIDsString(PUNICODE_STRING HardwareIDs)
static NTSTATUS PciCreateInstanceIDString(PUNICODE_STRING InstanceID, ULONG PeripheralNumber)
_In_ PIO_STACK_LOCATION IrpSp
NTSTATUS PciCreateDeviceLocationString(PUNICODE_STRING DeviceLocation, PPCI_DEVICE Device)
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
CONTROLLER_INFO ControllerInfo
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define IoSkipCurrentIrpStackLocation(Irp)
#define CmResourceTypeInterrupt
DRIVE_INFO DriveInfo[MAX_DRIVES_PER_CONTROLLER]
struct _CM_FLOPPY_DEVICE_DATA * PCM_FLOPPY_DEVICE_DATA
#define ObReferenceObject
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)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
UNICODE_STRING CompatibleIds
#define FILE_DEVICE_SECURE_OPEN
#define IRP_MN_CANCEL_STOP_DEVICE
_In_ PCHAR _In_ ULONG DeviceNumber
_In_ WDFDEVICE _In_ PPNP_BUS_INFORMATION BusInformation
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
UNICODE_STRING InstanceId
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID InterfaceType
#define CmResourceTypeDma