Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le terme subdevice est utilisé pour décrire la liaison des quatre composants répertoriés dans le tableau suivant.
| Composant | Descriptif |
|---|---|
Miniport (objet) |
Objet qui expose l’interface IMiniportXxx du pilote miniport |
Objet Port |
Objet qui expose l’interface IPortXxx du pilote de port |
Objet de liste des ressources |
Objet contenant une liste de ressources de pilote d’adaptateur affectées au sous-composant |
Chaîne de référence |
Nom ajouté au nom du chemin d’accès de l’appareil pour spécifier un sous-élément lors de la création du filtre |
Les interfaces IMiniportXxx et IPortXxx d’un sous-composant héritent respectivement des interfaces de base IMiniport et IPort.
Le pilote système PortCls ne fait pas la distinction entre le pilote de port et le pilote miniport. Il nécessite simplement un objet, tel que l’objet de port, avec une interface qui peut gérer les requêtes générées par le système.
De même, PortCls n’est pas directement impliqué dans la gestion des ressources. Il doit uniquement lier le gestionnaire de requêtes (pilote de port) à une liste de ressources. Le pilote d’adaptateur est responsable de la liaison des objets de port, miniport et de liste de ressources ensemble.
L’exemple de code suivant montre comment le pilote d’adaptateur effectue ces actions :
//
// 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();
}
Pour plus d’informations sur les appels de fonction PortCls dans l’exemple de code précédent, consultez PcNewPort, PcNewMiniport et PcRegisterSubdevice.