get rid of nvidia nvapi static linking
[hashcat.git] / src / ext_nvapi.c
1 /**
2 * Author......: Jens Steube <jens.steube@gmail.com>
3 * License.....: MIT
4 */
5
6 #include <ext_nvapi.h>
7
8 int nvapi_init (NVAPI_PTR *nvapi)
9 {
10 if (!nvapi) return (-1);
11
12 memset (nvapi, 0, sizeof (NVAPI_PTR));
13
14 #if __x86_64__
15 nvapi->lib = hc_dlopen ("nvapi64.dll");
16 #elif __x86__
17 nvapi->lib = hc_dlopen ("nvapi.dll");
18 #endif
19
20 if (!nvapi->lib)
21 {
22 if (data.quiet == 0)
23 log_info ("WARNING: load NVAPI library failed, proceed without NVAPI HWMon enabled.");
24
25 return (-1);
26 }
27
28 HC_LOAD_FUNC(nvapi, nvapi_QueryInterface, NVAPI_QUERYINTERFACE, NVAPI, 0)
29 HC_LOAD_ADDR(nvapi, NvAPI_Initialize, NVAPI_INITIALIZE, nvapi_QueryInterface, 0x0150E828, NVAPI, 0)
30 HC_LOAD_ADDR(nvapi, NvAPI_Unload, NVAPI_UNLOAD, nvapi_QueryInterface, 0x0D22BDD7E, NVAPI, 0)
31 HC_LOAD_ADDR(nvapi, NvAPI_GetErrorMessage, NVAPI_GETERRORMESSAGE, nvapi_QueryInterface, 0x6C2D048C, NVAPI, 0)
32 HC_LOAD_ADDR(nvapi, NvAPI_GPU_GetDynamicPstatesInfoEx, NVAPI_GPU_GETDYNAMICPSTATESINFOEX, nvapi_QueryInterface, 0x60DED2ED, NVAPI, 0)
33 HC_LOAD_ADDR(nvapi, NvAPI_EnumPhysicalGPUs, NVAPI_ENUMPHYSICALGPUS, nvapi_QueryInterface, 0xE5AC921F, NVAPI, 0)
34 HC_LOAD_ADDR(nvapi, NvAPI_GPU_GetThermalSettings, NVAPI_GPU_GETTHERMALSETTINGS, nvapi_QueryInterface, 0xE3640A56, NVAPI, 0)
35 HC_LOAD_ADDR(nvapi, NvAPI_GPU_GetTachReading, NVAPI_GPU_GETTACHREADING, nvapi_QueryInterface, 0x5F608315, NVAPI, 0)
36
37 return 0;
38 }
39
40 void nvapi_close (NVAPI_PTR *nvapi)
41 {
42 if (nvapi)
43 {
44 if (nvapi->lib)
45 hc_dlclose (nvapi->lib);
46
47 myfree (nvapi);
48 }
49 }
50
51 int hm_NvAPI_Initialize (NVAPI_PTR *nvapi)
52 {
53 if (!nvapi) return (-1);
54
55 NvAPI_Status NvAPI_rc = nvapi->NvAPI_Initialize ();
56
57 if (NvAPI_rc == NVAPI_LIBRARY_NOT_FOUND) NvAPI_rc = NVAPI_OK; // not a bug
58
59 if (NvAPI_rc != NVAPI_OK)
60 {
61 NvAPI_ShortString string;
62
63 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
64
65 log_info ("WARN: %s %d %s\n", "NvAPI_Initialize()", NvAPI_rc, string);
66 }
67
68 return NvAPI_rc;
69 }
70
71 int hm_NvAPI_Unload (NVAPI_PTR *nvapi)
72 {
73 if (!nvapi) return (-1);
74
75 NvAPI_Status NvAPI_rc = nvapi->NvAPI_Unload ();
76
77 if (NvAPI_rc != NVAPI_OK)
78 {
79 NvAPI_ShortString string;
80
81 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
82
83 log_info ("WARN: %s %d %s\n", "NvAPI_Unload()", NvAPI_rc, string);
84 }
85
86 return NvAPI_rc;
87 }
88
89 int hm_NvAPI_GetErrorMessage (NVAPI_PTR *nvapi, NvAPI_Status NvAPI_rc, NvAPI_ShortString string)
90 {
91 if (!nvapi) return (-1);
92
93 return nvapi->NvAPI_GetErrorMessage (NvAPI_rc, string);
94 }
95
96 int hm_NvAPI_EnumPhysicalGPUs (NVAPI_PTR *nvapi, NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount)
97 {
98 if (!nvapi) return (-1);
99
100 NvAPI_Status NvAPI_rc = nvapi->NvAPI_EnumPhysicalGPUs (nvGPUHandle, pGpuCount);
101
102 if (NvAPI_rc != NVAPI_OK)
103 {
104 NvAPI_ShortString string;
105
106 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
107
108 log_info ("WARN: %s %d %s\n", "NvAPI_EnumPhysicalGPUs()", NvAPI_rc, string);
109 }
110
111 return NvAPI_rc;
112 }
113
114 int hm_NvAPI_GPU_GetThermalSettings (NVAPI_PTR *nvapi, NvPhysicalGpuHandle hPhysicalGpu, NvU32 sensorIndex, NV_GPU_THERMAL_SETTINGS *pThermalSettings)
115 {
116 if (!nvapi) return (-1);
117
118 NvAPI_Status NvAPI_rc = nvapi->NvAPI_GPU_GetThermalSettings (hPhysicalGpu, sensorIndex, pThermalSettings);
119
120 if (NvAPI_rc != NVAPI_OK)
121 {
122 NvAPI_ShortString string;
123
124 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
125
126 log_info ("WARN: %s %d %s\n", "NvAPI_GPU_GetThermalSettings()", NvAPI_rc, string);
127 }
128
129 return NvAPI_rc;
130 }
131
132 int hm_NvAPI_GPU_GetTachReading (NVAPI_PTR *nvapi, NvPhysicalGpuHandle hPhysicalGPU, NvU32 *pValue)
133 {
134 if (!nvapi) return (-1);
135
136 NvAPI_Status NvAPI_rc = nvapi->NvAPI_GPU_GetTachReading (hPhysicalGPU, pValue);
137
138 if (NvAPI_rc != NVAPI_OK)
139 {
140 NvAPI_ShortString string;
141
142 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
143
144 log_info ("WARN: %s %d %s\n", "NvAPI_GPU_GetTachReading()", NvAPI_rc, string);
145 }
146
147 return NvAPI_rc;
148 }
149
150 int hm_NvAPI_GPU_GetDynamicPstatesInfoEx (NVAPI_PTR *nvapi, NvPhysicalGpuHandle hPhysicalGpu, NV_GPU_DYNAMIC_PSTATES_INFO_EX *pDynamicPstatesInfoEx)
151 {
152 if (!nvapi) return (-1);
153
154 NvAPI_Status NvAPI_rc = nvapi->NvAPI_GPU_GetDynamicPstatesInfoEx (hPhysicalGpu, pDynamicPstatesInfoEx);
155
156 if (NvAPI_rc != NVAPI_OK)
157 {
158 NvAPI_ShortString string;
159
160 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
161
162 log_info ("WARN: %s %d %s\n", "NvAPI_GPU_GetDynamicPstatesInfoEx()", NvAPI_rc, string);
163 }
164
165 return NvAPI_rc;
166 }
167
168 #ifdef __MINGW64__
169
170 void __security_check_cookie (uintptr_t _StackCookie)
171 {
172 (void) _StackCookie;
173 }
174
175 void __GSHandlerCheck ()
176 {
177 }
178
179 #endif