ReactOS 0.4.17-dev-1190-g4c812f4
pdo.c File Reference
#include "fdc.h"
#include <debug.h>
Include dependency graph for pdo.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

static NTSTATUS FdcPdoQueryCapabilities (IN PDEVICE_OBJECT DeviceObject, PIO_STACK_LOCATION IrpSp)
 
static NTSTATUS FdcPdoQueryId (IN PDEVICE_OBJECT DeviceObject, IN PIO_STACK_LOCATION IrpSp, OUT ULONG_PTR *Information)
 
static NTSTATUS FdcPdoQueryTargetDeviceRelation (IN PDEVICE_OBJECT DeviceObject, OUT ULONG_PTR *Information)
 
VOID FdcPdoDeleteDevice (IN PDEVICE_OBJECT DeviceObject)
 
NTSTATUS NTAPI FdcPdoPnp (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 13 of file pdo.c.

Function Documentation

◆ 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 NULL
Definition: types.h:112
#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)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1261
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
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061

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}
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
_In_ PIO_STACK_LOCATION IrpSp
Definition: create.c:4138
Status
Definition: gdiplustypes.h:24
_In_ PIRP Irp
Definition: kse.h:79
#define IRP_MN_SURPRISE_REMOVAL
Definition: ntifs_ex.h:408
#define IoCompleteRequest
Definition: irp.c:1272
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:73
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
struct _IO_STACK_LOCATION::@5020::@5045 QueryDeviceRelations
union _IO_STACK_LOCATION::@1814 Parameters
uint32_t ULONG_PTR
Definition: typedefs.h:65
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
Definition: wdfrequest.h:1049
#define IRP_MN_CANCEL_STOP_DEVICE
@ TargetDeviceRelation
Definition: iotypes.h:2158
#define IRP_MN_QUERY_PNP_DEVICE_STATE
#define IRP_MN_EJECT
#define IO_NO_INCREMENT
Definition: iotypes.h:598
#define IRP_MN_START_DEVICE
#define IRP_MN_DEVICE_USAGE_NOTIFICATION
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS
#define IRP_MN_QUERY_ID
#define IRP_MN_REMOVE_DEVICE
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define IRP_MN_QUERY_STOP_DEVICE
#define IRP_MN_QUERY_DEVICE_TEXT
#define IRP_MN_QUERY_CAPABILITIES
#define IRP_MN_QUERY_RESOURCES
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define IRP_MN_STOP_DEVICE
#define IRP_MN_SET_LOCK
#define IRP_MN_QUERY_BUS_INFORMATION
#define IRP_MN_QUERY_REMOVE_DEVICE

Referenced by FdcPnp().

◆ FdcPdoQueryCapabilities()

static NTSTATUS FdcPdoQueryCapabilities ( IN PDEVICE_OBJECT  DeviceObject,
PIO_STACK_LOCATION  IrpSp 
)
static

Definition at line 20 of file pdo.c.

23{
24 PPDO_DEVICE_EXTENSION DeviceExtension;
26
27 DPRINT("Called\n");
28
29 DeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
31
32 if (DeviceCapabilities->Version != 1)
34
35 DeviceCapabilities->UniqueID = FALSE;
36 DeviceCapabilities->Address = DeviceExtension->DriveInfo->PeripheralNumber;
37
38 return STATUS_SUCCESS;
39}
_In_ PIOMMU_DEVICE_PATH _In_ PIOMMU_SVM_CAPABILITIES DeviceCapabilities
Definition: haltypes.h:1892
ULONG PeripheralNumber
Definition: fdc.h:25
struct _IO_STACK_LOCATION::@5020::@5047 DeviceCapabilities
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define DeviceCapabilities
Definition: wingdi.h:4895
* PDEVICE_CAPABILITIES
Definition: iotypes.h:965

Referenced by FdcPdoPnp().

◆ FdcPdoQueryId()

static NTSTATUS FdcPdoQueryId ( IN PDEVICE_OBJECT  DeviceObject,
IN PIO_STACK_LOCATION  IrpSp,
OUT ULONG_PTR *  Information 
)
static

Definition at line 44 of file pdo.c.

48{
49 PPDO_DEVICE_EXTENSION DeviceExtension;
53
54 DeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
56
57 switch (IrpSp->Parameters.QueryId.IdType)
58 {
60 DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryDeviceID\n");
61 SourceString = &DeviceExtension->DeviceId;
62 break;
63
65 DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryHardwareIDs\n");
66 SourceString = &DeviceExtension->HardwareIds;
67 break;
68
70 DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryCompatibleIDs\n");
71 SourceString = &DeviceExtension->CompatibleIds;
72 break;
73
75 DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryInstanceID\n");
76 SourceString = &DeviceExtension->InstanceId;
77 break;
78
79 default:
80 DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_ID / unknown query id type 0x%lx\n",
81 IrpSp->Parameters.QueryId.IdType);
84 }
85
88 &String);
89
90 *Information = (ULONG_PTR)String.Buffer;
91
92 return Status;
93}
#define STATUS_NOT_SUPPORTED
Definition: d3dkmdt.h:48
#define ULONG_PTR
Definition: config.h:101
#define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE
Definition: green.h:15
NTSTATUS DuplicateUnicodeString(IN ULONG Flags, IN PCUNICODE_STRING SourceString, OUT PUNICODE_STRING DestinationString)
Definition: misc.c:31
#define ASSERT(a)
Definition: mode.c:44
_Out_ _Inout_ POEM_STRING _In_ PCUNICODE_STRING SourceString
Definition: rtlfuncs.h:1957
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
struct _IO_STACK_LOCATION::@5020::@5051 QueryId
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2439
@ BusQueryCompatibleIDs
Definition: iotypes.h:2953
@ BusQueryInstanceID
Definition: iotypes.h:2954
@ BusQueryDeviceID
Definition: iotypes.h:2951
@ BusQueryHardwareIDs
Definition: iotypes.h:2952

Referenced by FdcPdoPnp().

◆ FdcPdoQueryTargetDeviceRelation()

static NTSTATUS FdcPdoQueryTargetDeviceRelation ( IN PDEVICE_OBJECT  DeviceObject,
OUT ULONG_PTR *  Information 
)
static

Definition at line 98 of file pdo.c.

101{
102 PDEVICE_RELATIONS Relations;
103
105 sizeof(DEVICE_RELATIONS),
106 FDC_TAG);
107 if (Relations == NULL)
109
110 Relations->Count = 1;
111 Relations->Objects[0] = DeviceObject;
113
114 *Information = (ULONG_PTR)Relations;
115 return STATUS_SUCCESS;
116}
#define FDC_TAG
Definition: fdc.h:105
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define PagedPool
Definition: env_spec_w32.h:308
PDEVICE_OBJECT Objects[1]
Definition: iotypes.h:2165
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define ObReferenceObject
Definition: obfuncs.h:204

Referenced by FdcPdoPnp().