Как узнать серийный номер HDD тома или всего диска используя WinAPI из MQL4.
Не знаю как помочь, но тоже интересно.
Судя по описанию, те параметры, которые пробелами должны быть lvalue, т.е. надо явно завести массивы под них
Я недопонимаю пока еще WinAPI и как правильно с ним работать. Поэтому ляпаю из того что найду в сети из кодов С++, Delphi и тут помощи прошу у знающих людей.
А применение естественно для защиты, да и тему эту пока еще никто не освещал на форуме.
ID продуктов может меняться от банального подсоединения USB устройства.
bool GetVolumeInformationA( string pRootPathName, string pVolumeNameBuffer, int nVolumeNameSize, int pVolumeSerialNumber[], int pMaximumComponentLength[], int pFileSystemFlags[], string pFileSystemNameBuffer, int nFileSystemNameSize);
bool GetVolumeInformationA( string lpRootPathName, string &lpVolumeNameBuffer, int nVolumeNameSize, int &lpVolumeSerialNumber[], int &lpMaximumComponentLength[], int &lpFileSystemFlags[], string &lpFileSystemNameBuffer, int nFileSystemNameSize);
#import "kernel32.dll" bool GetVolumeInformationA( string pRootPathName, string& pVolumeNameBuffer, int nVolumeNameSize, int pVolumeSerialNumber[], int pMaximumComponentLength[], int pFileSystemFlags[], string& pFileSystemNameBuffer, int nFileSystemNameSize); #import //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { string spaces128 = " "; string pathName = spaces128 + spaces128; string nameBuffer = spaces128 + spaces128 + " "; // лучше разное кол-во пробелов -- помнится была проблема. int serial[1]; serial[0] = 0; int length[1]; int flags[1]; //---- if (GetVolumeInformationA( "C:\\", pathName, 256, serial, length, flags, nameBuffer, 257)) { Print (serial[0]); } else Print("failed"); //---- return(0); }На правильность не претендую, но вроде пашет. На скорую руку, поэтому напильником работать и работать.
Вроде правильно. НО это не тот серийный номер, который прописан хардуерно. После форматирования диска будеть другим. Вообще вся эта затея с защитами не катит. Если советник хороший - взломают по любому. Если плохой - никто на его и не посмотрить.
Из того что накопал в сети, написал следующее:
Результат выдаёт число НУЛЬ.
Подскажите как правильно применить данную функцию из WinAPI, желательно рабочим кодом с комментариями.
А для проверки того что выводится правильно, вот исходники на Delphi