ReactOS 0.4.17-dev-1190-g4c812f4
fdc.h File Reference
#include <ntifs.h>
Include dependency graph for fdc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _DRIVE_INFO
 
struct  _CONTROLLER_INFO
 
struct  _COMMON_DEVICE_EXTENSION
 
struct  _FDO_DEVICE_EXTENSION
 
struct  _PDO_DEVICE_EXTENSION
 

Macros

#define MAX_DEVICE_NAME   255
 
#define MAX_ARC_PATH_LEN   255
 
#define MAX_DRIVES_PER_CONTROLLER   4
 
#define MAX_CONTROLLERS   4
 
#define FDC_TAG   'acdF'
 

Typedefs

typedef struct _DRIVE_INFO DRIVE_INFO
 
typedef struct _DRIVE_INFO * PDRIVE_INFO
 
typedef struct _CONTROLLER_INFO CONTROLLER_INFO
 
typedef struct _CONTROLLER_INFO * PCONTROLLER_INFO
 
typedef struct _COMMON_DEVICE_EXTENSION COMMON_DEVICE_EXTENSION
 
typedef struct _COMMON_DEVICE_EXTENSION * PCOMMON_DEVICE_EXTENSION
 
typedef struct _FDO_DEVICE_EXTENSION FDO_DEVICE_EXTENSION
 
typedef struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
 
typedef struct _PDO_DEVICE_EXTENSION PDO_DEVICE_EXTENSION
 
typedef struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
 

Functions

