Funzione WdfDeviceSetAlignmentRequirement (wdfdevice.h)
[Si applica solo a KMDF]
Il metodo WdfDeviceSetAlignmentRequirement registra l'allineamento degli indirizzi preferito del driver per i buffer di dati usati dal dispositivo durante le operazioni di trasferimento della memoria.
Sintassi
void WdfDeviceSetAlignmentRequirement(
[in] WDFDEVICE Device,
[in] ULONG AlignmentRequirement
);
Parametri
[in] Device
Handle per un oggetto dispositivo framework.
[in] AlignmentRequirement
Requisito di allineamento dipendente dall'hardware per un buffer di dati. Questo valore deve essere minore del limite di allineamento. Ad esempio, è possibile specificare 15 per un limite di allineamento a 16 byte e 31 per un limite di allineamento a 32 byte. È anche possibile usare una delle costanti_ALIGNMENT Xxxx FILE_definite in Wdm.h, ad esempio:
//
// 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
Valore restituito
Nessuno
Osservazioni
Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.
Un driver che usa operazioni di I/O dirette può chiamare WdfDeviceSetAlignmentRequirement per registrare un requisito di allineamento preferito. L'allineamento si applica alle richieste di I/O che passano attraverso Gestione I/O e non a quelle inviate al driver da un altro driver che chiama IoCallDriver.
Poiché il gestore di I/O non usa sempre l'allineamento richiesto, il driver deve essere preparato per i buffer non allineati.
Il driver può chiamare WdfDeviceGetAlignmentRequirement per ottenere il valore corrente per il requisito di allineamento del dispositivo.
Gestione I/O imposta un valore del requisito di allineamento per il dispositivo quando il driver chiama WdfDeviceCreate. Per altre informazioni sul valore del requisito di allineamento di un dispositivo e quando un driver deve modificare il valore, vedere Inizializzazione di un oggetto dispositivo nella documentazione di WDM.
Se il driver specifica un requisito di allineamento maggiore della dimensione della pagina del computer (PAGE_SIZE), gli indirizzi logici restituiti dal metodo WdfCommonBufferGetAlignedLogicalAddress metodo vengono sempre allineati al requisito di allineamento specificato, ma gli indirizzi virtuali restituiti dal metodo WdfCommonBufferGetAlignedVirtualAddress metodo potrebbero non essere allineati al requisito di allineamento.
Se il driver specifica un requisito di allineamento inferiore alle dimensioni della pagina del computer, tutti gli indirizzi logici e virtuali sono allineati al requisito di allineamento specificato.
Per altre informazioni sulla chiamata di WdfDeviceSetAlignmentRequirement, vedere Abilitazione di transazioni DMA e using Common Buffers.
Esempi
L'esempio di codice seguente proviene dal driver di esempio AMCC5933. Questo esempio controlla il requisito di allineamento corrente di un dispositivo e imposta il requisito di allineamento su un nuovo valore, se necessario. Si noti che il valore di allineamento esatto dipende dall'hardware.
ULONG alignReq;
alignReq = WdfDeviceGetAlignmentRequirement(device);
if (alignReq < AMCC5933_ALIGNMENT__32BITS) {
//
// Set the S5933 alignment requirement to a new value.
//
WdfDeviceSetAlignmentRequirement(
device,
AMCC5933_ALIGNMENT__32BITS
);
}
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
versione minima di KMDF | 1.0 |
intestazione | wdfdevice.h (include Wdf.h) |
libreria | Wdf01000.sys (vedere Controllo delle versioni della libreria framework). |
IRQL | <= DISPATCH_LEVEL |
regole di conformità DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |
Vedere anche
WdfCommonBufferGetAlignedLogicalAddress