Compartilhar via


Macro ExAllocatePoolWithQuota (classpnp.h)

A rotina ExAllocatePoolWithQuota é obsoleta e é exportada apenas para binários de driver existentes. Use ExAllocatePoolWithQuotaTag.

ExAllocatePoolWithQuota aloca memória do pool, cobrando cota no processo atual.

Sintaxe

PVOID ExAllocatePoolWithQuota(
  _In_ POOL_TYPE a,
  _In_ SIZE_T b
);

Parâmetros

a

Especifica o tipo de memória do pool a ser alocada. Para obter uma descrição dos tipos de memória do pool disponíveis, consulte POOL_TYPE.

Você pode modificar um (PoolType) usando um OR bit a bit com o sinalizador POOL_COLD_ALLOCATION como uma dica para o kernel para alocar a memória de páginas que provavelmente serão excluídas rapidamente. Para reduzir a quantidade de memória do pool de residentes o máximo possível, você não deve referenciar essas alocações com frequência. O sinalizador POOL_COLD_ALLOCATION é apenas consultivo e está disponível para o Windows XP e versões posteriores do sistema operacional Windows.

b

Especifica o número de bytes a serem alocados.

Valor de retorno

Nenhum

Observações

Essa rotina é chamada por drivers de nível mais alto que alocam memória para atender a uma solicitação no contexto do processo que originalmente fez a solicitação de E/S. Drivers de nível inferior chamam ExAllocatePoolWithTag.

Se b (NumberOfBytes) for PAGE_SIZE ou maior, um buffer alinhado à página será alocado. A cota não é cobrada no processo por alocações de PAGE_SIZE ou superior.

Alocações de memória inferiores a PAGE_SIZE são alocadas dentro de uma página e não ultrapassam limites de página. As alocações de memória de PAGE_SIZE ou menos não são necessariamente alinhadas à página, mas estão alinhadas aos limites de 8 bytes em sistemas de 32 bits e aos limites de 16 bytes em sistemas de 64 bits.

Nota

Não defina NumberOfBytes = 0. Evite alocações de comprimento zero porque elas desperdiçam espaço de cabeçalho do pool e, em muitos casos, indicam um possível problema de validação no código de chamada. Por esse motivo, Verificador de Driver sinalizadores como alocações possíveis.

O sistema define automaticamente determinados objetos de evento padrão quando a quantidade de pool (paginada ou não paga) é alta ou baixa. Os drivers podem esperar que esses eventos ajustem o uso do pool. Para obter mais informações, consulte de objetos de evento padrão.

Nota

A memória que aloca ExAllocatePoolWithQuota não é inicializada. Um driver de modo kernel deve primeiro zero essa memória se ele for torná-la visível para o software no modo de usuário (para evitar o vazamento de conteúdo potencialmente privilegiado).

Os chamadores de ExAllocatePoolWithQuota devem estar em execução no IRQL <= DISPATCH_LEVEL. Um chamador em execução em DISPATCH_LEVEL deve especificar um valor Xxx nãopagado para poolType. Um chamador em execução no IRQL <= APC_LEVEL pode especificar qualquer valor POOL_TYPE, mas o IRQL e o ambiente também devem ser considerados para determinar o tipo de pool.

Requisitos

Requisito Valor
de cliente com suporte mínimo Obsoleto. Essa rotina é exportada apenas para binários de driver existentes. Em vez disso, use ExAllocatePoolWithQuotaTag.
da Plataforma de Destino Universal
cabeçalho classpnp.h (incluem Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (consulte a seção Comentários)
regras de conformidade de DDI HwStorPortProhibitedDIs(storport), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf)

Consulte também

ExAllocatePoolWithTag

ExAllocatePoolWithQuotaTag

ExFreePool

POOL_TYPE