EngAllocPrivateUserMem 매크로(winddi.h)

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

구문

void EngAllocPrivateUserMem(
  [in]  psl,
  [in]  cj,
  [in]  tag
);

매개 변수

[in] psl

할당된 메모리를 연결할 Microsoft DirectDraw 표면을 나타내는 DD_SURFACE_LOCAL 구조체에 대한 포인터입니다.

[in] cj

할당할 메모리의 바이트 수를 지정합니다.

[in] tag

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

반환 값

없음

설명

DirectDraw 드라이버에는 실제 비디오 메모리 대신 사용자 메모리 "스크래치 패드"가 필요할 수 있습니다. 이 방법은 성능에 영향을 미치기 때문에 권장되지 않지만 경우에 따라 필요합니다. 이 스크래치 메모리는 일반적으로 짧은 기간 동안만 할당됩니다. 메모리가 할당된 후에는 의도한 그래픽 작업에 사용된 다음 할당을 취소합니다.

표면이 잠금 해제되기 전에 드라이버 instance 제거되면 문제가 발생합니다. 특정 사례는 사용자가 Ctrl+Alt+DEL을 누르면 시스템이 보호된 데스크톱으로 전환될 때 발생합니다. 이 경우 모드 스위치는 시스템 프로세스 컨텍스트에서 수행됩니다. 표면에 잠금이 해제되기 전에 모드 스위치가 발생하는 경우와 같이 드라이버에 미해결 표면 잠금이 있는 경우 드라이버는 다른 프로세스 컨텍스트에서 해당 표면을 삭제해야 합니다. 메모리가 할당되었을 때 사용된 컨텍스트와 다른 컨텍스트에서 호출되면 이 진입점이 실패하므로 드라이버는 EngFreeUserMem 을 호출하여 스크래치 메모리의 할당을 취소할 수 없습니다.

이 문제를 해결하기 위해 EngAllocPrivateUserMemEngFreePrivateUserMem이 제공됩니다. 이러한 두 함수는 다른 프로세스 컨텍스트에 할당된 메모리를 해제하는 데 필요한 추가 작업을 수행한다는 점을 제외하고 EngAllocUserMemEngFreeUserMem과 동일합니다. 프로세스 컨텍스트 정보는 psl 이 가리키는 DirectDraw 표면 개체를 소유하는 DirectDraw 개체와 함께 저장됩니다.

요구 사항

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

추가 정보

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL

EngAllocUserMem

EngFreePrivateUserMem

EngFreeUserMem