Кто напишет защиту mql5 с привязкой к железу dll?

 
Доброго времени. Есть индикатор, хотелось бы сделать привязку к железу через dll. Есть бесплатные варианты - высылайте. Если кто может сделать за деньги - пишите стоимость этой услуги.
 
Достаточно к счёту привязать
 
Разместите в Маркете. Получите бесплатную привязку к железу.
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Получение информации из SMBIOS

Vitaly Muzichenko, 2021.03.23 20:33

Итоговый код получился вот таким

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2020, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property version   "1.0"
#property strict
#property copyright "(c)2021 Edgar Akhmadeev"
#property link      "https://www.mql5.com/en/users/dali"
// 2021.03.23

#import "kernel32.dll"
uint GetSystemFirmwareTable(uint firmware_table_provider_signature,uint firmware_table_id,uchar firmware_table_buffer,uint buffer_size);
uint GetSystemFirmwareTable(uint firmware_table_provider_signature,uint firmware_table_id,uchar &firmware_table_buffer[],uint buffer_size);
#import

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
union UUID16 {
   uchar b[16];
};
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class SMBIOS
{
private:
   static UUID16     uuid;

public:
   static string     Read();
};
static UUID16  SMBIOS::uuid;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
static string SMBIOS::Read()
{
   const uint SMBIOS_signature = ('R' << 24) + ('S' << 16) + ('M' << 8) + 'B';
// Query size of SMBIOS info.
   uint size = GetSystemFirmwareTable(SMBIOS_signature, 0, NULL, 0);
// Allocate memory for SMBIOS info
   uchar data[];
   if (ArrayResize(data, size) <= 0)
      return NULL;
// Retrieve the SMBIOS table
   uint written = GetSystemFirmwareTable(SMBIOS_signature, 0, data, size);
   if (written != size)
      return NULL;
   uint idx = 0;
   idx += 8;
// Process the SMBIOS info
   string sUUID;
   while (idx < size) {
      uchar type = data[idx];
      uchar len = data[idx + 1];
      if (len < 4)
         break;
      if (type == 1 && len >= 25) {
         idx += 8;   // offset to UUID
         // check if there is a valid UUID (not all 0x00 or all 0xff)
         bool all_zero = true, all_one = true;
         for (int i = 0; i < 16 && (all_zero || all_one); i++) {
            if (data[idx + i] != 0x00)
               all_zero = false;
            if (data[idx + i] != 0xFF)
               all_one = false;
         }
         if (!all_zero && !all_one) {
            uint idx2 = 0;
            // As off version 2.6 of the SMBIOS specification, the first 3 fields of the UUID are supposed to be encoded on little-endian. (para 7.2.1)
            sUUID  = StringFormat("%02x", uuid.b[idx2++] = data[idx + 3]);
            sUUID += StringFormat("%02x", uuid.b[idx2++] = data[idx + 2]);
            sUUID += StringFormat("%02x", uuid.b[idx2++] = data[idx + 1]);
            sUUID += StringFormat("%02x", uuid.b[idx2++] = data[idx + 0]);
            sUUID += "-";
            sUUID += StringFormat("%02x", uuid.b[idx2++] = data[idx + 5]);
            sUUID += StringFormat("%02x", uuid.b[idx2++] = data[idx + 4]);
            sUUID += "-";
            sUUID += StringFormat("%02x", uuid.b[idx2++] = data[idx + 7]);
            sUUID += StringFormat("%02x", uuid.b[idx2++] = data[idx + 6]);
            sUUID += "-";
            for (int i = 8; i < 10; i++)
               sUUID += StringFormat("%02x", uuid.b[idx2++] = data[idx + i]);
            sUUID += "-";
            for (int i = 10; i < 16; i++)
               sUUID += StringFormat("%02x", uuid.b[idx2++] = data[idx + i]);
         }
         return sUUID;
      } else
         idx += len;    // Skip formatted area
      do {
         int i = 0;
         while (idx + i < size && data[idx + i] != 0)
            ++i;
         idx += i + 1;
      } while (data[idx] != 0);
      ++idx;
   }
   return sUUID;
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
{
   string uuid = SMBIOS::Read();
   if (uuid == NULL) {
      Print("Error reading SMBIOS data!");
      return;
   }
   Print("UUID: ", uuid);
}
//+------------------------------------------------------------------+

---

@Edgar Akhmadeev, огромное спасибо!


Посмотрите эту ветку.

 
Sergey Bulavchenko:
Доброго времени. Есть индикатор, хотелось бы сделать привязку к железу через dll. Есть бесплатные варианты - высылайте. Если кто может сделать за деньги - пишите стоимость этой услуги.

Здесь найдутся желающие. 

Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • 2021.08.04
  • www.mql5.com
Самый большой фриланс c разработчиками программ на MQL5
 
Ihor Herasko:
Разместите в Маркете. Получите бесплатную привязку к железу.

И не только, еще и к оси)

 
Ramiz Mavludov:

Здесь найдутся желающие.

Ramiz, а приблизительная стоимость услуги?

 
Valeriy Yastremskiy:

Посмотрите эту ветку.

Валерий, проблема в ветке решена не до конца .
 
Sergey Bulavchenko:
Валерий, проблема в ветке решена не до конца .

Конечно, на левом железе она вряд ли может быть решена. Возможно нужно брать id нескольких устройств. К тому же предусмотреть конфигурацию железа на все 100 тоже нельзя. Какие то часть могут быть виртуальными)

 
Sergey Bulavchenko:
Валерий, проблема в ветке решена не до конца .

Вообще-то существую коммерческие решения, даже с физическими крипто-носителями. 

Осильте уже поиск в яндексе

 
Maxim Kuznetsov:

Вообще-то существую коммерческие решения, даже с физическими крипто-носителями. 

Осильте уже поиск в яндексе

Уже не только Яндекс перелопатил, но и Гугл.