Read hard disk serial number

Source: Internet
Author: User
# Pragma hdrstop # pragma argsused # include <tchar. h> # include <stdio. h> # include <windows. h> # include "HDD. H "const word ide_atapi_identify = 0xa1; // read the command const word ide_ata_identify = 0xec; // read the command const int disk_path_len = 128; const int disk_info_buf_len = 128; void changebyteorder (pchar szstring, ushort uscstrsize) {ushort I; char temp; for (I = 0; I <uscstrsize; I ++ = 2) {temp = szstring [I]; szst Ring [I] = szstring [I + 1]; szstring [I + 1] = temp;} DWORD getdiskmodelnumber (DWORD driver, char * modelnumber, char * sn_buf, char * fw_buf) {char sfilepath [disk_path_len]; bool result; // results flag DWORD readed; // discard results handle hdevice; word I; sprintf (sfilepath, "\\\\. \ physicaldrive % d ", driver); hdevice = createfile (sfilepath, // drive to open generic_read | generic_write, // access to th E drive file_share_read | file_share_write, // share mode null, // default security attributes open_existing, // disposition 0, // file attributes null // do not copy file attribute ); if (hdevice = invalid_handle_value) {fprintf (stderr, "createfile () error: % LD \ n", getlasterror (); Return (DWORD)-1;} getversioninparams gvopversionparams; result = deviceiocontrol (hdevice, smart_get_version, NUL L, 0, & gvopversionparams, sizeof (gvopversionparams), & readed, null); If (! Result) // fail {fprintf (stderr, "smart_get_version error: % LD \ n", getlasterror (); (void) closehandle (hdevice); Return (DWORD) -1;} If (0 = gvopversionparams. bidedevicemap) {return (DWORD)-1 ;}// ide or atapi identify cmd byte btidcmd; sendcmdinparams inparams; byte ndrive = 0; btidcmd = (gvopversionparams. bidedevicemap> ndrive & 0x10 )? Ide_atapi_identify: ide_ata_identify; // output structure byte outparams [sizeof (sendcmdoutparams) + identify_buffer_size-1]; // + 512-1 // fill in the input buffer inparams. cbuffersize = 0; // or identify_buffer_size? Inparams. irdriveregs. bfeaturesreg = read_attributes; inparams. irdriveregs. bsectorcounreg = 1; inparams. irdriveregs. bsectornumberreg = 1; inparams. irdriveregs. bcyllowreg = 0; inparams. irdriveregs. bcylhighreg = 0; inparams. irdriveregs. bdriveheadreg = (ndrive & 1 )? 0xb0: 0xa0; inparams. irdriveregs. bcommandreg = btidcmd; // inparams. bdrivenumber = ndrive; // get the attributes result = deviceiocontrol (hdevice, callback, & inparams, sizeof (sendcmdinparams)-1, outparams, sizeof (sendcmdoutparams) + callback-1, & readed, null); If (! Result) // fail {fprintf (stderr, "smart_rcv_drive_data error: % LD \ n", getlasterror (); (void) closehandle (hdevice); Return (DWORD) -1;} (void) closehandle (hdevice); idinfo * IP = (idinfo *) (sendcmdoutparams *) outparams)-> bbuffer; // get firmware numbermemset (fw_buf, 0, 8); memcpy (fw_buf, IP-> sfirmwarerev, 8); fw_buf [8] = '\ 0'; changebyteorder (fw_buf, 8 ); printf ("\ n-> firmware: % s", fw_buf); // get serial numbermemset (sn_buf, 0, 20); memcpy (sn_buf, IP-> sserialnumber, 20); sn_buf [20] = '\ 0'; changebyteorder (sn_buf, 20); printf ("\ n-> serial: % s", sn_buf ); // get model numbermemset (modelnumber, 0, 40); memcpy (modelnumber, IP-> smodelnumber, 40); modelnumber [40] = '\ 0'; changebyteorder (modelnumber, 40); printf ("\ n-> model: % s", modelnumber); Return 0;} int _ tmain (INT argc, _ tchar * argv []) {char model_buf [40 + 1], sn_buf [20 + 1], fw_buf [8 + 1]; getdiskmodelnumber (0, model_buf, sn_buf, fw_buf ); // printf ("model: % s \ nfirmware: % s \ nsn: % s", model_buf, fw_buf, sn_buf); getchar (); Return 0 ;}


HDD. h

