ReactOS 0.4.15-dev-5836-g942b022
fdo.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Floppy Disk Controller Driver
3 * LICENSE: GNU GPLv2 only as published by the Free Software Foundation
4 * FILE: drivers/storage/fdc/fdc/fdo.c
5 * PURPOSE: Functional Device Object routines
6 * PROGRAMMERS: Eric Kohl
7 */
8
9/* INCLUDES *******************************************************************/
10
11#include "fdc.h"
12
13#include <stdio.h>
14#define NDEBUG
15#include <debug.h>
16
17/* FUNCTIONS ******************************************************************/
18
23 IN PIRP Irp)
24{
25 PDEVICE_OBJECT LowerDevice = ((PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->LowerDevice;
26
27 ASSERT(LowerDevice);
28
30 return IoCallDriver(LowerDevice, Irp);
31}
32
33
34
35
36static
41 IN PCM_RESOURCE_LIST ResourceListTranslated)
42{
43 PFDO_DEVICE_EXTENSION DeviceExtension;
44 PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
45// PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptorTranslated;
46 ULONG i;
47
48 DPRINT("FdcFdoStartDevice called\n");
49
50 DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
51
52 ASSERT(DeviceExtension);
53
54 if (ResourceList == NULL ||
55 ResourceListTranslated == NULL)
56 {
57 DPRINT1("No allocated resources sent to driver\n");
59 }
60
61 if (ResourceList->Count != 1)
62 {
63 DPRINT1("Wrong number of allocated resources sent to driver\n");
65 }
66
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)
71 {
72 DPRINT1("Revision mismatch: %u.%u != 1.1 or %u.%u != 1.1\n",
73 ResourceList->List[0].PartialResourceList.Version,
74 ResourceList->List[0].PartialResourceList.Revision,
75 ResourceListTranslated->List[0].PartialResourceList.Version,
76 ResourceListTranslated->List[0].PartialResourceList.Revision);
78 }
79
80 for (i = 0; i < ResourceList->List[0].PartialResourceList.Count; i++)
81 {
82 PartialDescriptor = &ResourceList->List[0].PartialResourceList.PartialDescriptors[i];
83// PartialDescriptorTranslated = &ResourceListTranslated->List[0].PartialResourceList.PartialDescriptors[i];
84
85 switch (PartialDescriptor->Type)
86 {
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)
92 DeviceExtension->ControllerInfo.BaseAddress = (PUCHAR)(ULONG_PTR)PartialDescriptor->u.Port.Start.QuadPart;
93 break;
94
96 DPRINT("Interrupt: Level %lu Vector %lu\n",
97 PartialDescriptor->u.Interrupt.Level,
98 PartialDescriptor->u.Interrupt.Vector);
99/*
100 Dirql = (KIRQL)PartialDescriptorTranslated->u.Interrupt.Level;
101 Vector = PartialDescriptorTranslated->u.Interrupt.Vector;
102 Affinity = PartialDescriptorTranslated->u.Interrupt.Affinity;
103 if (PartialDescriptorTranslated->Flags & CM_RESOURCE_INTERRUPT_LATCHED)
104 InterruptMode = Latched;
105 else
106 InterruptMode = LevelSensitive;
107 ShareInterrupt = (PartialDescriptorTranslated->ShareDisposition == CmResourceShareShared);
108*/
109 break;
110
112 DPRINT("Dma: Channel %lu\n",
113 PartialDescriptor->u.Dma.Channel);
114 break;
115 }
116 }
117
118 return STATUS_SUCCESS;
119}
120
121
122static
124NTAPI
127 PUNICODE_STRING PathName,
131 CONFIGURATION_TYPE ControllerType,
132 ULONG ControllerNumber,
133 PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
134 CONFIGURATION_TYPE PeripheralType,
135 ULONG PeripheralNumber,
136 PKEY_VALUE_FULL_INFORMATION *PeripheralInformation)
137{
138 PKEY_VALUE_FULL_INFORMATION ControllerFullDescriptor;
139 PCM_FULL_RESOURCE_DESCRIPTOR ControllerResourceDescriptor;
140 PKEY_VALUE_FULL_INFORMATION PeripheralFullDescriptor;
141 PCM_FULL_RESOURCE_DESCRIPTOR PeripheralResourceDescriptor;
142 PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
143 PCM_FLOPPY_DEVICE_DATA FloppyDeviceData;
144 PFDO_DEVICE_EXTENSION DeviceExtension;
145 PDRIVE_INFO DriveInfo;
146 BOOLEAN ControllerFound = FALSE;
147 ULONG i;
148
149 DPRINT("FdcFdoConfigCallback() called\n");
150
151 DeviceExtension = (PFDO_DEVICE_EXTENSION)Context;
152
153 /* Get the controller resources */
154 ControllerFullDescriptor = ControllerInformation[IoQueryDeviceConfigurationData];
155 ControllerResourceDescriptor = (PCM_FULL_RESOURCE_DESCRIPTOR)((PCHAR)ControllerFullDescriptor +
156 ControllerFullDescriptor->DataOffset);
157
158 for(i = 0; i < ControllerResourceDescriptor->PartialResourceList.Count; i++)
159 {
160 PartialDescriptor = &ControllerResourceDescriptor->PartialResourceList.PartialDescriptors[i];
161
162 if (PartialDescriptor->Type == CmResourceTypePort)
163 {
164 if ((PUCHAR)(ULONG_PTR)PartialDescriptor->u.Port.Start.QuadPart == DeviceExtension->ControllerInfo.BaseAddress)
165 ControllerFound = TRUE;
166 }
167 }
168
169 /* Leave, if the enumerated controller is not the one represented by the FDO */
170 if (ControllerFound == FALSE)
171 return STATUS_SUCCESS;
172
173 /* Get the peripheral resources */
174 PeripheralFullDescriptor = PeripheralInformation[IoQueryDeviceConfigurationData];
175 PeripheralResourceDescriptor = (PCM_FULL_RESOURCE_DESCRIPTOR)((PCHAR)PeripheralFullDescriptor +
176 PeripheralFullDescriptor->DataOffset);
177
178 /* learn about drives attached to controller */
179 for(i = 0; i < PeripheralResourceDescriptor->PartialResourceList.Count; i++)
180 {
181 PartialDescriptor = &PeripheralResourceDescriptor->PartialResourceList.PartialDescriptors[i];
182
183 if (PartialDescriptor->Type != CmResourceTypeDeviceSpecific)
184 continue;
185
186 FloppyDeviceData = (PCM_FLOPPY_DEVICE_DATA)(PartialDescriptor + 1);
187
188 DriveInfo = &DeviceExtension->ControllerInfo.DriveInfo[DeviceExtension->ControllerInfo.NumberOfDrives];
189
190 DriveInfo->ControllerInfo = &DeviceExtension->ControllerInfo;
191 DriveInfo->UnitNumber = DeviceExtension->ControllerInfo.NumberOfDrives;
192 DriveInfo->PeripheralNumber = PeripheralNumber;
193
194 DriveInfo->FloppyDeviceData.MaxDensity = FloppyDeviceData->MaxDensity;
195 DriveInfo->FloppyDeviceData.MountDensity = FloppyDeviceData->MountDensity;
197 DriveInfo->FloppyDeviceData.HeadLoadTime = FloppyDeviceData->HeadLoadTime;
198 DriveInfo->FloppyDeviceData.MotorOffTime = FloppyDeviceData->MotorOffTime;
199 DriveInfo->FloppyDeviceData.SectorLengthCode = FloppyDeviceData->SectorLengthCode;
200 DriveInfo->FloppyDeviceData.SectorPerTrack = FloppyDeviceData->SectorPerTrack;
201 DriveInfo->FloppyDeviceData.ReadWriteGapLength = FloppyDeviceData->ReadWriteGapLength;
202 DriveInfo->FloppyDeviceData.FormatGapLength = FloppyDeviceData->FormatGapLength;
203 DriveInfo->FloppyDeviceData.FormatFillCharacter = FloppyDeviceData->FormatFillCharacter;
204 DriveInfo->FloppyDeviceData.HeadSettleTime = FloppyDeviceData->HeadSettleTime;
205 DriveInfo->FloppyDeviceData.MotorSettleTime = FloppyDeviceData->MotorSettleTime;
206 DriveInfo->FloppyDeviceData.MaximumTrackValue = FloppyDeviceData->MaximumTrackValue;
207 DriveInfo->FloppyDeviceData.DataTransferLength = FloppyDeviceData->DataTransferLength;
208
209 /* Once it's all set up, acknowledge its existence in the controller info object */
210 DeviceExtension->ControllerInfo.NumberOfDrives++;
211 }
212
213 DeviceExtension->ControllerInfo.Populated = TRUE;
214
215 DPRINT("Detected %lu floppy drives!\n",
216 DeviceExtension->ControllerInfo.NumberOfDrives);
217
218 return STATUS_SUCCESS;
219}
220
221
222static
225{
226 WCHAR Buffer[256];
227 UNICODE_STRING BufferU;
228 ULONG Index;
229
230 Index = 0;
232 L"FDC\\GENERIC_FLOPPY_DRIVE");
233 Index++;
234
236
237 BufferU.Length = BufferU.MaximumLength = (USHORT) Index * sizeof(WCHAR);
238 BufferU.Buffer = Buffer;
239
240 return DuplicateUnicodeString(0, &BufferU, HardwareIDs);
241}
242
243
244static
247{
248 WCHAR Buffer[256];
249 UNICODE_STRING BufferU;
250 ULONG Index;
251
252 Index = 0;
254 L"GenFloppyDisk");
255 Index++;
256
258
259 BufferU.Length = BufferU.MaximumLength = (USHORT)Index * sizeof(WCHAR);
260 BufferU.Buffer = Buffer;
261
262 return DuplicateUnicodeString(0, &BufferU, CompatibleIDs);
263}
264
265
266static
269 ULONG PeripheralNumber)
270{
271 WCHAR Buffer[3];
272
273 swprintf(Buffer, L"%02X", PeripheralNumber & 0xff);
274
276}
277
278
279static
283 OUT PDEVICE_RELATIONS *DeviceRelations)
284{
285 PFDO_DEVICE_EXTENSION FdoDeviceExtension;
286 PPDO_DEVICE_EXTENSION PdoDeviceExtension;
288 CONFIGURATION_TYPE ControllerType = DiskController;
289 CONFIGURATION_TYPE PeripheralType = FloppyDiskPeripheral;
290 PDEVICE_RELATIONS Relations;
291 PDRIVE_INFO DriveInfo;
293 WCHAR DeviceNameBuffer[80];
296 ULONG Size;
297 ULONG i;
299
300 DPRINT("FdcFdoQueryBusRelations() called\n");
301
302 FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
303
305 NULL,
306 &ControllerType,
307 NULL,
308 &PeripheralType,
309 NULL,
311 FdoDeviceExtension);
313 return Status;
314
315 Size = sizeof(DEVICE_RELATIONS) +
316 sizeof(Relations->Objects) * (FdoDeviceExtension->ControllerInfo.NumberOfDrives - 1);
318 if (Relations == NULL)
319 {
321 }
322
323 Relations->Count = FdoDeviceExtension->ControllerInfo.NumberOfDrives;
324
325 for (i = 0; i < FdoDeviceExtension->ControllerInfo.NumberOfDrives; i++)
326 {
327 DriveInfo = &FdoDeviceExtension->ControllerInfo.DriveInfo[i];
328
329 if (DriveInfo->DeviceObject == NULL)
330 {
331 do
332 {
333 swprintf(DeviceNameBuffer, L"\\Device\\FloppyPDO%lu", DeviceNumber++);
334 RtlInitUnicodeString(&DeviceName, DeviceNameBuffer);
335 DPRINT("Device name: %S\n", DeviceNameBuffer);
336
337 /* Create physical device object */
338 Status = IoCreateDevice(FdoDeviceExtension->Common.DeviceObject->DriverObject,
339 sizeof(PDO_DEVICE_EXTENSION),
340 &DeviceName,
343 FALSE,
344 &Pdo);
345 }
347
348 if (!NT_SUCCESS(Status))
349 {
350 DPRINT1("PDO creation failed (Status 0x%08lx)\n", Status);
351 goto done;
352 }
353
354 DPRINT("PDO created: %S\n", DeviceNameBuffer);
355
356 DriveInfo->DeviceObject = Pdo;
357
358 PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)Pdo->DeviceExtension;
359 RtlZeroMemory(PdoDeviceExtension, sizeof(PDO_DEVICE_EXTENSION));
360
361 PdoDeviceExtension->Common.IsFDO = FALSE;
362 PdoDeviceExtension->Common.DeviceObject = Pdo;
363
364 PdoDeviceExtension->Fdo = FdoDeviceExtension->Common.DeviceObject;
365 PdoDeviceExtension->DriveInfo = DriveInfo;
366
367 Pdo->Flags |= DO_DIRECT_IO;
368 Pdo->Flags |= DO_POWER_PAGABLE;
369 Pdo->Flags &= ~DO_DEVICE_INITIALIZING;
370
371 /* Add Device ID string */
372 RtlCreateUnicodeString(&PdoDeviceExtension->DeviceId,
373 L"FDC\\GENERIC_FLOPPY_DRIVE");
374 DPRINT("DeviceID: %S\n", PdoDeviceExtension->DeviceId.Buffer);
375
376 /* Add Hardware IDs string */
377 Status = PciCreateHardwareIDsString(&PdoDeviceExtension->HardwareIds);
378 if (!NT_SUCCESS(Status))
379 {
380// ErrorStatus = Status;
381// ErrorOccurred = TRUE;
382 break;
383 }
384
385 /* Add Compatible IDs string */
386 Status = PciCreateCompatibleIDsString(&PdoDeviceExtension->CompatibleIds);
387 if (!NT_SUCCESS(Status))
388 {
389// ErrorStatus = Status;
390// ErrorOccurred = TRUE;
391 break;
392 }
393
394 /* Add Instance ID string */
395 Status = PciCreateInstanceIDString(&PdoDeviceExtension->InstanceId,
396 DriveInfo->PeripheralNumber);
397 if (!NT_SUCCESS(Status))
398 {
399// ErrorStatus = Status;
400// ErrorOccurred = TRUE;
401 break;
402 }
403
404#if 0
405 /* Add device description string */
407 if (!NT_SUCCESS(Status))
408 {
409// ErrorStatus = Status;
410// ErrorOccurred = TRUE;
411 break;
412 }
413
414 /* Add device location string */
416 if (!NT_SUCCESS(Status))
417 {
418// ErrorStatus = Status;
419// ErrorOccurred = TRUE;
420 break;
421 }
422#endif
423 }
424
426 Relations->Objects[i] = DriveInfo->DeviceObject;
427 }
428
429done:
430 if (NT_SUCCESS(Status))
431 {
432 *DeviceRelations = Relations;
433 }
434 else
435 {
436 if (Relations != NULL)
437 ExFreePool(Relations);
438 }
439
440 return Status;
441}
442
443
445NTAPI
448 IN PIRP Irp)
449{
452 PDEVICE_RELATIONS DeviceRelations = NULL;
455
456 DPRINT("FdcFdoPnp()\n");
457
459
460 switch (IrpSp->MinorFunction)
461 {
463 DPRINT(" IRP_MN_START_DEVICE received\n");
464
465 /* Call lower driver */
467 FdoExtension = DeviceObject->DeviceExtension;
468
469 if (IoForwardIrpSynchronously(FdoExtension->LowerDevice, Irp))
470 {
471 Status = Irp->IoStatus.Status;
472 if (NT_SUCCESS(Status))
473 {
475 IrpSp->Parameters.StartDevice.AllocatedResources,
476 IrpSp->Parameters.StartDevice.AllocatedResourcesTranslated);
477 }
478 }
479
480 break;
481
483 DPRINT(" IRP_MN_QUERY_REMOVE_DEVICE\n");
484 break;
485
487 DPRINT(" IRP_MN_REMOVE_DEVICE received\n");
488 break;
489
491 DPRINT(" IRP_MN_CANCEL_REMOVE_DEVICE\n");
492 break;
493
495 DPRINT(" IRP_MN_STOP_DEVICE received\n");
496 break;
497
499 DPRINT(" IRP_MN_QUERY_STOP_DEVICE received\n");
500 break;
501
503 DPRINT(" IRP_MN_CANCEL_STOP_DEVICE\n");
504 break;
505
507 DPRINT(" IRP_MN_QUERY_DEVICE_RELATIONS\n");
508
509 switch (IrpSp->Parameters.QueryDeviceRelations.Type)
510 {
511 case BusRelations:
512 DPRINT(" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
513 Status = FdcFdoQueryBusRelations(DeviceObject, &DeviceRelations);
514 Information = (ULONG_PTR)DeviceRelations;
515 break;
516
517 case RemovalRelations:
518 DPRINT(" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
520
521 default:
522 DPRINT(" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
523 IrpSp->Parameters.QueryDeviceRelations.Type);
525 }
526 break;
527
529 DPRINT(" IRP_MN_SURPRISE_REMOVAL received\n");
530 break;
531
532 default:
533 DPRINT(" Unknown IOCTL 0x%lx\n", IrpSp->MinorFunction);
535 }
536
537 Irp->IoStatus.Information = Information;
538 Irp->IoStatus.Status = Status;
540
541 return Status;
542}
543
544/* EOF */
unsigned char BOOLEAN
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
@ DiskController
Definition: arcname.c:68
#define FILE_DEVICE_SECURE_OPEN
Definition: cdrw_usr.h:46
Definition: bufpool.h:45
_In_ PCHAR _In_ ULONG DeviceNumber
Definition: classpnp.h:1230
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
_In_ PIRP Irp
Definition: csq.h:116
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define swprintf
Definition: precomp.h:40
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
_In_ PIO_STACK_LOCATION IrpSp
Definition: create.c:4137
#define ULONG_PTR
Definition: config.h:101
@ FdoExtension
Definition: precomp.h:48
#define DO_DIRECT_IO
Definition: env_spec_w32.h:396
#define ExFreePool(addr)
Definition: env_spec_w32.h:352
#define PagedPool
Definition: env_spec_w32.h:308
#define ExAllocatePool(type, size)
Definition: fbtusb.h:44
Status
Definition: gdiplustypes.h:25
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
Definition: glfuncs.h:248
struct _CM_FULL_RESOURCE_DESCRIPTOR * PCM_FULL_RESOURCE_DESCRIPTOR
#define CmResourceTypeDma
Definition: hwresource.cpp:126
#define CmResourceTypeDeviceSpecific
Definition: hwresource.cpp:127
@ Isa
Definition: hwresource.cpp:138
enum _INTERFACE_TYPE INTERFACE_TYPE
#define CmResourceTypePort
Definition: hwresource.cpp:123
#define CmResourceTypeInterrupt
Definition: hwresource.cpp:124
NTSTATUS DuplicateUnicodeString(IN ULONG Flags, IN PCUNICODE_STRING SourceString, OUT PUNICODE_STRING DestinationString)
Definition: misc.c:31
DRIVER_DISPATCH ForwardIrpAndForget
Definition: i8042prt.h:341
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)
Definition: iorsrce.c:1020
#define ASSERT(a)
Definition: mode.c:44
#define FILE_DEVICE_MASS_STORAGE
Definition: imports.h:62
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define UNICODE_NULL
#define IRP_MN_SURPRISE_REMOVAL
Definition: ntifs_ex.h:408
#define IoSkipCurrentIrpStackLocation(Irp)
Definition: ntifs_ex.h:421
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)
Definition: device.c:1031
#define IoCompleteRequest
Definition: irp.c:1240
BOOLEAN NTAPI IoForwardIrpSynchronously(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:1625
#define IoCallDriver
Definition: irp.c:1225
#define STATUS_NO_MORE_ENTRIES
Definition: ntstatus.h:205
#define STATUS_NOT_SUPPORTED
Definition: ntstatus.h:423
#define STATUS_REVISION_MISMATCH
Definition: ntstatus.h:325
#define L(x)
Definition: ntvdm.h:50
NTSTATUS PciCreateInstanceIDString(PUNICODE_STRING InstanceID, PPCI_DEVICE Device)
Definition: pci.c:302
NTSTATUS PciCreateDeviceDescriptionString(PUNICODE_STRING DeviceDescription, PPCI_DEVICE Device)
Definition: pci.c:430
NTSTATUS PciCreateCompatibleIDsString(PUNICODE_STRING CompatibleIDs, PPCI_DEVICE Device)
Definition: pci.c:366
NTSTATUS PciCreateHardwareIDsString(PUNICODE_STRING HardwareIDs, PPCI_DEVICE Device)
Definition: pci.c:314
NTSTATUS PciCreateDeviceLocationString(PUNICODE_STRING DeviceLocation, PPCI_DEVICE Device)
Definition: pci.c:698
unsigned short USHORT
Definition: pedump.c:61
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:71
NTSTATUS NTAPI FdcFdoPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: fdo.c:446
static NTSTATUS FdcFdoStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PCM_RESOURCE_LIST ResourceList, IN PCM_RESOURCE_LIST ResourceListTranslated)
Definition: fdo.c:38
static NTSTATUS FdcFdoQueryBusRelations(IN PDEVICE_OBJECT DeviceObject, OUT PDEVICE_RELATIONS *DeviceRelations)
Definition: fdo.c:281
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)
Definition: fdo.c:125
PDEVICE_OBJECT DeviceObject
Definition: kstypes.h:153
UCHAR StepRateHeadUnloadTime
Definition: cmtypes.h:489
CM_PARTIAL_RESOURCE_LIST PartialResourceList
Definition: hwresource.cpp:160
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@387 Dma
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381 u
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@383 Port
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@384 Interrupt
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
UCHAR NumberOfDrives
Definition: fdc.h:58
DRIVE_INFO DriveInfo[MAX_DRIVES_PER_CONTROLLER]
Definition: fdc.h:60
PUCHAR BaseAddress
Definition: fdc.h:49
BOOLEAN Populated
Definition: fdc.h:39
PDEVICE_OBJECT Objects[1]
Definition: iotypes.h:2163
struct _CONTROLLER_INFO * ControllerInfo
Definition: fdc.h:23
PDEVICE_OBJECT DeviceObject
Definition: fdc.h:26
CM_FLOPPY_DEVICE_DATA FloppyDeviceData
Definition: fdc.h:27
ULONG PeripheralNumber
Definition: fdc.h:25
UCHAR UnitNumber
Definition: fdc.h:24
COMMON_DEVICE_EXTENSION Common
Definition: pci.h:84
CONTROLLER_INFO ControllerInfo
Definition: fdc.h:83
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
Definition: iotypes.h:3128
PDEVICE_OBJECT Fdo
Definition: pci.h:61
UNICODE_STRING InstanceId
Definition: serenum.h:53
UNICODE_STRING DeviceDescription
Definition: pci.h:73
UNICODE_STRING HardwareIds
Definition: serenum.h:54
UNICODE_STRING DeviceLocation
Definition: pci.h:75
COMMON_DEVICE_EXTENSION Common
Definition: pci.h:59
UNICODE_STRING CompatibleIds
Definition: serenum.h:55
PDRIVE_INFO DriveInfo
Definition: fdc.h:93
UNICODE_STRING DeviceId
Definition: serenum.h:52
USHORT MaximumLength
Definition: env_spec_w32.h:370
#define NTAPI
Definition: typedefs.h:36
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define IN
Definition: typedefs.h:39
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
char * PCHAR
Definition: typedefs.h:51
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define STATUS_OBJECT_NAME_COLLISION
Definition: udferr_usr.h:150
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_In_ WDFDEVICE _In_ PPNP_BUS_INFORMATION BusInformation
Definition: wdfdevice.h:3915
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
Definition: wdfdevice.h:3275
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID InterfaceType
Definition: wdffdo.h:463
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
Definition: wdfminiport.h:72
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING InstanceID
Definition: wdfpdo.h:309
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
Definition: wdfrequest.h:1049
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
Definition: wdfresource.h:309
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
Definition: halfuncs.h:160
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE BusType
Definition: halfuncs.h:159
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2793
#define IRP_MN_CANCEL_STOP_DEVICE
@ RemovalRelations
Definition: iotypes.h:2155
@ BusRelations
Definition: iotypes.h:2152
CONFIGURATION_TYPE
Definition: iotypes.h:4393
#define IO_NO_INCREMENT
Definition: iotypes.h:598
#define IRP_MN_START_DEVICE
@ IoQueryDeviceConfigurationData
Definition: iotypes.h:4449
#define IRP_MN_REMOVE_DEVICE
struct _DEVICE_RELATIONS * PDEVICE_RELATIONS
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define DO_POWER_PAGABLE
#define IRP_MN_QUERY_STOP_DEVICE
struct _DEVICE_RELATIONS DEVICE_RELATIONS
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define IRP_MN_STOP_DEVICE
#define IRP_MN_QUERY_REMOVE_DEVICE
#define ObReferenceObject
Definition: obfuncs.h:204
__wchar_t WCHAR
Definition: xmlstorage.h:180