顯卡設置在哪里
對于游戲玩家而言,顯卡性能非常重要,如果要想游戲運行更加流暢的話,就需要把顯卡設置為高性能。很多升級到Win10 21H2還不知道怎么把顯卡設置為高性能,下面我們就來看看設置步驟。 方法一、 ...
2025.07.02COPYRIGHT ? 2023
粵ICP備2021108052號
郵箱:611661226@qq.com
留言給我上篇講到英偉達在github上提供其顯卡DLSS功能的SDK,因分析問題,就對其提供的庫大概看了下,發現它內置了兩種查詢顯卡驅動存儲路徑的方法,第一種是在Windows 10 1803以上使用gdi32.dll中提供的函數來查詢,第二種是在Windows 10 1607到vista之間用常見的setupAPI來查詢,由此可見有些知識需要更新了,用這么多年setupAPI,也許在未來真的不管用了呢。
我們來看下gdi32.dll方式,它主要是使用gdi32.dll中的導出函數D3DKMTEnumAdapters2和D3DKMTQueryAdapterInfo實現的,它需要d3dkmthk.h頭文件(19041 SDK),如果沒有可能就要自行聲明許多用的到結構了:
std::wstring GetDriverStorePathFromQAI(int device_id){ std::wstring driver_store_path; HMODULE gdi_h = NULL; PFN_D3DKMTENUMADAPTERS2 pfnD3DKMTEnumAdapters2; PFN_D3DKMTQUERYADAPTERINFO pfnD3DKMTQueryAdapterInfo; gdi_h = LoadLibrary(_T("gdi32.dll")); if (gdi_h) { pfnD3DKMTEnumAdapters2 = (PFN_D3DKMTENUMADAPTERS2)GetProcAddress(gdi_h, "D3DKMTEnumAdapters2"); pfnD3DKMTQueryAdapterInfo = (PFN_D3DKMTQUERYADAPTERINFO)GetProcAddress(gdi_h, "D3DKMTQueryAdapterInfo"); if (!pfnD3DKMTEnumAdapters2 || !pfnD3DKMTQueryAdapterInfo) return driver_store_path; D3DKMT_ENUMADAPTERS2 enum_adapters = { 0 }; enum_adapters.NumAdapters = 0; enum_adapters.pAdapters = NULL; if (pfnD3DKMTEnumAdapters2(&enum_adapters) != 0) return driver_store_path; enum_adapters.pAdapters = new D3DKMT_ADAPTERINFO[enum_adapters.NumAdapters]; if (!enum_adapters.pAdapters) return driver_store_path; memset(enum_adapters.pAdapters, 0, sizeof(D3DKMT_ADAPTERINFO) * enum_adapters.NumAdapters); if (pfnD3DKMTEnumAdapters2(&enum_adapters) == 0) { for (ULONG i = 0; i < enum_adapters.NumAdapters; i++) { D3DKMT_ADAPTERINFO* adapter_info_ptr = (D3DKMT_ADAPTERINFO*)&enum_adapters.pAdapters[i]; D3DKMT_QUERYADAPTERINFO query_info = { 0 }; char private_data[28] = { 0 }; query_info.hAdapter = adapter_info_ptr->hAdapter; query_info.Type = KMTQAITYPE_PHYSICALADAPTERDEVICEIDS; query_info.PrivateDriverDataSize = 28; query_info.pPrivateDriverData = private_data; if (pfnD3DKMTQueryAdapterInfo(&query_info) == 0) { //nvidia = 0x10de, amd = 0x1002 if (*((DWORD*)private_data + 1) == device_id) { D3DDDI_QUERYREGISTRY_INFO* reg_info_ptr; //the size 0x432 is from nvidia's dll reg_info_ptr = (D3DDDI_QUERYREGISTRY_INFO*)new char[0x432]; memset(reg_info_ptr, 0, 0x432); reg_info_ptr->QueryType = D3DDDI_QUERYREGISTRY_DRIVERSTOREPATH; query_info.hAdapter = adapter_info_ptr->hAdapter; query_info.Type = KMTQAITYPE_QUERYREGISTRY; query_info.pPrivateDriverData = reg_info_ptr; query_info.PrivateDriverDataSize = 0x432; NTSTATUS status = pfnD3DKMTQueryAdapterInfo(&query_info); if (status == 0) { driver_store_path = ReplaceSystemroot(reg_info_ptr->OutputString); delete[]reg_info_ptr; break; } delete[]reg_info_ptr; } } } } if (enum_adapters.pAdapters) delete[]enum_adapters.pAdapters; } return driver_store_path;}
再有就是setupAPI的方式,這個大家應該相當熟悉了:
std::wstring GetDriverStorePath(const std::wstring& device_id){ std::wstring infPath; HDEVINFO deviceInfoSet = SetupDiGetClassDevs(&GUID_DEVCLASS_DISPLAY, NULL, NULL, DIGCF_PRESENT); if (deviceInfoSet == INVALID_HANDLE_VALUE) return infPath; SP_DEVINFO_DATA deviceInfoData; deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (DWORD index = 0; SetupDiEnumDeviceInfo(deviceInfoSet, index, &deviceInfoData); ++index) { DWORD propertyType; WCHAR buffer[1024]; deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); if (SetupDiGetDeviceRegistryProperty(deviceInfoSet, &deviceInfoData, SPDRP_HARDWAREID, &propertyType, reinterpret_cast(buffer), sizeof(buffer), NULL)) { if (wcsstr(buffer, device_id.c_str()) != NULL) // NVIDIA vendor ID { DWORD req_size = 0; if (SetupDiGetDeviceProperty(deviceInfoSet, &deviceInfoData, &DEVPKEY_Device_DriverInfPath, &propertyType, reinterpret_cast(buffer), sizeof(buffer), &req_size, 0)) { infPath = buffer; if (SetupGetInfDriverStoreLocation(infPath.c_str(), NULL, NULL, buffer, sizeof(buffer), &req_size)) { PathRemoveFileSpecW(buffer); infPath = buffer; } else { infPath.clear(); } } } } } SetupDiDestroyDeviceInfoList(deviceInfoSet); return infPath;}
對于游戲玩家而言,顯卡性能非常重要,如果要想游戲運行更加流暢的話,就需要把顯卡設置為高性能。很多升級到Win10 21H2還不知道怎么把顯卡設置為高性能,下面我們就來看看設置步驟。 方法一、 ...
2025.07.02一、英偉達顯卡是什么?英偉達顯卡(Nvidia Graphics Processing Unit,Nvidia GPU)是一種高端的圖形處理器,由美國英偉達公司設計和制造,被廣泛用于電腦游戲、視頻編輯...
2025.06.29導讀本文將介紹如何在Ubuntu系統上,安裝顯卡驅動。1. 下載驅動驅動程序下載[1]打開上面的驅動下載鏈接,根據自己的顯卡型號進行選擇對應配置,如下圖,后點擊搜索。驅動下載下載搜索后,點擊下面下載案...
2025.07.01一臺完整可使用的電腦是由硬件和軟件兩部分構成,看得見摸得著的電腦配件我們可以稱它為硬件部分,看得見摸不著的電腦構成部分我們稱之為軟件部分,除了電腦的操作系統和我們平常使用的各類程序都是屬于軟件的范疇外...
2025.07.03