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