Вот надумал защитить свою софтину. И решил, что лучшим способом этого будет привязка конкретной копии к конкретному железу 8))
А вот как это сделать?
В принципе dmesg выдаёт в частности такое:
ad0: 39266MB <IBM-DTLA-305040> [79780/16/63] at ata0-master UDMA33
^^^^^^^^^^^^^^^
А вот как эго получить сугубо из под С.....
Заранее благодарен.
>А вот как эго получить сугубо из под С.....Можно через /proc или sysctl, в зависимости от системы.
>>А вот как эго получить сугубо из под С.....
>
>Можно через /proc или sysctl, в зависимости от системы.Ну как это сделать через /proc я себе представляю...
А вот как черезе sysctl?
В его параметрах я такого не нашел....
> А вот как черезе sysctl?sysctl тоже достаточно сильно к системе привязан, например, для FreeBSD тип CPU узнается через "sysctl hw.model", в Linux - "cat /proc/cpuinfo"
Из программы sysctl используется, почти как через команду sysctl:
man 3 sysctlint sysctlbyname(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen);
>А вот как это сделать?
В этой жизни ни в чем нельзя быть уверенным, особенно - что остальные идиоты.
>В этой жизни ни в чем нельзя быть уверенным, особенно - что
>остальные идиоты.
Ну так сказать довольно просто. Но честно говоря я не нашёл ещё ни одного решения этой проблемы....
>Ну так сказать довольно просто. Но честно говоря я не нашёл ещё
>ни одного решения этой проблемы....Ты меня зацепил --- найду способ 7 дня . иначе фа-диез+ буду.
>Ты меня зацепил --- найду способ 7 дня . иначе фа-диез+ буду.
>
PS системку слей плз (если ответ для Linux Kernel 2.4.18 не полезт).
Прошу прощения за 3 пьяных вопля.
Смысл в чем --- сигнатура диска не имеет прямого отношения к функциональности системы, а значит можно пропатчить ядро так, что бы в ответ давался ЛЮБАЯ сигнатура. Хэширование ее, как пароля проблемы не решает.
>Прошу прощения за 3 пьяных вопля.
>Смысл в чем --- сигнатура диска не имеет прямого отношения к функциональности
>системы, а значит можно пропатчить ядро так, что бы в ответ
>давался ЛЮБАЯ сигнатура. Хэширование ее, как пароля проблемы не решает.
Чего то я не понимаю о чём речь....
Мне надо получить в переменную серийный номер устройства который, на сколько я понимаю, прошит в устройстве (на винте).
Так вот вопрос и состоит в том как это сделать....
>Мне надо получить в переменную серийный номер устройстваДля Limux см. SerialNo=xxxxx в выводе "hdparm -i /dev/hdx", затем посмотри в исходники hdparm на предмет выдерания информции при использовании опции -i.
>>Мне надо получить в переменную серийный номер устройства
>
>Для Limux см. SerialNo=xxxxx в выводе "hdparm -i /dev/hdx", затем посмотри в
>исходники hdparm на предмет выдерания информции при использовании опции -i.
Но у меня FreBSD 4.4
>Но у меня FreBSD 4.4Для IDE дисков поможет посиск по слову serial в файлах:
/sys/sys/ata.h
/sys/i386/isa/atapi.c
/sys/dev/ata/ata-all.h
для ATA винтов функция ECh - чтение идентификатора
>Чего то я не понимаю о чём речь....Я тоже не понимаю как из непривилегированного (CPL=3 для IA32) кода, можно обращаться к железу (через порты или как) и быть при этом уверенным, что никто (из CPL=0) тебя не перехватил.
#include <stdio.h>
#include <fcntl.h>
#include <linux/hdreg.h>int main()
{
struct hd_driveid hd;
int ide;
ide=open("/dev/hda",O_RDONLY);
ioctl(ide,HDIO_GET_IDENTITY,&hd);
printf("Serial number - %s",hd.serial_no);
return 1;
}