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