26 if (
Irp->PendingReturned)
75 if ((PciConfig->VendorID == CurrentDevice->
PciConfig.VendorID) &&
76 (PciConfig->DeviceID == CurrentDevice->
PciConfig.DeviceID) &&
84 CurrentEntry = CurrentEntry->
Flink;
102 ULONG FunctionNumber;
117 for (FunctionNumber = 0; FunctionNumber <
PCI_MAX_FUNCTION; FunctionNumber++)
119 SlotNumber.u.bits.FunctionNumber = FunctionNumber;
121 DPRINT(
"Bus %1lu Device %2lu Func %1lu\n",
137 if (FunctionNumber == 0)
147 DPRINT(
"Bus %1lu Device %2lu Func %1lu VenID 0x%04hx DevID 0x%04hx\n",
186 if ((FunctionNumber == 0) &&
187 ((PciConfig.HeaderType & 0x80) == 0))
225 ErrorOccurred =
FALSE;
231 if (
Irp->IoStatus.Information)
235 DPRINT1(
"FIXME: leaking old bus relations\n");
252 PdoDeviceExtension =
NULL;
267 DPRINT(
"IoCreateDevice() failed with status 0x%X\n",
Status);
269 ErrorOccurred =
TRUE;
296 ErrorOccurred =
TRUE;
307 ErrorOccurred =
TRUE;
316 ErrorOccurred =
TRUE;
325 ErrorOccurred =
TRUE;
334 ErrorOccurred =
TRUE;
343 ErrorOccurred =
TRUE;
356 CurrentEntry = CurrentEntry->
Flink;
363 if (PdoDeviceExtension)
403 DPRINT(
"No allocated resources sent to driver\n");
409 DPRINT(
"Not enough allocated resources sent to driver\n");
424 ResourceDescriptor = &
AllocatedResources->List[0].PartialResourceList.PartialDescriptors[
i];
425 switch (ResourceDescriptor->
Type)
428 if (FoundBusNumber || ResourceDescriptor->
u.
BusNumber.Length < 1)
434 DPRINT(
"Found bus number resource: %lu\n", DeviceExtension->
BusNumber);
435 FoundBusNumber =
TRUE;
439 DPRINT(
"Unknown resource descriptor type 0x%x\n", ResourceDescriptor->
Type);
453 Irp->IoStatus.Information = 0;
520 DPRINT(
"IRP_MN_START_DEVICE received\n");
#define DO_DEVICE_INITIALIZING
_In_ WDFIORESREQLIST _In_ ULONG SlotNumber
#define STATUS_REVISION_MISMATCH
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define IRP_MN_REMOVE_DEVICE
#define STATUS_INSUFFICIENT_RESOURCES
static NTSTATUS FdoStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI ForwardIrpAndWait(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define STATUS_MORE_PROCESSING_REQUIRED
_Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PCM_RESOURCE_LIST * AllocatedResources
#define UNREFERENCED_PARAMETER(P)
#define STATUS_INVALID_PARAMETER
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
PDEVICE_OBJECT Objects[1]
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
NTSTATUS PciCreateDeviceLocationString(PUNICODE_STRING DeviceLocation, PPCI_DEVICE Device)
IN PVOID IN PVOID IN USHORT IN USHORT Size
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
static NTSTATUS PciCreateCompatibleIDsString(PUNICODE_STRING CompatibleIDs)
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
KSPIN_LOCK DeviceListLock
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
FORCEINLINE VOID IoCopyCurrentIrpStackLocationToNext(_Inout_ PIRP Irp)
PDEVICE_OBJECT DeviceObject
_In_ PDEVICE_OBJECT DeviceObject
return STATUS_NOT_IMPLEMENTED
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@385 u
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define FILE_DEVICE_CONTROLLER
#define IRP_MN_QUERY_REMOVE_DEVICE
_In_ PVOID _In_ ULONG Event
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
#define IoCompleteRequest
COMMON_DEVICE_EXTENSION Common
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@385::@393 BusNumber
#define FILE_AUTOGENERATED_DEVICE_NAME
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
#define IRP_MN_QUERY_STOP_DEVICE
struct _LIST_ENTRY * Flink
#define IRP_MN_SURPRISE_REMOVAL
UNICODE_STRING DeviceLocation
#define IRP_MN_STOP_DEVICE
#define NT_SUCCESS(StatCode)
UNICODE_STRING HardwareIDs
#define IRP_MN_START_DEVICE
NTSTATUS PciCreateDeviceDescriptionString(PUNICODE_STRING DeviceDescription, PPCI_DEVICE Device)
static NTSTATUS FdoQueryBusRelations(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, PIO_STACK_LOCATION IrpSp)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define STATUS_UNSUCCESSFUL
#define ExAllocatePoolWithTag(hernya, size, tag)
UNICODE_STRING DeviceDescription
static NTSTATUS FdoEnumerateDevices(PDEVICE_OBJECT DeviceObject)
union _PCI_SLOT_NUMBER::@3819 u
static IO_COMPLETION_ROUTINE ForwardIrpAndWaitCompletion
_Must_inspect_result_ _In_ WDFDEVICE Device
PPCI_DRIVER_EXTENSION DriverExtension
LIST_ENTRY DeviceListHead
NTSTATUS FdoPowerControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
NTSTATUS PciCreateDeviceIDString(PUNICODE_STRING DeviceID, PPCI_DEVICE Device)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
struct _DEVICE_RELATIONS DEVICE_RELATIONS
#define KeInitializeEvent(pEvt, foo, foo2)
PCI_SLOT_NUMBER SlotNumber
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
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)
#define InitializeListHead(ListHead)
_In_ PIO_STACK_LOCATION IrpSp
UNICODE_STRING InstanceID
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define IRP_MN_QUERY_DEVICE_RELATIONS
NTSTATUS FdoPnpControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
#define IoSkipCurrentIrpStackLocation(Irp)
#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)
NTHALAPI ULONG NTAPI HalGetBusData(BUS_DATA_TYPE, ULONG, ULONG, PVOID, ULONG)
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
#define CmResourceTypeBusNumber
#define IRP_MN_CANCEL_STOP_DEVICE
#define ExFreePoolWithTag(_P, _T)
#define IRP_MN_DEVICE_USAGE_NOTIFICATION
static NTSTATUS FdoLocateChildDevice(PPCI_DEVICE *Device, PFDO_DEVICE_EXTENSION DeviceExtension, PCI_SLOT_NUMBER SlotNumber, PPCI_COMMON_CONFIG PciConfig)
_In_ PCHAR _In_ ULONG DeviceNumber
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
UNICODE_STRING CompatibleIDs
#define IRP_MN_QUERY_PNP_DEVICE_STATE
PCI_COMMON_CONFIG PciConfig
#define IRP_MN_QUERY_CAPABILITIES
#define PCI_COMMON_HDR_LENGTH