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