DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT 구조체(d3dkmddi.h)

DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT 구조에는 DXGKCB_CREATEPHYSICALMEMORYOBJECT 콜백 함수가 실제 메모리를 만드는 데 사용하는 정보가 포함됩니다.

구문

typedef struct _DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT {
  HANDLE                    hAdapter;
  SIZE_T                    Size;
  ULONG_PTR                 Context;
  DXGK_PHYSICAL_MEMORY_TYPE Type;
  DXGK_MEMORY_CACHING_TYPE  CacheType;
  union {
    struct {
      PHYSICAL_ADDRESS LowAddress;
      PHYSICAL_ADDRESS HighAddress;
      PHYSICAL_ADDRESS SkipBytes;
      UINT             Flags;
    } Mdl;
    struct {
      PHYSICAL_ADDRESS LowestAcceptableAddress;
      PHYSICAL_ADDRESS HighestAcceptableAddress;
      PHYSICAL_ADDRESS BoundaryAddressMultiple;
    } ContiguousMemory;
    struct {
      ACCESS_MASK        DesiredAccess;
      POBJECT_ATTRIBUTES ObjectAttributes;
      ULONG              PageProtection;
      ULONG              AllocationAttributes;
    } Section;
    struct {
      PHYSICAL_ADDRESS BaseAddress;
    } IOSpace;
  };
  HANDLE                    hPhysicalMemoryObject;
  HANDLE                    hAdapterMemoryObject;
} DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT;

멤버

hAdapter

이 실제 메모리가 연결될 어댑터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. NULL인 경우 드라이버는 ADL(주소 설명자 목록)을 만들기 전에 DXGKCB_OPENPHYSICALMEMORYOBJECT 호출해야 합니다. 자세한 내용은 설명 부분을 참조하십시오.

Size

요청되는 실제 메모리의 크기(바이트)입니다. TypeDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE 경우 크기는 드라이버에서 제공하는 IO 공간 영역의 크기를 나타냅니다.

Context

디버깅을 위해 Dxgkrnl 이 실제 메모리 개체와 함께 저장할 컨텍스트 데이터의 포인터 크기 조각입니다. 이 값은 어떤 방식으로든 Dxgkrnl 에서 직접 사용하거나 역참조하지 않습니다. 실제 메모리 개체를 소유하는 드라이버 소유 개체에 대한 메모리 주소와 같이 드라이버에서 선택한 값일 수 있습니다.

Type

만들 실제 메모리의 형식을 지정하는 DXGK_PHYSICAL_MEMORY_TYPE 값입니다. TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION 경우 섹션 개체의 할당 특성은 항상 SEC_COMMIT(PF 매핑 섹션) 캐시 형식은 CacheType에 의해 결정됩니다.

CacheType

페이지의 캐시 유형입니다. TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION 경우 CacheType은 캐시되거나 쓰기 결합되어야 합니다.

Mdl

TypeDXGK_PHYSICAL_MEMORY_TYPE_MDL 경우에만 사용됩니다.

Mdl.LowAddress

TypeDXGK_PHYSICAL_MEMORY_TYPE_MDL 경우에만 사용됩니다. 자세한 내용은 MmAllocatePagesForMdlEx 를 참조하세요.

Mdl.HighAddress

TypeDXGK_PHYSICAL_MEMORY_TYPE_MDL 경우에만 사용됩니다. 자세한 내용은 MmAllocatePagesForMdlEx 를 참조하세요.

Mdl.SkipBytes

TypeDXGK_PHYSICAL_MEMORY_TYPE_MDL 경우에만 사용됩니다. 자세한 내용은 MmAllocatePagesForMdlEx 를 참조하세요.

Mdl.Flags

TypeDXGK_PHYSICAL_MEMORY_TYPE_MDL 경우에만 사용됩니다. 자세한 내용은 MmAllocatePagesForMdlEx 를 참조하세요.

ContiguousMemory

TypeDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY 경우에만 사용됩니다.

ContiguousMemory.LowestAcceptableAddress

TypeDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY 경우에만 사용됩니다. 자세한 내용은 MmAllocateContiguousMemorySpecifyCache 를 참조하세요.

