ZwSetInformationVirtualMemory 함수(ntifs.h)

ZwSetInformationVirtualMemory 루틴은 프로세스의 사용자 주소 공간에서 지정된 주소 범위 목록에 대한 작업을 수행합니다.

구문

NTSYSAPI NTSTATUS ZwSetInformationVirtualMemory(
  [in] HANDLE                           ProcessHandle,
  [in] VIRTUAL_MEMORY_INFORMATION_CLASS VmInformationClass,
  [in] ULONG_PTR                        NumberOfEntries,
  [in] PMEMORY_RANGE_ENTRY              VirtualAddresses,
  [in] PVOID                            VmInformation,
  [in] ULONG                            VmInformationLength
);

매개 변수

[in] ProcessHandle

작업을 수행할 컨텍스트에서 프로세스에 대한 열린 핸들을 지정합니다. 이 핸들은 유효하지 않습니다. Ntddk.h에 정의된 NtCurrentProcess 매크로를 사용하여 현재 프로세스를 지정합니다.

[in] VmInformationClass

수행할 작업의 유형을 지정합니다. VIRTUAL_MEMORY_INFORMATION_CLASS 열거형에 정의된 VmPrefetchInformation으로 설정합니다. ntddk.h를 참조하세요.

[in] NumberOfEntries

VirtualAddresses 매개 변수가 가리키는 배열의 항목 수입니다. 이 매개 변수는 0일 수 없습니다.

[in] VirtualAddresses

각 항목이 처리할 가상 주소 범위를 지정하는 MEMORY_RANGE_ENTRY 구조체 배열에 대한 포인터입니다. 가상 주소 범위는 대상 프로세스에서 액세스할 수 있는 프로세스 주소 공간의 일부를 포함할 수 있습니다.

[in] VmInformation

메모리 정보를 포함하는 버퍼에 대한 포인터입니다. 버퍼의 형식과 콘텐츠는 지정된 정보 클래스에 따라 달라집니다.

VmInformationClassVmPrefetchInformation인 경우 이 매개 변수는 NULL일 수 없으며 0으로 설정된 ULONG 변수를 가리킬 수 없습니다.

[in] VmInformationLength

VmInformation에서 가리키는 버퍼의 크기입니다.

VmInformationClassVmPrefetchInformation인 경우 다음이어야 sizeof (ULONG)합니다.

반환 값

ZwSetInformationVirtualMemory 는 성공 시 STATUS_SUCCESS 반환하거나 실패 시 적절한 NTSTATUS 오류 코드를 반환합니다.

설명

ZwSetInformationVirtualMemory 루틴은 액세스할 주소 집합을 알고 있는 드라이버에 의해 호출됩니다. 이러한 주소가 더 이상 메모리에 상주하지 않을 가능성이 있는 경우(즉, 디스크로 페이징된 경우) 액세스 전에 해당 주소 범위에서 이 루틴을 호출하면 가능한 경우 대규모의 동시 I/O 요청을 사용하여 디스크에서 해당 주소 범위를 효율적으로 가져오기 때문에 전체 대기 시간이 줄어듭니다.

ZwSetInformationVirtualMemory 를 사용하면 드라이버가 액세스할 프로세스 주소 범위 목록을 제공하는 경우 가능하면 큰 동시 I/O를 실행하여 디스크 하드웨어를 효율적으로 사용할 수 있습니다. 단일 주소 범위(예: 파일 매핑)의 경우에도 이 루틴은 페이지 오류를 통해 발급될 많은 작은 I/O가 아닌 하나의 큰 I/O를 실행하여 성능 향상을 제공할 수 있습니다.

드라이버는 성능 최적화를 위해 이 루틴을 호출합니다. 대상 주소 범위에 액세스하는 데 프리페치를 사용할 필요는 없습니다. 프리페치된 메모리는 대상 프로세스의 작업 집합에 추가되지 않습니다. 실제 메모리에 캐시됩니다. 대상 프로세스에서 프리페치된 주소 범위에 액세스하면 작업 집합에 추가됩니다.

이 호출은 드라이버의 올바른 작동에 필요하지 않으므로 시스템에서 강력한 힌트로 처리되며 메모리 부족 상태에서 완전하거나 부분적으로 실패할 수 있는 일반적인 실제 메모리 제약 조건이 적용됩니다. 또한 큰 주소 범위로 호출되는 경우 메모리 부족이 발생할 수 있으므로 애플리케이션은 실제로 사용할 주소 범위만 프리페치해야 합니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 10 버전 1511부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 ntifs.h(Ntddk.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs, PowerIrpDDis