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 zu einem Framework-Geräteobjekt.

[in] AlignmentRequirement

Die hardwareabhängige Ausrichtungsanforderung für einen Datenpuffer. Dieser Wert muss ein Wert kleiner sein als die Ausrichtungsgrenze. Sie können z. B. 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

Nichts

Bemerkungen

Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.

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 die, die von einem anderen Treiber an Ihren Treiber gesendet werden, der IoCallDriveraufruft.

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

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

Der E/A-Manager legt einen Ausrichtungsanforderungswert für das Gerät fest, wenn der Treiber WdfDeviceCreateaufruft. Weitere Informationen zum Ausrichtungsanforderungswert eines Geräts und zum Ändern des Werts durch einen Treiber finden Sie unter Initialisieren eines Geräteobjekts in der WDM-Dokumentation.

Wenn Ihr Treiber eine Ausrichtungsanforderung angibt, die größer ist als die Seitengröße des Computers (PAGE_SIZE), werden die logischen Adressen, die die WdfCommonBufferGetAlignedLogicalAddress -Methode zurückgegeben wird, immer an die angegebene Ausrichtungsanforderung ausgerichtet, aber die virtuellen Adressen, die die WdfCommonBufferGetAlignedVirtualAddress Methode zurückgeben, werden möglicherweise nicht an die Ausrichtungsanforderung ausgerichtet.

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

Weitere Informationen zum Aufrufen WdfDeviceSetAlignmentRequirement-finden Sie unter Aktivieren von DMA-Transaktionen und Using Common Buffers.

Beispiele

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

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- Universal
Minimale KMDF-Version 1.0
Header- wdfdevice.h (einschließen Wdf.h)
Library Wdf01000.sys (siehe Framework-Bibliotheksversionsverwaltung.)
IRQL- <= DISPATCH_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Siehe auch

WdfCommonBufferGetAlignedLogicalAddress

WdfCommonBufferGetAlignedVirtualAddress

WdfDeviceGetAlignmentRequirement-