Função de retorno de chamada PFNKSALLOCATOR (ks.h)

Os minidrivers podem, opcionalmente, fornecer uma função de retorno de chamada do tipo PFNKSALLOCATOR como um parâmetro em chamadas para KsEnableEventWithAllocator, KsPropertyHandlerWithAllocator e KsMethodHandlerWithAllocator.

Sintaxe

PFNKSALLOCATOR Pfnksallocator;

NTSTATUS Pfnksallocator(
  [in] PIRP Irp,
  [in] ULONG BufferSize,
  [in] BOOLEAN InputOperation
)
{...}

Parâmetros

[in] Irp

Especifica o IRP para o qual a solicitação de alocação de buffer está sendo feita.

[in] BufferSize

Especifica o tamanho do buffer necessário. Esse tamanho abrange todos os parâmetros na solicitação.

[in] InputOperation

Defina como TRUE se esta for uma operação de entrada, o que significa que, no retorno bem-sucedido, o campo Irp-IoStatus.Information> conterá o número de bytes a serem copiados de volta para o buffer de entrada original.

Retornar valor

Retorna STATUS_SUCCESS se a solicitação for tratada. Caso contrário, retornará um código de erro apropriado.

Comentários

Normalmente, a memória do pool é usada para alocações de buffer. Isso permite que os filtros que passam consultas de evento, propriedade e método diretamente para o hardware evitem cópias de dados extras, permitindo que eles forneçam o buffer no qual esses dados são colocados pelas funções de manipulação padrão. Portanto, um filtro pode ter blocos de memória que já foram mapeados para um adaptador do qual as alocações de buffer podem ocorrer.

Como essa memória presumivelmente não é uma memória alocada em pool típica, o filtro deve executar a limpeza de buffer após a conclusão do Irp. Isso significa que, para operações de entrada do usermode que não são síncronas, o alocador deve alocar um MDL para o buffer de destino, investigar e bloqueá-lo e recuperar um endereço do sistema. Isso deve ser feito para habilitar a cópia dos dados de retorno para o buffer original.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho ks.h (inclua Ks.h)