34 return Irp->IoStatus.Status;
40 DeviceRelations->
Count = 1;
103 else if (
PdoExt->SpecialFiles > 0)
109 return Irp->IoStatus.Status;
123 size_t CharCount, Remaining;
131 CharCount =
sizeof(
"ISAPNP\\XXXFFFF");
135 CharCount +=
sizeof(
"_DEV1234") -
sizeof(
ANSI_NULL);
139 CharCount *
sizeof(
WCHAR),
174 CharCount =
sizeof(
"ISAPNP\\XXXFFFF") +
180 CharCount +=
sizeof(
"_DEV1234") -
sizeof(
ANSI_NULL);
184 CharCount *
sizeof(
WCHAR),
189 DPRINT(
"Hardware IDs:\n");
234 DPRINT(
" '%S'\n", IdStart);
250 CharCount +=
sizeof(
"*PNPxxxx");
255 return Irp->IoStatus.Status;
258 CharCount *
sizeof(
WCHAR),
263 DPRINT(
"Compatible IDs:\n");
284 DPRINT(
" '%S'\n", IdStart);
300 CharCount *
sizeof(
WCHAR),
320 return Irp->IoStatus.Status;
340 static const WCHAR ReadPortId[] =
L"ISAPNP\\ReadDataPort";
401 return Irp->IoStatus.Status;
426 if (!
PdoExt->IsaPnpDevice->FriendlyName)
427 return Irp->IoStatus.Status;
429 CharCount =
strlen(
PdoExt->IsaPnpDevice->FriendlyName) +
433 return Irp->IoStatus.Status;
436 CharCount *
sizeof(
WCHAR),
447 PdoExt->IsaPnpDevice->FriendlyName);
459 return Irp->IoStatus.Status;
484 Irp->IoStatus.Information = 0;
488 if (!
PdoExt->ResourceList)
489 return Irp->IoStatus.Status;
491 ListSize =
PdoExt->ResourceListSize;
516 if (!
PdoExt->RequirementsList)
517 return Irp->IoStatus.Status;
519 ListSize =
PdoExt->RequirementsList->ListSize;
529 #define IS_READ_PORT(_d) ((_d)->Type == CmResourceTypePort && (_d)->u.Port.Length > 1) 550 if (
ResourceList->List[0].PartialResourceList.Version != 1 ||
551 ResourceList->List[0].PartialResourceList.Revision != 1)
553 DPRINT1(
"Bad resource list version (%u.%u)\n",
561 if (
ResourceList->List[0].PartialResourceList.Count > 3)
563 ULONG SelectedPort = 0;
568 &
ResourceList->List[0].PartialResourceList.PartialDescriptors[
i];
580 SelectedPort = PartialDescriptor->
u.
Port.Start.u.LowPart;
588 SelectedPort = PartialDescriptor->
u.
Port.Start.u.LowPart;
594 ASSERT(SelectedPort != 0);
596 if (
PdoExt->RequirementsList)
614 else if (
ResourceList->List[0].PartialResourceList.Count == 3)
616 if (
ResourceList->List[0].PartialResourceList.Count > 3)
624 &
ResourceList->List[0].PartialResourceList.PartialDescriptors[
i];
633 if (FdoExt->
Cards > 0)
637 IsaPnpAcquireDeviceDataLock(FdoExt);
640 Status = IsaHwFillDeviceList(FdoExt);
643 IsaPnpReleaseDeviceDataLock(FdoExt);
685 return Irp->IoStatus.Status;
735 return Irp->IoStatus.Status;
756 IsaHwWakeDevice(
PdoExt->IsaPnpDevice);
757 IsaHwDeactivateDevice(
PdoExt->IsaPnpDevice);
766 IsaPnpAcquireDeviceDataLock(FdoExt);
769 --FdoExt->DeviceCount;
771 IsaPnpReleaseDeviceDataLock(FdoExt);
791 IsaPnpAcquireDeviceDataLock(FdoExt);
794 for (
Entry = FdoExt->DeviceListHead.Flink;
795 Entry != &FdoExt->DeviceListHead;
805 IsaPnpReleaseDeviceDataLock(FdoExt);
830 DPRINT(
"Removing CSN %u, LDN %u\n", LogDev->
CSN, LogDev->
LDN);
832 if (
PdoExt->RequirementsList)
875 DPRINT(
"%s(%p, %p) CSN %u, LDN %u, Minor - %X\n",
879 PdoExt->IsaPnpDevice->CSN,
880 PdoExt->IsaPnpDevice->LDN,
885 DPRINT(
"%s(%p, %p) ReadPort, Minor - %X\n",
898 IsaHwWakeDevice(
PdoExt->IsaPnpDevice);
905 IsaHwActivateDevice(
PdoExt->FdoExt,
PdoExt->IsaPnpDevice);
909 DPRINT1(
"Failed to configure CSN %u, LDN %u with status 0x%08lx\n",
930 IsaHwWakeDevice(
PdoExt->IsaPnpDevice);
931 IsaHwDeactivateDevice(
PdoExt->IsaPnpDevice);
949 if (
PdoExt->SpecialFiles > 0)
961 if (
PdoExt->SpecialFiles > 0)
#define STATUS_REVISION_MISMATCH
NTSTRSAFEVAPI RtlStringCchPrintfExW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd, _Out_opt_ size_t *pcchRemaining, _In_ STRSAFE_DWORD dwFlags, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
#define IRP_MN_CANCEL_REMOVE_DEVICE
static NTSTATUS IsaReadPortRemoveDevice(_In_ PISAPNP_PDO_EXTENSION PdoExt, _In_ BOOLEAN FinalRemove)
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@379::@381 Port
#define ISAPNP_SCANNED_BY_READ_PORT
The bus has been scanned by Read Port PDO.
#define ISAPNP_HAS_RESOURCES
Cleared when the device has no boot resources.
#define IRP_MN_QUERY_RESOURCES
#define IRP_MN_REMOVE_DEVICE
#define STATUS_INSUFFICIENT_RESOURCES
#define ISAPNP_ENUMERATED
Whether the device has been reported to the PnP manager.
#define ISAPNP_PRESENT
Cleared when the device is physically removed.
NTSTATUS IsaPnpFillDeviceRelations(_In_ PISAPNP_FDO_EXTENSION FdoExt, _Inout_ PIRP Irp, _In_ BOOLEAN IncludeDataPort)
ACPI_SIZE strlen(const char *String)
IN BOOLEAN OUT PSTR Buffer
#define UNREFERENCED_PARAMETER(P)
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS
PDEVICE_OBJECT Objects[1]
static NTSTATUS IsaPdoQueryId(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
PUSBHUB_PORT_PDO_EXTENSION NTAPI PdoExt(IN PDEVICE_OBJECT DeviceObject)
VOID IsaPnpRemoveReadPortDO(_In_ PDEVICE_OBJECT Pdo)
#define ISAPNP_READ_PORT_NEED_REBALANCE
The I/O resource requirements have changed.
static NTSTATUS IsaPdoQueryCapabilities(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
static NTSTATUS IsaPdoQueryDeviceRelations(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
VOID NTAPI IoInvalidateDeviceState(IN PDEVICE_OBJECT DeviceObject)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
NTSTATUS IsaHwConfigureDevice(_In_ PISAPNP_FDO_EXTENSION FdoExt, _In_ PISAPNP_LOGICAL_DEVICE LogicalDevice, _In_ PCM_RESOURCE_LIST Resources)
static NTSTATUS IsaPdoQueryResources(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
static NTSTATUS IsaPdoRemoveDevice(_In_ PISAPNP_PDO_EXTENSION PdoExt, _In_ BOOLEAN FinalRemove)
#define IRP_MN_QUERY_REMOVE_DEVICE
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
_Must_inspect_result_ _In_opt_ PVOID _In_opt_ PVOID InstanceId
COMMON_DEVICE_EXTENSION Common
PISAPNP_ALTERNATIVES Alternatives
#define IoCompleteRequest
#define DeviceCapabilities
static NTSTATUS IsaPdoFilterResourceRequirements(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
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 ISAPNP_READ_PORT_ALLOW_FDO_SCAN
Allows the active FDO to scan the bus.
NTSTATUS IsaPdoPnp(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
#define IRP_MN_QUERY_STOP_DEVICE
struct _LIST_ENTRY * Flink
#define IRP_MN_SURPRISE_REMOVAL
VOID IsaPnpRemoveLogicalDeviceDO(_In_ PDEVICE_OBJECT Pdo)
#define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED
#define IRP_MN_STOP_DEVICE
#define IoAdjustPagingPathCount(_Count, _Increment)
#define NT_SUCCESS(StatCode)
NTSTATUS IsaPnpCreateReadPortDORequirements(_In_ PISAPNP_PDO_EXTENSION PdoExt, _In_opt_ ULONG SelectedReadPort)
#define IRP_MN_START_DEVICE
#define PNP_DEVICE_NOT_DISABLEABLE
#define IRP_MN_QUERY_DEVICE_TEXT
static NTSTATUS IsaPdoStartReadPort(_In_ PISAPNP_PDO_EXTENSION PdoExt, _In_ PCM_RESOURCE_LIST ResourceList)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IRP_MN_QUERY_BUS_INFORMATION
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@379 u
#define PNP_DEVICE_FAILED
LIST_ENTRY CompatibleIdList
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
PDEVICE_OBJECT ReadPortPdo
VOID NTAPI IoInvalidateDeviceRelations(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_RELATION_TYPE Type)
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 IsaPdoQueryResourceRequirements(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
_In_ PIO_STACK_LOCATION IrpSp
#define STATUS_DEVICE_BUSY
#define STATUS_RESOURCE_REQUIREMENTS_CHANGED
#define IRP_MN_QUERY_DEVICE_RELATIONS
static NTSTATUS IsaPdoQueryDeviceText(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
_In_ WDFIORESREQLIST RequirementsList
static NTSTATUS IsaReadPortQueryId(_Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
#define ObReferenceObject
static NTSTATUS IsaPdoQueryDeviceUsageNotification(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp, _In_ PIO_STACK_LOCATION IrpSp)
static NTSTATUS IsaPdoQueryBusInformation(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp)
#define RtlCopyMemory(Destination, Source, Length)
UCHAR IsaHwTryReadDataPort(_In_ PUCHAR ReadDataPort)
#define IRP_MN_CANCEL_STOP_DEVICE
#define IRP_MN_DEVICE_USAGE_NOTIFICATION
static NTSTATUS IsaPdoQueryPnpDeviceState(_In_ PISAPNP_PDO_EXTENSION PdoExt, _Inout_ PIRP Irp)
_In_ WDFDEVICE _In_ PPNP_BUS_INFORMATION BusInformation
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
#define STATUS_DEVICE_CONFIGURATION_ERROR
#define ExFreePoolWithTag(_P, _T)
#define POWER_SYSTEM_MAXIMUM
base of all file and directory entries
#define IRP_MN_QUERY_PNP_DEVICE_STATE
#define ISAPNP_HAS_MULTIPLE_LOGDEVS
Indicates if the parent card has multiple logical devices.
#define IRP_MN_QUERY_CAPABILITIES