private bool queryAdapterInfo(Interop._KMTQUERYADAPTERINFOTYPE requestType, IntPtr dataBuf, int dataSize) { var queryStruct = new Interop._D3DKMT_QUERYADAPTERINFO() { hAdapter = AdapterInfo.hAdapter, Type = requestType, pPrivateDriverData = dataBuf, PrivateDriverDataSize = (uint)dataSize }; var queryResult = Interop.NtStatus.STATUS_SUCCESS; try { queryResult = Interop.Gdi.D3DKMTQueryAdapterInfo(ref queryStruct); } catch (Exception ex) { _logger?.LogError(ex, $"failed to query adapterInfo, hAdapter={AdapterInfo.hAdapter}, requestType={requestType}"); } if (queryResult != Interop.NtStatus.STATUS_SUCCESS) { _logger?.LogWarning($"failed to get adapterInfo, hAdapter=0x{AdapterInfo.hAdapter:X8}, requestType={requestType}, result={queryResult}"); } return(queryResult == Interop.NtStatus.STATUS_SUCCESS); }
private T queryAdapterInfo <T>(Interop._KMTQUERYADAPTERINFOTYPE requestType) where T : struct { int dataSize = 4; if (!typeof(T).IsEnum) { dataSize = Marshal.SizeOf <T>(); } var dataBuf = Marshal.AllocHGlobal(dataSize); try { if (queryAdapterInfo(requestType, dataBuf, dataSize)) { return((T)InteropHelper.PointerToObj(typeof(T), dataBuf)); } } finally { Marshal.FreeHGlobal(dataBuf); } return(new T()); }
private void queryAdapterInfo <T>(Interop._KMTQUERYADAPTERINFOTYPE requestType, ref T requestStruct) where T : struct { var bufferPtr = InteropHelper.ObjToPointer(requestStruct); if (queryAdapterInfo(requestType, bufferPtr, Marshal.SizeOf <T>())) { requestStruct = InteropHelper.PointerToObj <T>(bufferPtr); Marshal.FreeHGlobal(bufferPtr); } }