다음을 통해 공유


VirtualProtectFromApp 함수(memoryapi.h)

호출 프로세스의 가상 주소 공간에서 커밋된 페이지의 영역에 대한 보호를 변경합니다.

구문

BOOL VirtualProtectFromApp(
  [in]  PVOID  Address,
  [in]  SIZE_T Size,
  [in]  ULONG  NewProtection,
  [out] PULONG OldProtection
);

매개 변수

[in] Address

액세스 보호 특성을 변경해야 하는 페이지 영역의 시작 페이지를 설명하는 주소 포인터입니다.

지정된 지역의 모든 페이지는 MEM_RESERVE 사용하여 VirtualAlloc, VirtualAllocFromApp 또는 VirtualAllocEx 함수를 호출할 때 할당된 동일한 예약 지역 내에 있어야 합니다. 페이지는 MEM_RESERVE 사용하여 VirtualAlloc, VirtualAllocFromApp 또는 VirtualAllocEx에 대한 별도의 호출로 할당된 인접한 예약된 지역에 걸쳐서는 안 됩니다.

[in] Size

액세스 보호 특성을 변경할 지역의 크기(바이트)입니다. 영향을 받는 페이지의 영역에는 Address 매개 변수 (Address+Size)에서 에 이르는 범위에서 하나 이상의 바이트가 포함된 모든 페이지가 포함됩니다. 즉, 페이지 경계에 걸쳐 있는 2 바이트 범위로 인해 두 페이지의 보호 특성이 변경됩니다.

[in] NewProtection

메모리 보호 옵션입니다. 이 매개 변수는 메모리 보호 상수 중 하나일 수 있습니다.

매핑된 뷰의 경우 이 값은 뷰가 매핑될 때 지정된 액세스 보호와 호환되어야 합니다(MapViewOfFile, MapViewOfFileExMapViewOfFileExNuma 참조).

다음 상수는 오류를 생성합니다.

  • PAGE_EXECUTE_READWRITE
  • PAGE_EXECUTE_WRITECOPY
다음 상수는 codeGeneration 기능이 있는 앱에만 허용됩니다.
  • PAGE_EXECUTE
  • PAGE_EXECUTE_READ

[out] OldProtection

지정된 페이지 영역에 있는 첫 번째 페이지의 이전 액세스 보호 값을 받는 변수에 대한 포인터입니다. 이 매개 변수가 NULL 이거나 유효한 변수를 가리키지 않으면 함수가 실패합니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

JIT(Just-In-Time) 기능을 사용하여 Windows 스토어 앱에서 VirtualProtectFromApp 을 호출하여 JIT 기능을 사용할 수 있습니다. 앱은 JIT 기능을 사용하려면 앱 매니페스트 파일에 codeGeneration 기능을 포함해야 합니다.

커밋된 페이지에서만 액세스 보호 값을 설정할 수 있습니다. 지정된 지역에 있는 페이지의 상태가 커밋되지 않으면 함수가 실패하고 지정된 지역에 있는 페이지의 액세스 보호를 수정하지 않고 반환됩니다.

PAGE_GUARD 보호 한정자는 보호 페이지를 설정합니다. 가드 페이지는 원샷 액세스 경보 역할을 합니다. 자세한 내용은 가드 페이지 만들기를 참조하세요.

단일 페이지에 여러 메모리 블록이 있을 수 있으므로 VirtualProtectFromApp 을 사용하여 GlobalAlloc, HeapAlloc 또는 LocalAlloc에서 할당한 메모리 블록에 대한 페이지 보호를 변경하지 않는 것이 가장 좋습니다. 힙 관리자는 힙의 모든 페이지가 적어도 읽기 및 쓰기 권한을 부여한다고 가정합니다.

VirtualProtectFromApp 을 사용하면 페이지를 실행 파일로 표시할 수 있지만 쓰기 및 실행 권한을 동시에 설정할 수는 없습니다.

실행 가능한 지역을 보호할 때 호출 프로그램은 코드가 설정되면 FlushInstructionCache 에 대한 적절한 호출을 통해 캐시 일관성을 보장해야 합니다. 그렇지 않으면 새로 실행 가능한 지역에서 코드를 실행하려고 시도하면 예측할 수 없는 결과가 발생할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2016 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 memoryapi.h(Windows.h 포함)
라이브러리 WindowsApp.lib
DLL Kernel32.dll

참고 항목

메모리 관리 함수

가상 메모리 함수

VirtualAllocFromApp

VirtualProtect

VirtualProtectEx