Compartilhar via


Macro ExAllocatePoolWithQuota (classpnp.h)

A rotina ExAllocatePoolWithQuota é obsoleta e é exportada apenas para binários de driver existentes. Em vez disso, 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 de 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 paginada 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 aviso e está disponível para o Windows XP e versões posteriores do sistema operacional Windows.

b

Especifica o número de bytes para alocar.

Retornar valor

Nenhum

Comentários

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. Em vez disso, os 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 para alocações de PAGE_SIZE ou superior.

Alocações de memória de menos de PAGE_SIZE são alocadas em uma página e não cruzam 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.

Observação

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, o Verificador de Driver sinaliza essas alocações como possíveis erros.

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 Objetos de Evento Padrão.

Observação

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

Os chamadores de ExAllocatePoolWithQuota devem estar em execução em IRQL <= DISPATCH_LEVEL. Um chamador em execução em DISPATCH_LEVEL deve especificar um valor XxxNãoPaged para PoolType. Um chamador em execução em 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
Cliente mínimo com suporte Obsoleto. Essa rotina é exportada apenas para binários de driver existentes. Em vez disso, use ExAllocatePoolWithQuotaTag.
Plataforma de Destino Universal
Cabeçalho classpnp.h (incluem Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h)
Biblioteca NtosKrnl.lib
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)

Confira também

ExAllocatePoolWithTag

ExAllocatePoolWithQuotaTag

ExFreePool

POOL_TYPE