Как узнать серийный номер HDD тома или всего диска используя WinAPI из MQL4. - страница 2

 
Itso >>:


Вроде правильно. НО это не тот серийный номер, который прописан хардуерно. После форматирования диска будеть другим. Вообще вся эта затея с защитами не катит. Если советник хороший - взломают по любому. Если плохой - никто на его и не посмотрить.

То что взломают понятно, вопрос в том будет ли это стоить того.

 
верно. все работает.
хотя наверно функцию надо писать c &

вот результат

c:\ -996486739
d:\ 601686437
usb j:\ -2031370260
usb i:\ -2031370260

#import "kernel32.dll"
bool GetVolumeInformationA(string lpRootPathName, string &lpVolumeNameBuffer, int nVolumeNameSize, 
                            int &lpVolumeSerialNumber[], int &lpMaximumComponentLength[], 
                            int &lpFileSystemFlags[], string &lpFileSystemNameBuffer, int nFileSystemNameSize);
#import

//+------------------------------------------------------------------+
int start()
{
   string spaces128 = "                                                                                                                                ";
   string path="c:\\";
   string pathName = spaces128 + spaces128;
   string nameBuffer = spaces128 + spaces128+" "; // лучше разное кол-во пробелов -- помнится была проблема.
   int serial[1], length[1], flags[1]; 

   serial[0]=0; if (GetVolumeInformationA("c:\\", pathName, 256, serial, length, flags, nameBuffer, 257)) Print("c:\\ "+serial[0]);
   serial[0]=0; if (GetVolumeInformationA("d:\\", pathName, 256, serial, length, flags, nameBuffer, 257)) Print("d:\\ "+serial[0]);
   serial[0]=0; if (GetVolumeInformationA("j:\\", pathName, 256, serial, length, flags, nameBuffer, 257)) Print("usb i:\\ "+serial[0]);
   serial[0]=0; if (GetVolumeInformationA("j:\\", pathName, 256, serial, length, flags, nameBuffer, 257)) Print("usb j:\\ "+serial[0]);

   return(0);
}
 
TheXpert писал(а) >>

Это не серийный номер веника, но раздела. Именно он обычно и используется.


Вообще-то этот номер находиться в boot секторе - смещение 0x48 - справка: http://bootmaster.filerecovery.biz/appnote3.html

 
Itso >>:


Вообще-то этот номер находиться в boot секторе - смещение 0x48 - справка: http://bootmaster.filerecovery.biz/appnote3.html

Ну кто же рискнет лезть в boot сектор напрямую, дело то может кончится плачевно.

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

Кстати а к чему еще можно привязать программу из железа?

 
sergeev >>:
верно. все работает.
хотя наверно функцию надо писать c &

вот результат

c:\ -996486739
d:\ 601686437
usb j:\ -2031370260
usb i:\ -2031370260


Амперсанд наверное все таки не нужен, массив он не по значению в функцию передается.

 
HIDDEN >>:
Кстати а к чему еще можно привязать программу из железа?

К сетевухе.

SofTAA >>:
Амперсанд наверное все таки не нужен, массив он не по значению в функцию передается.
Да.
 
TheXpert >>:

К сетевухе.

Я так понял Вы имеете ввиду мак адрес, так его тоже подменить можно.

 
SofTAA >>:
Я так понял Вы имеете ввиду мак адрес, так его тоже подменить можно.

Ну, совсем универсального способа наверное нет :) . Да и любой способ ломается.

 
HIDDEN писал(а) >>

можно еще попытаться вытянуть серийный номер камня, ...


Тут подвох. Дело в том, что SN процессора запрещен по умолчанию в BIOS-а. Иначе что-то можно взять через WMI - http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx
но там номер - ненастоящий.

 
SofTAA писал(а) >>

Я так понял Вы имеете ввиду мак адрес, так его тоже подменить можно.


Можно подменить софтверно - и тогда TCP/IP пакеты будут с фальшивым маком. НО есть еще хардуерный - его подменить нельзя (ну - наверно прошить его специально можно, но это не считается)
Причина обращения: