2

我试图获取 Q3DKMT_ADAPTER_PERFDATA 并使用了此代码。

string name = @"\\?\PCI#VEN_10DE&DEV_13B1&SUBSYS_80D5103C&REV_A2#4&245367a2&0&0008#{1CA05180-A699-450A-9A0C-DE4FBE3DDD89}";
D3DKMT_OPENADAPTERFROMDEVICENAME adapter = new D3DKMT_OPENADAPTERFROMDEVICENAME();
adapter.pDeviceName = name;

NTResult result = D3DKMT.D3DKMTOpenAdapterFromDeviceName(ref adapter);
if (result == NTResult.Success)
{
    D3DKMT_ADAPTER_PERFDATA adapterPerfData = new D3DKMT_ADAPTER_PERFDATA();
    IntPtr adapterPerfDataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(adapterPerfData));

    D3DKMT_QUERYADAPTERINFO queryAdapterInfo = new D3DKMT_QUERYADAPTERINFO();

    queryAdapterInfo.hAdapter = adapter.hAdapter;
    queryAdapterInfo.Type = KMTQUERYADAPTERINFOTYPE.ADAPTERPERFDATA;
    queryAdapterInfo.pPrivateDriverData = adapterPerfDataPtr;
    queryAdapterInfo.PrivateDriverDataSize = Marshal.SizeOf(typeof(D3DKMT_QUERYADAPTERINFO));

    result = D3DKMT.D3DKMTQueryAdapterInfo(ref queryAdapterInfo);
    if (result == NTResult.Success)
    {
        adapterPerfData = Marshal.PtrToStructure<D3DKMT_ADAPTER_PERFDATA>(adapterPerfDataPtr);
    }
}

但我总是收到“noMemory”。我该怎么做才能获得成功?

4

1 回答 1

0

意识到这已经过时了,只是路过 - 这里的问题很可能没有设置 PrivateDriverDataSize 以匹配数据结构。

queryAdapterInfo.PrivateDriverDataSize = Marshal.SizeOf(adapterPerfData);
于 2020-10-07T09:45:55.727 回答