Freigeben über


PALLOCATE_ADAPTER_CHANNEL Rückruffunktion (wdm.h)

Die AllocateAdapterChannel Routine bereitet das System für einen DMA-Vorgang im Auftrag des Zielgerätobjekts vor und ruft dann die vom Treiber bereitgestellte AdapterControl- Routine auf, um den DMA-Vorgang auszuführen.

Syntax

PALLOCATE_ADAPTER_CHANNEL PallocateAdapterChannel;

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

Parameter

[in] DmaAdapter

Zeiger auf die DMA_ADAPTER Struktur, die von IoGetDmaAdapter zurückgegeben wird, die den Busmasteradapter oder DMA-Controller darstellt.

[in] DeviceObject

Zeiger auf das Geräteobjekt, das das Zielgerät für einen angeforderten DMA-Vorgang darstellt.

[in] NumberOfMapRegisters

Gibt die Anzahl der Kartenregister an, die in der Übertragung verwendet werden sollen. Dieser Wert ist der geringere Wert der Anzahl der Kartenregister, die erforderlich sind, um die aktuelle Übertragungsanforderung zu erfüllen, und die Anzahl der verfügbaren Kartenregister, die von IoGetDmaAdapterzurückgegeben werden.

[in] ExecutionRoutine

Zeiger auf eine vom Treiber bereitgestellte AdapterControl- Routine. Die Routine wird aufgerufen, wenn der System-DMA-Controller oder der Busmasteradapter verfügbar wird.

[in] Context

Zeiger auf den vom Treiber bestimmten Kontext, der an die AdapterControl Routine übergeben werden soll.

Rückgabewert

Diese Routine kann einen der folgenden NTSTATUS-Werte zurückgeben.

Rückgabecode Beschreibung
STATUS_SUCCESS
Der Adapterkanal wurde zugewiesen. Das System ruft die AdapterControl- Routine auf, sobald der DMA-Vorgang gestartet werden kann.
STATUS_INSUFFICIENT_RESOURCES
Die NumberOfMapRegisters- ist größer als der von IoGetDmaAdapterzurückgegebene Wert. Die AdapterControl Routine wird nicht aufgerufen.

Bemerkungen

AllocateAdapterChannel ist keine Systemroutine, die direkt anhand des Namens aufgerufen werden kann. Diese Routine kann nur durch Zeiger von der in einer DMA_OPERATIONS Struktur zurückgegebenen Adresse aufgerufen werden. Treiber rufen die Adresse dieser Routine ab, indem sie IoGetDmaAdapteraufruft.

Ein Treiber ruft die AllocateAdapterControl Routine auf, um eine AdapterControl Routine zu registrieren, die einen DMA-Vorgang für den Treiber ausführt. Die AdapterControl Routine führt einen DMA-Vorgang entweder mit dem System-DMA-Controller oder einem Busmasteradapter aus.

Wenn der DMA-Vorgang sofort ausgeführt werden kann, ruft das System sofort AdapterControlauf. Wenn der System-DMA-Controller oder der Busmasteradapter zurzeit verwendet wird, AllocateAdapterChannel die AdapterControl- in die Warteschlange stellt, bis der Adapter verfügbar ist. In beiden Fällen gibt AllocateAdapterChannel STATUS_SUCCESS zurück.

Wenn dem System die Ressourcen zum Ausführen des DMA-Vorgangs fehlen, gibt AllocateAdapterChannel STATUS_INSUFFICIENT_RESOURCES zurück. In diesem Fall wird AdapterControl- nicht in die Warteschlange gestellt, und der Treiber sollte den aktuellen IRP mit dem entsprechenden Fehlercode (z. B. STATUS_INSUFFICIENT_RESOURCES) abschließen.

Diese Routine reserviert exklusiven Zugriff auf einen DMA-Controllerkanal und Kartenregister für die einen oder mehrere DMA-Vorgänge, die erforderlich sind, um die Übertragungsanforderung des aktuellen IRP für das angegebene Gerät zu erfüllen.

Für ein Geräteobjekt kann jeweils nur eine DMA-Anforderung in die Warteschlange gestellt werden. Daher sollte der Treiber AllocateAdapterChann el nicht erneut für einen anderen DMA-Vorgang auf demselben Geräteobjekt aufrufen, bis die AdapterControl Routine die Ausführung abgeschlossen hat. Darüber hinaus darf ein Treiber AllocateAdapterChann el nicht innerhalb seiner AdapterControl Routine aufrufen.

Das System übergibt den Wert des CurrentIrp Members von DeviceObject als Irp Parameter von AdapterControl. Wenn AllocateAdapterChannel aus der StartIo--Routine eines Treibers aufgerufen wird, wird dies garantiert auf das IRP verweisen, das StartIo- zum Verarbeiten aufgerufen wurde. Andernfalls muss der Treiber für die Verwendung des Irp- Parameters von AdapterControlCurrentIrp- so festlegen, dass er auf den aktuellen IRP zeigt, bevor AllocateAdapterChannelaufgerufen wird.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Desktop
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL- DISPATCH_LEVEL
DDI-Complianceregeln IrqlDispatch(storport), IrqlDispatch(storport), IrqlDispatch(wdm)

Siehe auch

DEVICE_OBJECT

DMA_ADAPTER

DMA_OPERATIONS

FlushAdapterBuffers

FreeAdapterChannel-

FreeMapRegisters-

IoGetDmaAdapter-

MapTransfer

ReadDmaCounter-