Partager via


fonction de rappel PALLOCATE_ADAPTER_CHANNEL (wdm.h)

La routine AllocateAdapterChannel prépare le système pour une opération DMA pour le compte de l’objet d’appareil cible, puis appelle la routine AdapterControl fournie par le pilote pour effectuer l’opération DMA.

Syntaxe

PALLOCATE_ADAPTER_CHANNEL PallocateAdapterChannel;

NTSTATUS PallocateAdapterChannel(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PDEVICE_OBJECT DeviceObject,
  [in] ULONG NumberOfMapRegisters,
  [in] PDRIVER_CONTROL ExecutionRoutine,
  [in] PVOID Context
)
{...}

Paramètres

[in] DmaAdapter

Pointeur vers la structure DMA_ADAPTER retournée par IoGetDmaAdapter qui représente l’adaptateur maître de bus ou le contrôleur DMA.

[in] DeviceObject

Pointeur vers l’objet d’appareil qui représente l’appareil cible pour une opération DMA demandée.

[in] NumberOfMapRegisters

Spécifie le nombre de registres de carte à utiliser dans le transfert. Cette valeur est inférieure au nombre de registres de carte nécessaires pour satisfaire la demande de transfert actuelle, et le nombre de registres de carte disponibles retournés par IoGetDmaAdapter.

[in] ExecutionRoutine

Pointeur vers une routine AdapterControl fournie par le pilote. La routine est appelée lorsque le contrôleur DMA système ou l’adaptateur bus-master devient disponible.

[in] Context

Pointeur vers le contexte déterminé par le pilote à passer à la routine AdapterControl.

Valeur de retour

Cette routine peut retourner l’une des valeurs NTSTATUS suivantes.

Retourner le code Description
STATUS_SUCCESS
Le canal de l’adaptateur a été alloué. Le système appelle la routine AdapterControl une fois que l’opération DMA peut commencer.
STATUS_INSUFFICIENT_RESOURCES
Le NumberOfMapRegisters est supérieur à la valeur retournée par IoGetDmaAdapter. La routine AdapterControl ne sera pas appelée.

Remarques

AllocateAdapterChannel n’est pas une routine système qui peut être appelée directement par nom. Cette routine est appelante uniquement par le pointeur de l’adresse retournée dans une structure DMA_OPERATIONS. Les pilotes obtiennent l’adresse de cette routine en appelant IoGetDmaAdapter.

Un pilote appelle la routine AllocateAdapterControl pour inscrire une routine AdapterControl qui effectue une opération DMA pour le pilote. La routine AdapterControl effectue une opération DMA à l’aide du contrôleur DMA système ou d’un adaptateur maître de bus.

Si l’opération DMA peut être effectuée immédiatement, le système appelle immédiatement AdapterControl. Si le contrôleur DMA système ou l’adaptateur maître de bus est actuellement utilisé, AllocateAdapterChannel met en file d’attente le AdapterControl jusqu’à ce que l’adaptateur soit disponible. Dans les deux cas, AllocateAdapterChannel retourne STATUS_SUCCESS.

Si le système ne dispose pas des ressources nécessaires pour effectuer l’opération DMA, AllocateAdapterChannel retourne STATUS_INSUFFICIENT_RESOURCES. Dans ce cas, AdapterControl n’est pas mis en file d’attente et le pilote doit terminer l’IRP actuel avec le code d’erreur approprié (par exemple, STATUS_INSUFFICIENT_RESOURCES).

Cette routine réserve un accès exclusif à un canal de contrôleur DMA et mappe les registres pour une ou plusieurs opérations DMA requises pour satisfaire la demande de transfert de l’IRP actuelle pour l’appareil spécifié.

Une seule requête DMA peut être mise en file d’attente pour un objet d’appareil à tout moment. Par conséquent, le pilote ne doit pas appeler AllocateAdapterChannel à nouveau pour une autre opération DMA sur le même objet d’appareil tant que la routine AdapterControl n’a pas terminé l’exécution. En outre, un pilote ne doit pas appeler AllocateAdapterChannel à partir de sa routine AdapterControl.

Le système transmet la valeur du membre CurrentIrp de DeviceObject en tant que paramètre Irp de AdapterControl. Si AllocateAdapterChannel est appelé à partir de la routine StartIo d’un pilote, il est garanti de pointer vers l’IRP que StartIo a été appelée à traiter. Sinon, pour utiliser le paramètre Irp de AdapterControl, le pilote doit définir CurrentIrp pour pointer vers l’IRP actuel avant d’appeler AllocateAdapterChannel.

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows 2000.
plateforme cible Bureau
d’en-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL DISPATCH_LEVEL
règles de conformité DDI IrqlDispatch(storport), IrqlDispatch(storport), IrqlDispatch(wdm)

Voir aussi

DEVICE_OBJECT

DMA_ADAPTER

DMA_OPERATIONS

FlushAdapterBuffers

FreeAdapterChannel

FreeMapRegisters

IoGetDmaAdapter

MapTransfer

ReadDmaCounter