Condividi tramite


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)