Typedef struct _ idinfo {ushort wgenconfig; // word 0: Basic Information word ushort wnumcyls; // word 1: Number of cylinders ushort wreserved2; // word 2: retain ushort wnumheads; // word 3: ushort wreserved4; // WORD 4: retain ushort wreserved5; // word 5: retain ushort wnumsectorspertrack; // Word 6: number of sectors per track ushort wvendorunique [3]; // word 7-9: factory value: Char sserialnumber [20]; // word 10-19: Serial Number ushort wbuffertype; // word 20: buffer type ushort W Buffersize; // word 21: buffer size ushort weccsize; // word 22: ECC verification size char sfirmwarerev [8]; // word 23-26: firmware Version: Char smodelnumber [40]; // word 27-46: Internal ushort wmorevendorunique; // word 47: factory value: ushort wreserved48; // word 48: retain struct {ushort reserved1: 8; ushort DMA: 1; // 1 = Support for DMA ushort LBA: 1; // 1 = Support for LBA ushort disiordy: 1; // 1 = do not use iordy ushort iordy: 1; // 1 = Support iordy ushort softreset: 1; // 1 = required ATA Soft Start ushort overlap: 1; // 1 = Support for overlapping operations ushort queue: 1; // 1 = support command queue ushort inldma: 1; // 1 = support for cross-access DMA} wcapabilities; // word 49: general capability ushort wreserved1; // word 50: retain ushort wpiotiming; // word 51: Pio time series ushort wdmatiming; // word 52: DMA time series struct {ushort chsnumber: 1; // 1 = word 54-58 valid ushort cyclenumber: 1; // 1 = word 64-70 valid ushort unltradma: 1; // 1 = word 88 valid ushort Reserved: 13;} wfieldvalidity ;/ /Word 53: ushort wnumcurcyls; // word 54: Number of cylinders that CHS can address ushort wnumcurheads; // word 55: Number of ushort wnumcursectorspertrack; // word 56: CHS addressable number of sectors per track ushort wcursectorslow; // word 57: CHS addressable number of sectors low-level word ushort wcursectorshigh; // word 58: struct {ushort curnumber: 8; // currently, the number of read/write sectors at a time is ushort multi: 1; // 1 = multiple read/write sectors have been selected ushort reserved1: 7;} wmultsectorstuff; // word 59: multi-sector read/write setting UlO Ng dwtotalsectors; // word 60-61: Number of LBA addressable sectors ushort wsingleworddma; // word 62: single-byte DMA supports struct {ushort mode0: 1; // 1 = supported Mode 0 (4.17 Mb/s) ushort mode1: 1; // 1 = supported Mode 1 (13.3 Mb/s) ushort mode2: 1; // 1 = supported Mode 2 (16.7 Mb/s) ushort reserved1: 5; ushort mode0sel: 1; // 1 = selected mode 0 ushort mode1sel: 1; // 1 = selected mode 1 ushort mode2sel: 1; // 1 = selected mode 2 ushort reserved2: 5;} wmultiworddma; // word 63: multi-byte DMA support capabilities struct {usho RT advpoimodes: 8; // support for advanced poi mode ushort Reserved: 8;} wpiocapacity; // word 64: Advanced Pio support for ushort wminmultiworddmacycle; // word 65: minimum value of multi-byte DMA transmission cycle ushort wrecmultiworddmacycle; // word 66: Recommended Value of Multi-byte DMA transmission cycle ushort wminpionoflowcycle; // word 67: ushort wminpoiflowcycle; // word 68: ushort wreserved69 [11]; // word 69-79: retain struct {ushort reserved1: 1; ushort ATA1: 1 ;/ /1 = Support ATA-1 ushort ATA2: 1; // 1 = Support ATA-2 ushort ata3: 1; // 1 = Support ATA-3 ushort ata4: 1; // 1 = supported ATA/ATAPI-4 ushort ata5: 1; // 1 = supported ATA/ATAPI-5 ushort ata6: 1; // 1 = supported ATA/ATAPI-6 ushort ata7: 1; // 1 = supported ATA/ATAPI-7 ushort ata8: 1; // 1 = supported ATA/ATAPI-8 ushort ata9: 1; // 1 = supported ATA/ATAPI-9 ushort ata10: 1; // 1 = Support ATA/ATAPI-10 ushort ata11: 1; // 1 = Support ATA/ATAPI-11 ushort ata12: 1; // 1 = Support ATA/ATAPI-12 ushort ata13: 1; // 1 = Support ATA/ATAPI-13 ushort ata14: 1; // 1 = Support ATA/ATAPI-14 ushort reserved2: 1;} wmajorversion; // word 80: Main version ushort wminorversion; // word 81: minor version ushort wreserved82 [6]; // word 82-87: Reserved struct {ushort mode0: 1; // 1 = supported Mode 0 (16.7 Mb/s) ushort mode1: 1; // 1 = supported Mode 1 (25 Mb/s) ushort mode2: 1; // 1 = supported Mode 2 (33 Mb/s) ushort mode3: 1; // 1 = supported Mode 3 (44 Mb/s) ushort mode4: 1; // 1 = supported Mode 4 (66 Mb/s) ushort mode5: 1; // 1 = supported Mode 5 (100 Mb/s) ushort mode6: 1; // 1 = supported mode 6 (133 Mb/s) ushort mode7: 1; // 1 = supported mode 7 (166 Mb/s )??? Ushort mode0sel: 1; // 1 = selected mode 0 ushort mode1sel: 1; // 1 = selected mode 1 ushort mode2sel: 1; // 1 = selected mode 2 ushort mode3sel: 1; // 1 = selected mode 3 ushort mode4sel: 1; // 1 = selected mode 4 ushort mode5sel: 1; // 1 = selected mode 5 ushort mode6sel: 1; // 1 = selected mode 6 ushort mode7sel: 1; // 1 = selected mode 7} wultradma; // word 88: Ultra DMA support ushort wreserved89 [167]; // word 89-255} idinfo, * pidinfo;


Zookeeper

Read hard disk serial number

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.