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 을 호출하여 스크래치 메모리의 할당을 취소할 수 없습니다.
이 문제를 해결하기 위해 EngAllocPrivateUserMem 및 EngFreePrivateUserMem이 제공됩니다. 이러한 두 함수는 다른 프로세스 컨텍스트에 할당된 메모리를 해제하는 데 필요한 추가 작업을 수행한다는 점을 제외하고 EngAllocUserMem 및 EngFreeUserMem과 동일합니다. 프로세스 컨텍스트 정보는 psl 이 가리키는 DirectDraw 표면 개체를 소유하는 DirectDraw 개체와 함께 저장됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | winddi.h(Winddi.h 포함) |
라이브러리 | Win32k.lib |
DLL | Win32k.sys |