Newsgroup: it.comp.lang.c++
Titolo: Come Leggere numero seriale hard disk o scheda madre?

Ciao a tutti,
vorrei sapere come leggere il numero serial dell'hard disk da programma o
eventualmente il numero seriale della scheda madre.
Ringrazio in anticipo chi mi vorrà rispondere.
Agostino

 
Secondo te tutto questo ha a che fare con il c++ ?
Il c++ standard non prevede nemmeno l'esistenza di dischi più o meno 
hard o di schede con qualche relazione di parentela.
Se volesi sapere come fare in c++ un programma per controllare la 
temperatura del mio tostapane, secondo te è meglio che chieda in un 
newsgroup di c++ o di tostapani ?

 newsgroup di c++ o di tostapani ?
Se vuoi fare il coglione ... meglio che lo fai su questo ng o su uno di
di coglioni?
Scusami per il paragone ma non sopporto l'arroganza.
Quella che è stata fatta è una domanda e si devono postare le risposte se
ritenute interessanti e non penso che si possa ritenere interessante o
almeno coerente la tua.
A me la domanda sembra perfettamente coerente con questo ng, anzi sono
curioso di sapere se esiste una risposta a questa domanda.
Grazie in anticipo, MArio.

 curioso di sapere se esiste una risposta a questa domanda.
No, non esiste. Non solo non esiste la risposta, ma la domanda è
senseless.
Azathot

 ha scritto nel messaggio
news:pan.2003.01.26....@hell.com...


 Agostino
Ciao Agostino,
a te come ad altri a volte si dice che il problema e' OT, non per
cattiveria.
Anche io posto dei messaggi OT e mi cospargo il capo di cenere.
Il fatto e' che questa e' una domanda che non dipende dal fatto che tu
voglia risolvere il problema in C++.
Questa cosa potrebbe essere risolta in qualsiasi linguaggio, dall'assembly,
dal C o dal C++ o tanti altri.
Per risolvere questo problema pero', bisogna vedere in che ambiente sei.
Se sei su Dos, su Windows, su Linux, sul Mac ecc..
Per questo che in questo newsgroup si e' OT quando non si parla di C++
standard, altrimenti qualsiasi problema sarebbe risolvibile col C++
dipendente dalla piattaforma sul quale lo si vuole risolvere.
Si rimane sul discorso del C++ standard perche' cosi' tutti hanno la
soluzione standard per risolvere i problemi.
Nel tuo caso non esiste soluzione standard, perche' dipende dall'hardware,
dal bios, dall'OS e via dicendo.
Magari mi dirai che usi le MFC cosi' ci sara' una soluzione con queste, ma
poi hai Windows XP che non ti permette di accedere a basso livello, solo
previo uso di opportuni drivers.
Come vedi ci sono tante dipendenze che non devono esserci nel C++ standard,
il quale non e' nemmeno capace di scrivere un pixel sullo schermo!
Non possiamo parlare di seriali, parallele, grafica, network, threads,
sockets, dll, drivers e tante altre cose che dipendono troppo da hardware e
sistemi operativi.
Forse ti conviene postare su it.comp.programmare e forse nel caso di una
soluzione su windows su it.comp.programmare.win32
Altrimenti su newsgroups piu' specializzati che non so dirti.
Maurus

 sono curioso di sapere se esiste una risposta a questa domanda.
Il manifesto di questo NG è qui:
http://www.news.nic.it/manif/it.comp.lang.c++.txt
Traine le debite conclusioni
--
Gerolamo

 > Premetto che sono un programmatore Delphi e che ho avuto la necessità di


 Agostino
Ciao Agostino,
dipende ancora una volta dal compilatore che usi e dal tuo sistema
operativo.
Anche usassi un compilatore che ti permette l'inclusione di un file header
(dos.h) che ti da' modo di utilizzare queste FP (macro), non e' detto che il
tuo sistema operativo (dipende da quale window hai) ti faccia accedere a
basso livello alle risorse di cui hai bisogno.
Comunque eccoti la spiegazione che da MSDN:
PRB: C2106 Using FP_SEG() and FP_OFF(), Header File Missing
SYMPTOMS
An attempt to use the FP_SEG() or FP_OFF() macros fails and the compiler
generates:
   error C2106: ' = ' : left operand must be l-value
CAUSE
The application uses _FP_SEG() or _FP_OFF as an l-value, but does not
#include the DOS.H header file.
When the source code does not include the DOS.H header file, the compiler
treats FP_SEG() and FP_OFF() as function calls instead of macro definitions.
The C2106 error occurs because a function is not an lvalue.
RESOLUTION
Modify the source code to #include the DOS.H header file
In sostanza stai cercando di usare queste macro senza includere "dos.h" che
NON E' STANDARD, per cui non e' detto che il tuo compilatore lo abbia.
Ed inoltre queste macro ti danno modo di trovare l'offset e il segmento
dell'indirizzo a cui vuoi accedere, e questa e' la vecchia gestione dos
degli indirizzi, per cui anche se riuscissi a compilare ed eseguire il tuo
programma su un SO Windows non penso che funzionerebbe, a meno che non lo
esegui su un sistema DOS, avendolo compilato a 16 bits.
In alternativa dovrai usare le API di windows e magari i drivers, per cui
non so ancora in quale newsgroup andare a parte it.comp.programmare e
it.comp.programmare.win32.
(E fra parentesi nemmeno so se stai usando Mac o Linux !)
Ecco perche' qui siamo anni luce OT
Maurus

 > FP_OFF sconosciuti. Forse è perchè non esistono in C++ ma solo in C?


 curioso di sapere se esiste una risposta a questa domanda.
La domanda originale non ha assolutamente niente a che fare con questo
newsgroup, che si occupa di C++ standard e non di meccanismi specifici
di particolari piattaforme. E' quindi corretto segnalare la cosa
all'OP ed e' *meglio* non fornire risposte, per non abituare i pigri
(e magari non e' il caso dell'OP stesso) che tanto qui le risposte le
si ottiene comunque.
Posso concordare sul fatto che la cosa possa essere  (=vada) segnalata
in modo piu' cortese. Non per questo meno fermo.
Ciao,
Nicola


A questo punto penso che il tuo compilatore pur avendo il fuori standard
header "dos.h", non ha in qualche modo le macro:
#define FP_SEG(fp) (*((unsigned *)&(fp) + 1))
#define FP_OFF(fp) (*((unsigned *)&(fp)))
Prova a copiare queste 2 righe li' dove ti da' l'errore il compilatore sopra
la funzione get_disk_serial  per vedere se ci saranno altri problemi.
Maurus

io ho usato questa api di windows 
BOOL GetVolumeInformation(
    LPCTSTR lpRootPathName,	// address of root directory of the
file system 
    LPTSTR lpVolumeNameBuffer,	// address of name of the volume 
    DWORD nVolumeNameSize,	// length of lpVolumeNameBuffer 
    LPDWORD lpVolumeSerialNumber,	// address of volume serial
number 
    LPDWORD lpMaximumComponentLength,	// address of system's maximum
filename length
    LPDWORD lpFileSystemFlags,	// address of file system flags 
    LPTSTR lpFileSystemNameBuffer,	// address of name of file
system 
    DWORD nFileSystemNameSize 	// length of lpFileSystemNameBuffer 
   );
cerca nell'help del compilatore oppure in internet per spiegazioni piu
dettagliate
ciao
