Freigeben über


WdfDeviceSetAlignmentRequirement-Funktion (wdfdevice.h)

[Gilt nur für KMDF]

Die WdfDeviceSetAlignmentRequirement-Methode registriert die bevorzugte Adressausrichtung des Treibers für die Datenpuffer, die das Gerät bei Speicherübertragungsvorgängen verwendet.

Syntax

void WdfDeviceSetAlignmentRequirement(
  [in] WDFDEVICE Device,
  [in] ULONG     AlignmentRequirement
);

Parameter

[in] Device

Ein Handle für ein Framework-Geräteobjekt.

[in] AlignmentRequirement

Die hardwareabhängige Ausrichtungsanforderung für einen Datenpuffer. Dieser Wert muss um eins kleiner als die Ausrichtungsgrenze sein. Sie können beispielsweise 15 für eine 16-Byte-Ausrichtungsgrenze und 31 für eine 32-Byte-Ausrichtungsgrenze angeben. Sie können auch eine der FILE_Xxxx_ALIGNMENT Konstanten verwenden, die in Wdm.h definiert sind, z. B.:

//
// Define alignment requirement values
//
#define FILE_BYTE_ALIGNMENT             0x00000000
#define FILE_WORD_ALIGNMENT             0x00000001
#define FILE_LONG_ALIGNMENT             0x00000003
#define FILE_QUAD_ALIGNMENT             0x00000007
#define FILE_OCTA_ALIGNMENT             0x0000000f
#define FILE_32_BYTE_ALIGNMENT          0x0000001f
#define FILE_64_BYTE_ALIGNMENT          0x0000003f
#define FILE_128_BYTE_ALIGNMENT         0x0000007f
#define FILE_256_BYTE_ALIGNMENT         0x000000ff
#define FILE_512_BYTE_ALIGNMENT         0x000001ff

Rückgabewert

Keine

Bemerkungen

Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.

Ein Treiber, der direkte E/A verwendet, kann WdfDeviceSetAlignmentRequirement aufrufen, um eine bevorzugte Ausrichtungsanforderung zu registrieren. Die Ausrichtung gilt für E/A-Anforderungen, die den E/A-Manager durchlaufen, und nicht für E/A-Anforderungen, die von einem anderen Treiber, der IoCallDriver aufruft, an Ihren Treiber gesendet werden.

Da der E/A-Manager nicht immer die angeforderte Ausrichtung verwendet, sollte der Treiber für nicht ausgerichtete Puffer vorbereitet sein.

Der Treiber kann WdfDeviceGetAlignmentRequirement aufrufen, um den aktuellen Wert für die Ausrichtungsanforderung des Geräts zu erhalten.

Der E/A-Manager legt einen Ausrichtungsanforderungswert für das Gerät fest, wenn der Treiber WdfDeviceCreate aufruft. Weitere Informationen zum Wert für die Ausrichtungsanforderung eines Geräts und wann ein Treiber den Wert ändern muss, finden Sie unter Initialisieren eines Geräteobjekts in der WDM-Dokumentation.

Wenn Ihr Treiber eine Ausrichtungsanforderung angibt, die höher als die Seitengröße des Computers (PAGE_SIZE) ist, werden die logischen Adressen, die die WdfCommonBufferGetAlignedLogicalAddress-Methode zurückgibt, immer an der angegebenen Ausrichtungsanforderung ausgerichtet, aber die virtuellen Adressen, die die WdfCommonBufferGetAlignedVirtualAddress-Methode zurückgibt, sind möglicherweise nicht an der Ausrichtungsanforderung ausgerichtet.

Wenn Ihr Treiber eine Ausrichtungsanforderung angibt, die kleiner als die Seitengröße des Computers ist, werden alle logischen und virtuellen Adressen an der angegebenen Ausrichtungsanforderung ausgerichtet.

Weitere Informationen zum Aufrufen von WdfDeviceSetAlignmentRequirement finden Sie unter Aktivieren von DMA-Transaktionen und Verwenden allgemeiner Puffer.

Beispiele

Das folgende Codebeispiel stammt aus dem AMCC5933 Beispieltreibers. In diesem Beispiel wird die aktuelle Ausrichtungsanforderung eines Geräts überprüft, und die Ausrichtungsanforderung wird bei Bedarf auf einen neuen Wert festgelegt. Beachten Sie, dass der genaue Ausrichtungswert von der Hardware abhängt.

ULONG alignReq;

alignReq = WdfDeviceGetAlignmentRequirement(device);
if (alignReq < AMCC5933_ALIGNMENT__32BITS) {
//
// Set the S5933 alignment requirement to a new value.
//
WdfDeviceSetAlignmentRequirement(
                                 device,
                                 AMCC5933_ALIGNMENT__32BITS
                                 );
}

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
Kopfzeile wdfdevice.h (einschließen von Wdf.h)
Bibliothek Wdf01000.sys (siehe Versionsverwaltung der Frameworkbibliothek).)
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Weitere Informationen

WdfCommonBufferGetAlignedLogicalAddress

WdfCommonBufferGetAlignedVirtualAddress

WdfDeviceGetAlignmentRequirement