Funzione di callback PFNKSALLOCATOR (ks.h)
I minidriver possono facoltativamente fornire una funzione di callback di tipo PFNKSALLOCATOR come parametro nelle chiamate a KsEnableEventWithAllocator, KsPropertyHandlerWithAllocatore KsMethodHandlerWithAllocator.
Sintassi
PFNKSALLOCATOR Pfnksallocator;
NTSTATUS Pfnksallocator(
[in] PIRP Irp,
[in] ULONG BufferSize,
[in] BOOLEAN InputOperation
)
{...}
Parametri
[in] Irp
Specifica l'IRP per cui viene effettuata la richiesta di allocazione del buffer.
[in] BufferSize
Specifica le dimensioni del buffer necessarie. Questa dimensione copre tutti i parametri nella richiesta.
[in] InputOperation
Impostare su TRUE se si tratta di un'operazione di input, ovvero in caso di esito positivo, il campo Irp->IoStatus.Information conterrà il numero di byte da copiare nel buffer di input originale.
Valore restituito
Restituisce STATUS_SUCCESS se la richiesta viene gestita. In caso contrario, restituisce un codice di errore appropriato.
Osservazioni
In genere, la memoria del pool viene usata per le allocazioni del buffer. In questo modo, i filtri che passano le query di eventi, proprietà e metodo direttamente all'hardware per evitare copie di dati aggiuntive, consentendo loro di fornire il buffer in cui tali dati vengono inseriti dalle funzioni di gestione standard. Pertanto, un filtro può avere blocchi di memoria che sono già stati mappati a un adattatore da cui possono verificarsi allocazioni di buffer.
Poiché questa memoria presumibilmente non è tipica memoria allocata dal pool, il filtro deve eseguire la pulizia del buffer al completamento dell'Irp. Ciò significa che per le operazioni di input dalla modalità utente che non sono sincrone, l'allocatore deve allocare un file MDL per il buffer di destinazione, il probe e bloccarlo e recuperare un indirizzo di sistema. Questa operazione deve essere eseguita per consentire la copia dei dati restituiti nel buffer originale.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Desktop |
intestazione | ks.h (include Ks.h) |