URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4982
[ Назад ]

Исходное сообщение
"привязка к железу"

Отправлено greenetc , 27-Дек-05 20:07 
подскажите , как привязать программу к аппартному обеспечению? если можно на примерах (как прочитать констрольную сумму биоса, серийник материнской платы, ID жесткого диска ... и т.д.)

Содержание

Сообщения в этом обсуждении
"привязка к железу"
Отправлено Hordi , 27-Дек-05 21:50 
Это серийник винта. Требуются права root

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <linux/hdreg.h>

int main()
{

    struct hd_driveid ide;
    int hda, sect;
    char sector[512];
    hda=open("/dev/hda",O_RDONLY);
    if(!hda) {
    perror("hda");
    }

    sect=open("mbr",O_CREAT|O_RDWR,0600);
    if(!sect) {
    perror("sect");
    }
    
    if(ioctl(hda,HDIO_GET_IDENTITY,&ide)) perror ("HDIO_GET_IDENTITY");
    
    static u_long dma=1, io32set=1, mult=16;
    if(ioctl(hda,HDIO_SET_32BIT,io32set)) perror("HDIO_SET_32BIT");
    if(ioctl(hda,HDIO_SET_DMA,dma)) perror("HDIO_SET_DMA");
    if(ioctl(hda,HDIO_SET_MULTCOUNT,mult)) perror("HDIO_SET_MULTCOUNT");
    
    printf("Serial number - %s\n",ide.serial_no);
    printf("Model - %s\n",ide.model);
    printf("Logic blocks - %d\n",ide.lba_capacity);
    
    read(hda,sector,sizeof(sector));
    write(sect,sector,sizeof(sector));

    close(hda);
    close(sect);

    return (0);
}


"привязка к железу"
Отправлено chip , 27-Дек-05 22:49 
>Это серийник винта. Требуются права root

>    if(ioctl(hda,HDIO_SET_32BIT,io32set)) perror("HDIO_SET_32BIT");
>    if(ioctl(hda,HDIO_SET_DMA,dma)) perror("HDIO_SET_DMA");
>    if(ioctl(hda,HDIO_SET_MULTCOUNT,mult)) perror("HDIO_SET_MULTCOUNT");

И смысл данных манипуляций для __получения__ серийника винта?


"привязка к железу"
Отправлено Bob , 28-Дек-05 01:55 
>>Это серийник винта. Требуются права root
>
>>    if(ioctl(hda,HDIO_SET_32BIT,io32set)) perror("HDIO_SET_32BIT");
>>    if(ioctl(hda,HDIO_SET_DMA,dma)) perror("HDIO_SET_DMA");
>>    if(ioctl(hda,HDIO_SET_MULTCOUNT,mult)) perror("HDIO_SET_MULTCOUNT");
>
>И смысл данных манипуляций для __получения__ серийника винта?


Для получения серийника они не нужны.



"привязка к железу"
Отправлено Hordi , 28-Дек-05 09:59 
>>>    if(ioctl(hda,HDIO_SET_32BIT,io32set)) perror("HDIO_SET_32BIT");
>>>    if(ioctl(hda,HDIO_SET_DMA,dma)) perror("HDIO_SET_DMA");
>>>    if(ioctl(hda,HDIO_SET_MULTCOUNT,mult)) perror("HDIO_SET_MULTCOUNT");
>>
>>И смысл данных манипуляций для __получения__ серийника винта?
>
>
>Для получения серийника они не нужны.

Да это понятно - просто кусок кода из примера выдрал.


"привязка к железу"
Отправлено greenetc , 28-Дек-05 18:05 
>Это серийник винта. Требуются права root
>
>#include <stdio.h>
>#include <fcntl.h>
>#include <unistd.h>
>#include <sys/types.h>
>#include <errno.h>
>#include <linux/hdreg.h>
>
>int main()
>{
>
>    struct hd_driveid ide;
>    int hda, sect;
>    char sector[512];
>    hda=open("/dev/hda",O_RDONLY);
>    if(!hda) {
> perror("hda");
>    }
>
>    sect=open("mbr",O_CREAT|O_RDWR,0600);
>    if(!sect) {
> perror("sect");
>    }
>
>    if(ioctl(hda,HDIO_GET_IDENTITY,&ide)) perror ("HDIO_GET_IDENTITY");
>
>    static u_long dma=1, io32set=1, mult=16;
>    if(ioctl(hda,HDIO_SET_32BIT,io32set)) perror("HDIO_SET_32BIT");
>    if(ioctl(hda,HDIO_SET_DMA,dma)) perror("HDIO_SET_DMA");
>    if(ioctl(hda,HDIO_SET_MULTCOUNT,mult)) perror("HDIO_SET_MULTCOUNT");
>
>    printf("Serial number - %s\n",ide.serial_no);
>    printf("Model - %s\n",ide.model);
>    printf("Logic blocks - %d\n",ide.lba_capacity);
>
>    read(hda,sector,sizeof(sector));
>    write(sect,sector,sizeof(sector));
>
>    close(hda);
>    close(sect);
>
>    return (0);
>}


спасибище.
А к серийник материнской платы как прочитать? Нет там случайно примеров ?