![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Серийный номер диска [D7, WinXP]
dima1234 © (2005-08-08 16:49:00)Необходимо считать серийный номер CD-диска. Нужно это для создания защиты от копирования.
Поискал в инете, нашел, что надо плясать от DeviceIoControl, но документации не нашел...
Если кто-нибудь сталкивался с подобным вопросом, подскажите хоть что-нибудь.
dima1234 (2005-08-09 08:27:00) [1]GetVolumeInformation не подходит, т.к. вместо серийника он возвращает номер файловой системы, кот. меняется при записи и остается при снятии образа.
А на болванке все таки есть уникальная ATIP информация, единственно ее можно получить если болванка не пустая.
Работа с DeviceIoControl упирается в Microsoft DDK, точнее в ntddcdrm.h, может у кого то есть ссылка на перелопаченный этот h на pas?
Или подскажите какие методы еще есть? Не хочеться писать отдельную dll с функцией проверки серийника...
Ded Moroz (2005-08-08 21:52:00) [2]2 dima1234
Должен тебя разочаровать. На CD-болванке НЕТ НИЧЕГО УНИКАЛЬНОГО!
Там просто пустая матрица. Серийный номер ЛЕГКО задается/копируется при записи. Я тоже раньше думал к номеру привязываться...
MetalFan (2005-08-08 18:48:00) [3]да только толка от этого мало...
MetalFan (2005-08-08 18:47:00) [4]GetHardDiskSerial
ага, и для ЦД тоже сработает %)
Poirot (2005-08-08 17:37:00) [5]Угу, тока вот этот номер корячится просто а потом где хранить то, с чем проверять?! :)
Вот через первое и пляши + см таки MSDK :)
Ботвин Дмитрий (2005-08-08 17:10:00) [6]Думается сначала надо узнать имя дисковода, а по ней серийный
номер, т.е:
Буква CD-ROM:
function GetFirstCDROMDrive: char;
var
drivemap, mask: DWORD;
i: integer;
root: string;
begin
Result := #0;
root := 'A:\';
drivemap := GetLogicalDrives;
mask := 1;
for i := 1 to 32 do
begin
if (mask and drivemap) <> 0 then
if GetDriveType(PChar(root)) = DRIVE_CDROM then
begin
Result := root[1];
Break;
end;
mask := mask shl 1;
Inc(root[1]);
end;
end;
А серийник:
function GetHardDiskSerial(const DriveLetter: Char): string;
var
NotUsed: DWORD;
VolumeFlags: DWORD;
VolumeInfo: array[0..MAX_PATH] of Char;
VolumeSerialNumber: DWORD;
begin
GetVolumeInformation(PChar(DriveLetter + ':\'),
nil, SizeOf(VolumeInfo), @VolumeSerialNumber, NotUsed,
VolumeFlags, nil, 0);
Result := Format('Label = %s VolSer = %8.8X',
[VolumeInfo, VolumeSerialNumber])
end;