NTSTATUS NTAPI FdcFdoPnp (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
NTSTATUS DuplicateUnicodeString (IN ULONG Flags, IN PCUNICODE_STRING SourceString, OUT PUNICODE_STRING DestinationString)
 
VOID FdcPdoDeleteDevice (IN PDEVICE_OBJECT DeviceObject)
 
NTSTATUS NTAPI FdcPdoPnp (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 

Macro Definition Documentation

◆ FDC_TAG

#define FDC_TAG   'acdF'

Definition at line 105 of file fdc.h.

◆ MAX_ARC_PATH_LEN

#define MAX_ARC_PATH_LEN   255

Definition at line 15 of file fdc.h.

◆ MAX_CONTROLLERS

#define MAX_CONTROLLERS   4

Definition at line 17 of file fdc.h.

◆ MAX_DEVICE_NAME

#define MAX_DEVICE_NAME   255

Definition at line 14 of file fdc.h.

◆ MAX_DRIVES_PER_CONTROLLER

#define MAX_DRIVES_PER_CONTROLLER   4

Definition at line 16 of file fdc.h.

Typedef Documentation

◆ COMMON_DEVICE_EXTENSION

◆ CONTROLLER_INFO

◆ DRIVE_INFO

◆ FDO_DEVICE_EXTENSION

◆ PCOMMON_DEVICE_EXTENSION

◆ PCONTROLLER_INFO

◆ PDO_DEVICE_EXTENSION

◆ PDRIVE_INFO

◆ PFDO_DEVICE_EXTENSION

◆ PPDO_DEVICE_EXTENSION

Function Documentation

◆ DuplicateUnicodeString()

NTSTATUS DuplicateUnicodeString ( IN ULONG  Flags,
IN PCUNICODE_STRING  SourceString,
OUT PUNICODE_STRING  DestinationString 
)

Definition at line 31 of file misc.c.

35{
40 {
42 }
43
44
45 if ((SourceString->Length == 0)
48 {
52 }
53 else
54 {
55 USHORT DestMaxLength = SourceString->Length;
56
58 DestMaxLength += sizeof(UNICODE_NULL);
59
62 return STATUS_NO_MEMORY;
63
66 DestinationString->MaximumLength = DestMaxLength;
67
70 }
71
72 return STATUS_SUCCESS;
73}
#define STATUS_NO_MEMORY
Definition: d3dkmdt.h:51
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
#define NULL
Definition: types.h:112
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define PagedPool
Definition: env_spec_w32.h:308
#define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING
Definition: green.h:16
#define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE
Definition: green.h:15
#define I8042PRT_TAG
Definition: i8042prt.h:12
_Out_ _Inout_ POEM_STRING _In_ PCUNICODE_STRING SourceString
Definition: rtlfuncs.h:1957
_Out_ _Inout_ POEM_STRING DestinationString
Definition: rtlfuncs.h:1956
#define UNICODE_NULL
short WCHAR
Definition: pedump.c:58
unsigned short USHORT
Definition: pedump.c:61
#define STATUS_SUCCESS
Definition: shellext.h:65
unsigned short Length
Definition: sprintf.c:451
void * Buffer
Definition: sprintf.c:453
unsigned short MaximumLength
Definition: sprintf.c:452
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135

◆ FdcFdoPnp()

NTSTATUS NTAPI FdcFdoPnp ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 621 of file fdo.c.

624{
627 PDEVICE_RELATIONS DeviceRelations = NULL;
631 ULONG i;
632
633 DPRINT("FdcFdoPnp()\n");
634
636 Information = Irp->IoStatus.Information;
637
638 switch (IrpSp->MinorFunction)
639 {
641 DPRINT(" IRP_MN_START_DEVICE received\n");
642
643 /* Call lower driver */
645 FdoExtension = DeviceObject->DeviceExtension;
646
647 if (IoForwardIrpSynchronously(FdoExtension->LowerDevice, Irp))
648 {
649 Status = Irp->IoStatus.Status;
650 if (NT_SUCCESS(Status))
651 {
653 IrpSp->Parameters.StartDevice.AllocatedResources,
654 IrpSp->Parameters.StartDevice.AllocatedResourcesTranslated);
655 }
656 }
657
658 break;
659
661 DPRINT(" IRP_MN_QUERY_REMOVE_DEVICE\n");
662 Irp->IoStatus.Status = STATUS_SUCCESS;
664
666 DPRINT(" IRP_MN_REMOVE_DEVICE received\n");
667 FdoExtension = DeviceObject->DeviceExtension;
668
669 for (i = 0; i < FdoExtension->ControllerInfo.NumberOfDrives; i++)
670 {
671 Pdo = FdoExtension->ControllerInfo.DriveInfo[i].DeviceObject;
672 if (Pdo != NULL)
674 }
675
676 /* The lower stack owns the remove IRP after we forward it. */
677 Irp->IoStatus.Status = STATUS_SUCCESS;
679 Status = IoCallDriver(FdoExtension->LowerDevice, Irp);
680
681 IoDetachDevice(FdoExtension->LowerDevice);
683 return Status;
684
686 DPRINT(" IRP_MN_CANCEL_REMOVE_DEVICE\n");
687 Irp->IoStatus.Status = STATUS_SUCCESS;
689
691 DPRINT(" IRP_MN_STOP_DEVICE received\n");
692 Irp->IoStatus.Status = STATUS_SUCCESS;
694
696 DPRINT(" IRP_MN_QUERY_STOP_DEVICE received\n");
697 Irp->IoStatus.Status = STATUS_SUCCESS;
699
701 DPRINT(" IRP_MN_CANCEL_STOP_DEVICE\n");
702 Irp->IoStatus.Status = STATUS_SUCCESS;
704
706 DPRINT(" IRP_MN_QUERY_DEVICE_RELATIONS\n");
707
709 {
710 case BusRelations:
711 DPRINT(" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
714 &DeviceRelations);
715 if (NT_SUCCESS(Status))
716 {
717 Irp->IoStatus.Information = (ULONG_PTR)DeviceRelations;
718 Irp->IoStatus.Status = STATUS_SUCCESS;
720 }
721 break;
722
723 case RemovalRelations:
724 DPRINT(" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
726
727 default:
728 DPRINT(" IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
731 }
732 break;
733
735 DPRINT(" IRP_MN_SURPRISE_REMOVAL received\n");
736 Irp->IoStatus.Status = STATUS_SUCCESS;
738
739 default:
740 DPRINT(" Unknown IOCTL 0x%lx\n", IrpSp->MinorFunction);
742 }
743
744 Irp->IoStatus.Information = Information;
745 Irp->IoStatus.Status = Status;
747
748 return Status;
749}
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
LONG NTSTATUS
Definition: precomp.h:26
#define STATUS_NOT_SUPPORTED
Definition: d3dkmdt.h:48
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
_In_ PIO_STACK_LOCATION IrpSp
Definition: create.c:4138
VOID FdcPdoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: pdo.c:120
#define ULONG_PTR
Definition: config.h:101
@ FdoExtension
Definition: precomp.h:60
Status
Definition: gdiplustypes.h:24
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
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
Definition: hubucx.h:280
DRIVER_DISPATCH ForwardIrpAndForget
Definition: i8042prt.h:341
_In_ PIRP Irp
Definition: kse.h:79
#define IRP_MN_SURPRISE_REMOVAL
Definition: ntifs_ex.h:408
#define IoSkipCurrentIrpStackLocation(Irp)
Definition: ntifs_ex.h:421
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
Definition: device.c:1306
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1261
#define IoCompleteRequest
Definition: irp.c:1272
BOOLEAN NTAPI IoForwardIrpSynchronously(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:1657
#define IoCallDriver
Definition: irp.c:1257
#define DPRINT
Definition: sndvol32.h:73
static NTSTATUS FdcFdoStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PCM_RESOURCE_LIST ResourceList, IN PCM_RESOURCE_LIST ResourceListTranslated)
Definition: fdo.c:36
static NTSTATUS FdcFdoQueryBusRelations(IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_RELATIONS ExistingRelations, OUT PDEVICE_RELATIONS *DeviceRelations)
Definition: fdo.c:376
struct _IO_STACK_LOCATION::@5020::@5045 QueryDeviceRelations
struct _IO_STACK_LOCATION::@5020::@5057 StartDevice
union _IO_STACK_LOCATION::@1814 Parameters
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t ULONG
Definition: typedefs.h:59
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
Definition: wdfrequest.h:1049
#define IRP_MN_CANCEL_STOP_DEVICE
@ RemovalRelations
Definition: iotypes.h:2157
@ BusRelations
Definition: iotypes.h:2154
#define IO_NO_INCREMENT
Definition: iotypes.h:598
#define IRP_MN_START_DEVICE
#define IRP_MN_REMOVE_DEVICE
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define IRP_MN_QUERY_STOP_DEVICE
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define IRP_MN_STOP_DEVICE
#define IRP_MN_QUERY_REMOVE_DEVICE

Referenced by FdcPnp().

◆ FdcPdoDeleteDevice()

VOID FdcPdoDeleteDevice ( IN PDEVICE_OBJECT  DeviceObject)

Definition at line 120 of file pdo.c.

122{
123 PPDO_DEVICE_EXTENSION DeviceExtension;
124
125 DeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
126 if (DeviceExtension->DeletePending)
127 return;
128
129 DeviceExtension->DeletePending = TRUE;
130 DeviceExtension->ReportedPresent = FALSE;
131
132 if (DeviceExtension->DriveInfo != NULL &&
133 DeviceExtension->DriveInfo->DeviceObject == DeviceObject)
134 {
135 DeviceExtension->DriveInfo->DeviceObject = NULL;
136 }
137
138 DeviceExtension->DriveInfo = NULL;
139 DeviceExtension->Fdo = NULL;
140
141 RtlFreeUnicodeString(&DeviceExtension->DeviceDescription);
142 RtlFreeUnicodeString(&DeviceExtension->DeviceId);
143 RtlFreeUnicodeString(&DeviceExtension->InstanceId);
144 RtlFreeUnicodeString(&DeviceExtension->HardwareIds);
145 RtlFreeUnicodeString(&DeviceExtension->CompatibleIds);
146
148}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
if(dx< 0)
Definition: linetemp.h:194
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
PDEVICE_OBJECT DeviceObject
Definition: fdc.h:26
PDEVICE_OBJECT Fdo
Definition: pci.h:61
UNICODE_STRING InstanceId
Definition: serenum.h:53
UNICODE_STRING DeviceDescription
Definition: pci.h:73
BOOLEAN DeletePending
Definition: fdc.h:96
UNICODE_STRING HardwareIds
Definition: serenum.h:54
BOOLEAN ReportedPresent
Definition: fdc.h:95
UNICODE_STRING CompatibleIds
Definition: serenum.h:55
PDRIVE_INFO DriveInfo
Definition: fdc.h:94
UNICODE_STRING DeviceId
Definition: serenum.h:52

Referenced by FdcFdoPnp(), and FdcPdoPnp().

◆ FdcPdoPnp()

NTSTATUS NTAPI FdcPdoPnp ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 153 of file pdo.c.

156{
157 PPDO_DEVICE_EXTENSION DeviceExtension;
161 BOOLEAN DeleteDevice = FALSE;
162
163 DPRINT("FdcPdoPnp()\n");
164
165 Status = Irp->IoStatus.Status;
166 Information = Irp->IoStatus.Information;
167 DeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
168
170
171 switch (IrpSp->MinorFunction)
172 {
174 DPRINT1("Unimplemented IRP_MN_DEVICE_USAGE_NOTIFICATION received\n");
175 break;
176
177 case IRP_MN_EJECT:
178 DPRINT1("Unimplemented IRP_MN_EJECT received\n");
179 break;
180
182 DPRINT("IRP_MN_QUERY_BUS_INFORMATION received\n");
183 break;
184
186 DPRINT("IRP_MN_QUERY_CAPABILITIES received\n");
188 break;
189
191 DPRINT("IRP_MN_QUERY_DEVICE_RELATIONS received\n");
194 break;
195
197 DPRINT("IRP_MN_QUERY_DEVICE_TEXT received\n");
198 break;
199
200 case IRP_MN_QUERY_ID:
201 DPRINT("IRP_MN_QUERY_ID received\n");
203 break;
204
206 DPRINT1("Unimplemented IRP_MN_QUERY_ID received\n");
207 break;
208
210 DPRINT("IRP_MN_QUERY_RESOURCE_REQUIREMENTS received\n");
211 break;
212
214 DPRINT("IRP_MN_QUERY_RESOURCES received\n");
215 break;
216
217 case IRP_MN_SET_LOCK:
218 DPRINT1("Unimplemented IRP_MN_SET_LOCK received\n");
219 break;
220
222 DPRINT("IRP_MN_START_DEVICE received\n");
224 break;
225
232 break;
233
235 DeviceExtension->ReportedPresent = FALSE;
237 break;
238
240 DPRINT("IRP_MN_REMOVE_DEVICE received\n");
242 DeleteDevice = !DeviceExtension->ReportedPresent &&
243 !DeviceExtension->DeletePending;
244 break;
245
247 DPRINT("IRP_MN_FILTER_RESOURCE_REQUIREMENTS received\n");
248 /* Nothing to do */
249 Irp->IoStatus.Status = Status;
250 break;
251
252 default:
253 DPRINT1("Unknown IOCTL 0x%lx\n", IrpSp->MinorFunction);
254 break;
255 }
256
257 Irp->IoStatus.Information = Information;
258 Irp->IoStatus.Status = Status;
260
261 DPRINT("Leaving. Status 0x%X\n", Status);
262
263 if (DeleteDevice)
265
266 return Status;
267}
unsigned char BOOLEAN
Definition: actypes.h:127
#define DPRINT1
Definition: precomp.h:8
static NTSTATUS FdcPdoQueryCapabilities(IN PDEVICE_OBJECT DeviceObject, PIO_STACK_LOCATION IrpSp)
Definition: pdo.c:20
static NTSTATUS FdcPdoQueryTargetDeviceRelation(IN PDEVICE_OBJECT DeviceObject, OUT ULONG_PTR *Information)
Definition: pdo.c:98
VOID FdcPdoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: pdo.c:120
static NTSTATUS FdcPdoQueryId(IN PDEVICE_OBJECT DeviceObject, IN PIO_STACK_LOCATION IrpSp, OUT ULONG_PTR *Information)
Definition: pdo.c:44
@ TargetDeviceRelation
Definition: iotypes.h:2158
#define IRP_MN_QUERY_PNP_DEVICE_STATE
#define IRP_MN_EJECT
#define IRP_MN_DEVICE_USAGE_NOTIFICATION
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS
#define IRP_MN_QUERY_ID
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
#define IRP_MN_QUERY_DEVICE_TEXT
#define IRP_MN_QUERY_CAPABILITIES
#define IRP_MN_QUERY_RESOURCES
#define IRP_MN_SET_LOCK
#define IRP_MN_QUERY_BUS_INFORMATION

Referenced by FdcPnp().