Share via


EngAllocUserMem 매크로(winddi.h)

EngAllocUserMem 함수는 현재 프로세스의 주소 공간에서 메모리 블록을 할당하고 할당 전에 호출자가 제공한 태그를 삽입합니다.

구문

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

매개 변수

[in] cj

할당할 바이트 수를 지정합니다.

[in] tag

메모리 할당을 수행하는 드라이버를 고유하게 식별하는 4 바이트 풀 태그 를 지정합니다. 풀 태그에 대한 자세한 내용은 ExAllocatePoolWithTag를 참조하세요.

반환 값

없음

설명

NT 기반 운영 체제의 프로세스에는 4GB의 가상 주소 공간이 있습니다. 상위 2GB는 커널 모드 스레드에만 액세스할 수 있는 시스템 메모리입니다. 이 공간은 모든 프로세스에서 동일합니다. 하위 2GB는 사용자 모드와 커널 모드 스레드 모두에서 액세스할 수 있는 사용자 메모리입니다. 이 공간은 프로세스에 고유합니다. EngAllocUserMem에 의해 할당된 메모리는 고유한 2GB의 사용자 메모리에서 할당되므로 메모리가 할당된 스레드의 컨텍스트에서 그래픽 드라이버가 호출되는 경우에만 액세스할 수 있습니다. 그래픽 드라이버는 항상 호출자의 컨텍스트에서 실행됩니다. 즉, 그래픽 드라이버는 프로세스 컨텍스트를 전환할 수 없습니다.

EngAllocUserMem 은 현재 프로세스에서만 사용되는 큰 비트맵이 있는 프린터 드라이버에 특히 유용합니다. 이 드라이버는 시스템 풀에서 할당하는 대신 현재 프로세스의 주소 공간에서 공간을 할당할 수 있습니다. 애플리케이션이 이 메모리를 변경할 수 있으므로 드라이버는 EngAllocUserMem에 의해 할당된 메모리에 주의해야 합니다. EngAllocUserMem 은 각 할당이 최소 64KB의 가상 주소 공간을 사용하므로 상대적으로 큰 메모리 청크를 할당하는 데만 사용해야 합니다. 이 함수를 사용하여 중요한 데이터 구조를 할당하면 안 됩니다. 또한 이 함수에 의해 할당된 사용자 메모리는 프린터 드라이버가 EngWritePrinter 에 전달할 수 없습니다.

메모리가 더 이상 필요하지 않은 경우 EngFreeUserMem 함수를 호출하여 해제할 수 있습니다.

다른 프로세스의 주소 공간에서 사용자 메모리를 할당하려면 EngAllocPrivateUserMem을 사용합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 winddi.h(Winddi.h 포함)
라이브러리 Win32k.lib
DLL Win32k.sys

추가 정보

EngAllocPrivateUserMem

EngFreeUserMem