Сборка кода в C для NVAPI
Как я могу работать с этой функцией?
typedef int(*NvAPI_GPU_SetCoolerLevels_t)(int *handle, unsigned int, int fanlevel);
NvAPI_GPU_SetCoolerLevels_t NvAPI_GPU_SetCoolerLevels = 0;
NvAPI_GPU_SetCoolerLevels = NvQueryInterface(0x891FA0AE);
А теперь установите скорость на 100%, hdlGPU[0] означает, что скорость будет установлена на первый GPU:
int retval = NvAPI_GPU_SetCoolerLevels(hdlGPU[0], 0, 100);
if (retval != 0)//retval retrieves action status {
printf("Status: %i \n", retval);
}
Выдает ошибку:
System.AccessViolationException: 'Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена.
Другие функции, такие как имя GPU, имя BIOS показывает все в порядке.
Проблема в том, что я не могу найти, почему это не работает. Я считаю, что адрес неправильный, или я пропустил параметры из функции.
NvAPI_GPU_SetCoolerLevels_t
Хуже всего то, что nvidia docs вообще не предоставляет никакой информации об этой функции.
В некоторых репозиториях GitHub я читал, что если вы хотите управлять скоростью вентилятора, вы должны изменить параметры на NvAPI_GPU_SetCoolerPolicyTable
, но я не смог найти какие параметры существуют для этой функции. Так что теперь я совсем растерялся.
PS для тестирования я собираю скорость вентилятора GPUS, и он показывает правильно, так что проблема осталась на SetCoolerLevels
а также SetCoolerPolicyTable
PPS некоторое обновление, если я удаляю неподписанный int из SetCoolerLevels
, он печатает ошибку -9 в соответствии с:
https://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/group__nvapistatus.html
это может означать:
- Версия структуры аргумента не поддерживается.
- Дескриптор больше не действителен (вероятно, из-за изменения конфигурации графического процессора или дисплея)
Я надеюсь, что сделал ошибку, потому что я не знаю других вариантов управления скоростью вращения вентиляторов GPU.
PPPS Я просматривал проект github, но ни один из них не работал.