Compartilhar via


Macro EngAllocUserMem (winddi.h)

A função EngAllocUserMem aloca um bloco de memória do espaço de endereço do processo atual e insere uma marca fornecida pelo chamador antes da alocação.

Sintaxe

void EngAllocUserMem(
  [in]  cj,
  [in]  tag
);

Parâmetros

[in] cj

Especifica o número de bytes para alocar.

[in] tag

Especifica uma marca de pool de 4 bytes que identifica exclusivamente o driver que faz a alocação de memória. Para obter mais informações sobre marcas de pool, consulte ExAllocatePoolWithTag.

Retornar valor

Nenhum

Comentários

Um processo em um sistema operacional baseado em NT tem 4 GB de espaço de endereço virtual. Os 2 GB superiores são a memória do sistema que é acessível somente para threads no modo kernel; esse espaço é idêntico em todos os processos. Os 2 GB inferiores são a memória do usuário acessível para threads do modo de usuário e do modo kernel; esse espaço é exclusivo para seu processo. A memória alocada por EngAllocUserMem é alocada a partir dos 2 GB exclusivos de memória do usuário e, portanto, só é acessível quando o driver gráfico é chamado no contexto do thread no qual a memória foi alocada. Os drivers gráficos sempre são executados no contexto do chamador; ou seja, os drivers gráficos não podem alternar contextos de processo.

EngAllocUserMem é particularmente útil para um driver de impressora com bitmaps grandes que só serão usados pelo processo atual. Em vez de alocar do pool do sistema, esse driver pode alocar espaço do espaço de endereço do processo atual. Os drivers precisam ter cuidado com a memória alocada por EngAllocUserMem, pois é possível que o aplicativo altere essa memória. EngAllocUserMem só deve ser usado para alocar partes relativamente grandes de memória, pois cada alocação leva pelo menos 64 KB de espaço de endereço virtual. Estruturas de dados confidenciais nunca devem ser alocadas usando essa função. Além disso, a memória do usuário alocada por essa função não pode ser passada para EngWritePrinter pelo driver de impressora.

Quando a memória não for mais necessária, ela poderá ser liberada por uma chamada para a função EngFreeUserMem .

Para alocar memória do usuário do espaço de endereço de um processo diferente, use EngAllocPrivateUserMem.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows 2000 e versões posteriores dos sistemas operacionais Windows.
Plataforma de Destino Universal
Cabeçalho winddi.h (inclua Winddi.h)
Biblioteca Win32k.lib
DLL Win32k.sys

Confira também

EngAllocPrivateUserMem

EngFreeUserMem