次の方法で共有


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の場合、Size はドライバーによって提供される 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)
Header d3dkmddi.h

こちらもご覧ください

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

MmAllocateContiguousMemorySpecifyCache

MmAllocatePagesForMdlEx

ZwCreateSection