Função ExAllocatePoolWithQuota (wdm.h)
Aviso
A rotina ExAllocatePoolWithQuota está obsoleta e foi preterida no Windows 10, versão 2004 e foi substituída por ExAllocatePool2. Para obter mais informações, consulte Atualizando chamadas preteridas do ExAllocatePool para ExAllocatePool2 e ExAllocatePool3.
Ao desenvolver drivers para a versão do Windows antes do Windows 10, versão 2004, use ExAllocatePoolQuotaZero.
ExAllocatePoolWithQuota aloca memória do pool, cobrando cota no processo atual.
Sintaxe
PVOID ExAllocatePoolWithQuota(
[in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
[in] SIZE_T NumberOfBytes
);
Parâmetros
[in] PoolType
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 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.
[in] NumberOfBytes
Especifica o número de bytes a serem alocados.
Valor de retorno
ExAllocatePoolWithQuota retorna um ponteiro para o pool alocado.
Se a solicitação não puder ser atendida, ExAllocatePoolWithQuota gerará uma exceção.
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. Os drivers de nível inferior chamam ExAllocatePoolWithTag.
Se 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.
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.
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 | wdm.h (include 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) |