ContiguousMemory.HighestAcceptableAddress

TypeDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY 경우에만 사용됩니다. 자세한 내용은 MmAllocateContiguousMemorySpecifyCache 를 참조하세요.

ContiguousMemory.BoundaryAddressMultiple

TypeDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY 경우에만 사용됩니다. 자세한 내용은 MmAllocateContiguousMemorySpecifyCache 를 참조하세요.

Section

TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION 경우에만 사용됩니다.

Section.DesiredAccess

TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION 경우에만 사용됩니다. 자세한 내용은 ZwCreateSection 을 참조하세요.

Section.ObjectAttributes

TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION 경우에만 사용됩니다. 자세한 내용은 ZwCreateSection 을 참조하세요.

Section.PageProtection

TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION 경우에만 사용됩니다. 이 값은 PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE 또는 PAGE_WRITECOPY 값 중 하나여야 합니다. 이 필드에 캐시 특성(예: SEC_WRITECOMBINED)을 지정하지 마세요. 섹션 개체의 할당된 특성은 항상 SEC_COMMIT(PF 매핑된 섹션)이며 캐시 형식은 CacheType에 의해 결정됩니다. 자세한 내용은 ZwCreateSection 을 참조하세요.

Section.AllocationAttributes

TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION 경우에만 사용됩니다. 자세한 내용은 ZwCreateSection 을 참조하세요.

IOSpace

TypeDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE 경우에만 사용됩니다.

IOSpace.BaseAddress

TypeDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE 경우에만 사용됩니다. IO 공간 영역의 시작 실제 주소를 지정합니다. 이 값은 PAGE_SIZE 배수에 맞춰야 합니다.

hPhysicalMemoryObject

DXGKCB_CREATEPHYSICALMEMORYOBJECT 성공적으로 호출할 때 Dxgkrnl 관리 실제 메모리 개체에 대한 불투명 핸들입니다. 실제 메모리 개체를 다른 문서화된 메모리 관리 함수에 제공하여 CPU 액세스에 대한 가상 주소를 매핑할 수 있습니다. 이 핸들은 DXGKCB_DESTROYPHYSICALMEMORYOBJECT 호출하여 닫을 수 있습니다.

hAdapterMemoryObject

DXGKCB_CREATEPHYSICALMEMORYOBJECT 성공적으로 호출할 때 Dxgkrnl 관리형 어댑터 메모리 개체에 대한 불투명 핸들입니다. 어댑터 메모리 개체를 다른 문서화된 메모리 관리 함수에 제공하여 GPU 액세스를 위한 ADL을 생성할 수 있습니다. hAdapter가 NULL이면 이 값은 NULL이고 드라이버는 DXGKCB_OPENPHYSICALMEMORYOBJECT 호출하여 이 핸들을 만들어야 합니다. 이 핸들은 DXGKCB_CLOSEPHYSICALMEMORYOBJECT 호출하여 닫을 수 있거나 DXGKCB_DESTROYPHYSICALMEMORYOBJECT (둘 다 아님)에 제공될 수 있습니다.

설명

hAdapter 필드는 물리적 메모리 개체를 만들 때 선택 사항이지만 ADL을 만들려면 DXGKCB_OPENPHYSICALMEMORYOBJECT 호출 시 어댑터에 대해 해당 개체를 열어야 합니다. ADL은 논리 메모리를 나타내고 각 논리 어댑터에는 고유한 도메인이 있기 때문입니다. 메모리가 생성되는 실제 어댑터는 중요하지 않습니다. 물리적 어댑터가 속한 논리 어댑터에 의해 열리고 연결된 모든 실제 어댑터에 매핑됩니다.

자세한 내용은 IOMMU DMA 다시 매핑 을 참조하세요.

요구 사항

요구 사항
지원되는 최소 서버 Windows Server 2022(WDDM 2.9)
머리글 d3dkmddi.h

추가 정보

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

MmAllocateContiguousMemorySpecifyCache

MmAllocatePagesForMdlEx

ZwCreateSection