WIN API. Получение информации о диске.

 
Поступила просьба по почте такая. Вот реализация:
//+------------------------------------------------------------------+
//|                                         GetVolumeInformation.mq4 |
//|                                         Copyright © Zhunko       |
//|                                         vadim@zhunko.ru          |
//+------------------------------------------------------------------+
#property copyright "Copyright © Zhunko"
#property link      "vadim@zhunko.ru"
#property show_inputs
#import "kernel32.dll"
 bool GetVolumeInformationA (string lpRootPathName,             // Указатель на строку "C:\" .
                             string lpVolumeNameBuffer,         // Указатель на строковый буфер(миниум 256).
                             int    nVolumeNameSize,            // Выделенный размер буфера для lpVolumeNameBuffer.
                             int&   lpVolumeSerialNumber[],     // Указатель на DWORD var.
                             int&   lpMaximumComponentLength[], // Указатель на DWORD var.
                             int&   lpFileSystemFlags[],        // Указатель на DWORD var.
                             string lpFileSystemNameBuffer,     // Указатель на строковый буфер(миниум 256).
                             int    nFileSystemNameSize);       // Выделенный размер буфера для lpFileSystemNameBuffer.
#import
extern string DriveLetter = "C";
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start()
 {
  string sNameDisk = DriveLetter + ":\\";
  string sNameBuffer = "                                                                                                                                                                                                                                                               ";
  string sSysNameBuffer = "          ";
  int    dwVSNumber[1] = {0};
  int    dwMCLength[1] = {0};
  int    dwFileSF[1] = {0};
  //----
  if (GetVolumeInformationA(sNameDisk, sNameBuffer, StringLen(sNameBuffer) + 1, dwVSNumber, dwMCLength, dwFileSF, sSysNameBuffer, StringLen(sSysNameBuffer) + 1))
   {
    Comment("NameBuffer: ", sNameBuffer, "\nSysNameBuffer: ", sSysNameBuffer, "\nVSNumber = ", dwVSNumber[0], "\nMCLength = ", dwMCLength[0], "\nFileSF = ", dwFileSF[0]);
   }
  else Comment("Информация не получена!");
 }
//+------------------------------------------------------------------+
Файлы:
 
https://forum.mql4.com/ru/31172
 
HIDDEN >>:
https://forum.mql4.com/ru/31172
Значит он плохо искал. А мне проще написать, чем искать.
 
Zhunko углубится не желаешь? Необходимо узнать серийник винта на уровне железа, а не раздела. У меня пока что-то не получается.
 
Ерунда всё это на уровне MQL4. Защититься так не удасться.
Интересно защититься с запросами на свой FTP.
 
Zhunko >>:
Ерунда всё это на уровне MQL4. Защититься так не удасться.
Интересно защититься с запросами на свой FTP.

И все же... Мы тут не способы защиты проектируем, а решаем конкретную задачу, узнать serial hdd

 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE
 
HardwareID ?
 
IgorM >>:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE

https://www.mql5.com/ru/forum/103532/page2#31964

 
HIDDEN >>:

И все же... Мы тут не способы защиты проектируем, а решаем конкретную задачу, узнать serial hdd


я бы не заморачивался с переписыванием всего WinAPI в скрипт, а сделал бы одну dll на Delphi / C++, где была бы одна реально полезная функция и куча защит и проверок и HDD и MAC и ...
#import "my.dll"
 bool My_super_func (int a,b);
#import
полезная функция:

function My_super_func(const a,b:integer):boolean;
begin
 if a>b then My_super_func:=TRUE else FALSE;
end;
 
IgorM >>:


я бы не заморачивался с переписыванием всего WinAPI в скрипт, а сделал бы одну dll на Delphi / C++, где была бы одна реально полезная функция и куча защит и проверок и HDD и MAC и ...
полезная функция:

function My_super_func(const a,b:integer):boolean;
begin
if a>b then My_super_func:=TRUE else FALSE;
end;

А что мешает сделать и тут её опубликовать, в исходниках конечно.

Причина обращения: