Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De term subdevice wordt gebruikt om de binding te beschrijven van de vier onderdelen die worden vermeld in de volgende tabel.
| Onderdeel | Beschrijving |
|---|---|
Miniport-object |
Een object dat de IMiniportXxx-interface van het minipoortstuurprogramma beschikbaar maakt |
Poortobject |
Een object dat de IPortXxx-interface van het poortstuurprogramma beschikbaar maakt |
Bronnenlijstobject |
Een object met een lijst met bronnen voor het adapterstuurprogramma die zijn toegewezen aan het subdevice |
Referentiestring |
Een naam die is toegevoegd aan de naam van het apparaatpad om een subapparaat op te geven tijdens het maken van het filter |
De IMiniportXxx - en IPortXxx-interfaces van een subdevice nemen respectievelijk over van de basisinterfaces IMiniport en IPort.
Het PortCls-systeemstuurprogramma maakt geen onderscheid tussen het poortstuurprogramma en het minipoortstuurprogramma. Hiervoor is alleen een object vereist, zoals het poortobject, met een interface die door het systeem gegenereerde aanvragen kan verwerken.
Op dezelfde manier is PortCls niet rechtstreeks betrokken bij het beheren van resources. Het hoeft alleen de verzoekhandler (het poortstuurprogramma) aan een bronnenlijst te koppelen. Het adapterstuurprogramma is verantwoordelijk voor het verbinden van de poort-, minipoort- en resourcelijstobjecten.
In het volgende codevoorbeeld ziet u hoe het adapterstuurprogramma deze acties uitvoert:
//
// Instantiate the port by calling a function supplied by PortCls.
//
PPORT port;
NTSTATUS ntStatus = PcNewPort(&port, PortClassId);
if (NT_SUCCESS(ntStatus))
{
PUNKNOWN miniport;
//
// Create the miniport object.
//
if (MiniportCreate) // a function to create a proprietary miniport
{
ntStatus = MiniportCreate(&miniport,
MiniportClassId, NULL, NonPagedPool);
}
else // Ask PortCls for one of its built-in miniports.
{
ntStatus = PcNewMiniport((PMINIPORT*)&miniport,
MiniportClassId);
}
if (NT_SUCCESS(ntStatus))
{
//
// Bind the port, miniport, and resources.
//
ntStatus = port->Init(DeviceObject,
Irp, miniport, UnknownAdapter, ResourceList);
if (NT_SUCCESS(ntStatus))
{
//
// Hand the port driver and the reference
// string to PortCls.
//
ntStatus = PcRegisterSubdevice(DeviceObject,
Name, port);
}
//
// We no longer need to reference the miniport driver.
// Either the port driver now references it,
// or binding failed and it should be deleted.
//
miniport->Release();
}
//
// Release the reference that existed when PcNewPort() gave us
// the pointer in the first place. This reference must be released
// regardless of whether the binding of the port and miniport
// drivers succeeded.
//
port->Release();
}
Zie PcNewPort, PcNewMiniport en PcRegisterSubdevice voor meer informatie over de functieaanroepen van PortCls in het voorgaande codevoorbeeld.