2016-06-02 12:20:51 +00:00
|
|
|
/**
|
2016-09-11 20:20:15 +00:00
|
|
|
* Author......: See docs/credits.txt
|
2016-06-02 12:20:51 +00:00
|
|
|
* License.....: MIT
|
|
|
|
*/
|
|
|
|
|
2016-09-05 19:47:26 +00:00
|
|
|
#include "common.h"
|
2016-10-09 20:41:55 +00:00
|
|
|
#include "types.h"
|
2021-06-10 18:13:12 +00:00
|
|
|
#include "memory.h"
|
|
|
|
#include "event.h"
|
2016-09-05 19:47:26 +00:00
|
|
|
#include "ext_nvapi.h"
|
2021-06-10 18:13:12 +00:00
|
|
|
|
|
|
|
#include "dynloader.h"
|
|
|
|
|
|
|
|
int nvapi_init (void *hashcat_ctx)
|
|
|
|
{
|
|
|
|
hwmon_ctx_t *hwmon_ctx = ((hashcat_ctx_t *) hashcat_ctx)->hwmon_ctx;
|
|
|
|
|
|
|
|
NVAPI_PTR *nvapi = (NVAPI_PTR *) hwmon_ctx->hm_nvapi;
|
|
|
|
|
|
|
|
memset (nvapi, 0, sizeof (NVAPI_PTR));
|
|
|
|
|
|
|
|
#if defined (_WIN)
|
|
|
|
|
|
|
|
#if defined (_WIN64)
|
|
|
|
nvapi->lib = hc_dlopen ("nvapi64.dll");
|
|
|
|
#else
|
|
|
|
nvapi->lib = hc_dlopen ("nvapi.dll");
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
#if defined (__CYGWIN__)
|
|
|
|
|
|
|
|
#if defined (__x86_x64__)
|
|
|
|
nvapi->lib = hc_dlopen ("nvapi64.dll");
|
|
|
|
#else
|
|
|
|
nvapi->lib = hc_dlopen ("nvapi.dll");
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#else
|
|
|
|
nvapi->lib = hc_dlopen ("nvapi.so"); // uhm yes, but .. yeah
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
if (!nvapi->lib)
|
|
|
|
{
|
|
|
|
//if (user_options->quiet == false)
|
|
|
|
// event_log_error (hashcat_ctx, "Load of NVAPI library failed. Proceeding without NVAPI HWMon enabled.");
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
HC_LOAD_FUNC(nvapi, nvapi_QueryInterface, NVAPI_QUERYINTERFACE, NVAPI, 0);
|
|
|
|
HC_LOAD_ADDR(nvapi, NvAPI_Initialize, NVAPI_INITIALIZE, nvapi_QueryInterface, 0x0150E828U, NVAPI, 0);
|
|
|
|
HC_LOAD_ADDR(nvapi, NvAPI_Unload, NVAPI_UNLOAD, nvapi_QueryInterface, 0xD22BDD7EU, NVAPI, 0);
|
|
|
|
HC_LOAD_ADDR(nvapi, NvAPI_GetErrorMessage, NVAPI_GETERRORMESSAGE, nvapi_QueryInterface, 0x6C2D048CU, NVAPI, 0);
|
|
|
|
HC_LOAD_ADDR(nvapi, NvAPI_EnumPhysicalGPUs, NVAPI_ENUMPHYSICALGPUS, nvapi_QueryInterface, 0xE5AC921FU, NVAPI, 0);
|
|
|
|
HC_LOAD_ADDR(nvapi, NvAPI_GPU_GetPerfPoliciesInfo, NVAPI_GPU_GETPERFPOLICIESINFO, nvapi_QueryInterface, 0x409D9841U, NVAPI, 0);
|
|
|
|
HC_LOAD_ADDR(nvapi, NvAPI_GPU_GetPerfPoliciesStatus, NVAPI_GPU_GETPERFPOLICIESSTATUS, nvapi_QueryInterface, 0x3D358A0CU, NVAPI, 0);
|
|
|
|
HC_LOAD_ADDR(nvapi, NvAPI_GPU_GetBusId, NVAPI_GPU_GETBUSID, nvapi_QueryInterface, 0x1BE0B8E5U, NVAPI, 0);
|
|
|
|
HC_LOAD_ADDR(nvapi, NvAPI_GPU_GetBusSlotId, NVAPI_GPU_GETBUSSLOTID, nvapi_QueryInterface, 0x2A0A350FU, NVAPI, 0);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void nvapi_close (void *hashcat_ctx)
|
|
|
|
{
|
|
|
|
hwmon_ctx_t *hwmon_ctx = ((hashcat_ctx_t *) hashcat_ctx)->hwmon_ctx;
|
|
|
|
|
|
|
|
NVAPI_PTR *nvapi = (NVAPI_PTR *) hwmon_ctx->hm_nvapi;
|
|
|
|
|
|
|
|
if (nvapi)
|
|
|
|
{
|
|
|
|
if (nvapi->lib)
|
|
|
|
hc_dlclose (nvapi->lib);
|
|
|
|
|
|
|
|
hcfree (nvapi);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void hm_NvAPI_GetErrorMessage (NVAPI_PTR *nvapi, const NvAPI_Status NvAPI_rc, NvAPI_ShortString string)
|
|
|
|
{
|
|
|
|
nvapi->NvAPI_GetErrorMessage (NvAPI_rc, string);
|
|
|
|
}
|
|
|
|
|
|
|
|
int hm_NvAPI_Initialize (void *hashcat_ctx)
|
|
|
|
{
|
|
|
|
hwmon_ctx_t *hwmon_ctx = ((hashcat_ctx_t *) hashcat_ctx)->hwmon_ctx;
|
|
|
|
|
|
|
|
NVAPI_PTR *nvapi = (NVAPI_PTR *) hwmon_ctx->hm_nvapi;
|
|
|
|
|
|
|
|
const NvAPI_Status NvAPI_rc = (NvAPI_Status) nvapi->NvAPI_Initialize ();
|
|
|
|
|
|
|
|
if (NvAPI_rc == NVAPI_LIBRARY_NOT_FOUND) return -1;
|
|
|
|
|
|
|
|
if (NvAPI_rc != NVAPI_OK)
|
|
|
|
{
|
|
|
|
NvAPI_ShortString string = { 0 };
|
|
|
|
|
|
|
|
hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
|
|
|
|
|
|
|
|
event_log_error (hashcat_ctx, "NvAPI_Initialize(): %s", string);
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int hm_NvAPI_Unload (void *hashcat_ctx)
|
|
|
|
{
|
|
|
|
hwmon_ctx_t *hwmon_ctx = ((hashcat_ctx_t *) hashcat_ctx)->hwmon_ctx;
|
|
|
|
|
|
|
|
NVAPI_PTR *nvapi = (NVAPI_PTR *) hwmon_ctx->hm_nvapi;
|
|
|
|
|
|
|
|
const NvAPI_Status NvAPI_rc = (NvAPI_Status) nvapi->NvAPI_Unload ();
|
|
|
|
|
|
|
|
if (NvAPI_rc != NVAPI_OK)
|
|
|
|
{
|
|
|
|
NvAPI_ShortString string = { 0 };
|
|
|
|
|
|
|
|
hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
|
|
|
|
|
|
|
|
event_log_error (hashcat_ctx, "NvAPI_Unload(): %s", string);
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int hm_NvAPI_EnumPhysicalGPUs (void *hashcat_ctx, NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount)
|
|
|
|
{
|
|
|
|
hwmon_ctx_t *hwmon_ctx = ((hashcat_ctx_t *) hashcat_ctx)->hwmon_ctx;
|
|
|
|
|
|
|
|
NVAPI_PTR *nvapi = (NVAPI_PTR *) hwmon_ctx->hm_nvapi;
|
|
|
|
|
|
|
|
const NvAPI_Status NvAPI_rc = (NvAPI_Status) nvapi->NvAPI_EnumPhysicalGPUs (nvGPUHandle, pGpuCount);
|
|
|
|
|
|
|
|
if (NvAPI_rc != NVAPI_OK)
|
|
|
|
{
|
|
|
|
NvAPI_ShortString string = { 0 };
|
|
|
|
|
|
|
|
hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
|
|
|
|
|
|
|
|
event_log_error (hashcat_ctx, "NvAPI_EnumPhysicalGPUs(): %s", string);
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int hm_NvAPI_GPU_GetPerfPoliciesInfo (void *hashcat_ctx, NvPhysicalGpuHandle hPhysicalGpu, NV_GPU_PERF_POLICIES_INFO_PARAMS_V1 *perfPolicies_info)
|
|
|
|
{
|
|
|
|
hwmon_ctx_t *hwmon_ctx = ((hashcat_ctx_t *) hashcat_ctx)->hwmon_ctx;
|
|
|
|
|
|
|
|
NVAPI_PTR *nvapi = (NVAPI_PTR *) hwmon_ctx->hm_nvapi;
|
|
|
|
|
|
|
|
const NvAPI_Status NvAPI_rc = (NvAPI_Status) nvapi->NvAPI_GPU_GetPerfPoliciesInfo (hPhysicalGpu, perfPolicies_info);
|
|
|
|
|
|
|
|
if (NvAPI_rc != NVAPI_OK)
|
|
|
|
{
|
|
|
|
NvAPI_ShortString string = { 0 };
|
|
|
|
|
|
|
|
hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
|
|
|
|
|
|
|
|
event_log_error (hashcat_ctx, "NvAPI_GPU_GetPerfPoliciesInfo(): %s", string);
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int hm_NvAPI_GPU_GetPerfPoliciesStatus (void *hashcat_ctx, NvPhysicalGpuHandle hPhysicalGpu, NV_GPU_PERF_POLICIES_STATUS_PARAMS_V1 *perfPolicies_status)
|
|
|
|
{
|
|
|
|
hwmon_ctx_t *hwmon_ctx = ((hashcat_ctx_t *) hashcat_ctx)->hwmon_ctx;
|
|
|
|
|
|
|
|
NVAPI_PTR *nvapi = (NVAPI_PTR *) hwmon_ctx->hm_nvapi;
|
|
|
|
|
|
|
|
const NvAPI_Status NvAPI_rc = (NvAPI_Status) nvapi->NvAPI_GPU_GetPerfPoliciesStatus (hPhysicalGpu, perfPolicies_status);
|
|
|
|
|
|
|
|
if (NvAPI_rc != NVAPI_OK)
|
|
|
|
{
|
|
|
|
NvAPI_ShortString string = { 0 };
|
|
|
|
|
|
|
|
hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
|
|
|
|
|
|
|
|
event_log_error (hashcat_ctx, "NvAPI_GPU_GetPerfPoliciesStatus(): %s", string);
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int hm_NvAPI_GPU_GetBusId (void *hashcat_ctx, NvPhysicalGpuHandle hPhysicalGpu, NvU32 *pBusId)
|
|
|
|
{
|
|
|
|
hwmon_ctx_t *hwmon_ctx = ((hashcat_ctx_t *) hashcat_ctx)->hwmon_ctx;
|
|
|
|
|
|
|
|
NVAPI_PTR *nvapi = (NVAPI_PTR *) hwmon_ctx->hm_nvapi;
|
|
|
|
|
|
|
|
const NvAPI_Status NvAPI_rc = (NvAPI_Status) nvapi->NvAPI_GPU_GetBusId (hPhysicalGpu, pBusId);
|
|
|
|
|
|
|
|
if (NvAPI_rc != NVAPI_OK)
|
|
|
|
{
|
|
|
|
NvAPI_ShortString string = { 0 };
|
|
|
|
|
|
|
|
hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
|
|
|
|
|
|
|
|
event_log_error (hashcat_ctx, "NvAPI_GPU_GetBusId(): %s", string);
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int hm_NvAPI_GPU_GetBusSlotId (void *hashcat_ctx, NvPhysicalGpuHandle hPhysicalGpu, NvU32 *pBusSlotId)
|
|
|
|
{
|
|
|
|
hwmon_ctx_t *hwmon_ctx = ((hashcat_ctx_t *) hashcat_ctx)->hwmon_ctx;
|
|
|
|
|
|
|
|
NVAPI_PTR *nvapi = (NVAPI_PTR *) hwmon_ctx->hm_nvapi;
|
|
|
|
|
|
|
|
const NvAPI_Status NvAPI_rc = (NvAPI_Status) nvapi->NvAPI_GPU_GetBusSlotId (hPhysicalGpu, pBusSlotId);
|
|
|
|
|
|
|
|
if (NvAPI_rc != NVAPI_OK)
|
|
|
|
{
|
|
|
|
NvAPI_ShortString string = { 0 };
|
|
|
|
|
|
|
|
hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
|
|
|
|
|
|
|
|
event_log_error (hashcat_ctx, "NvAPI_GPU_GetBusSlotId(): %s", string);
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|