#include
#include
#include
#include
#include
char *getascii(unsigned int in_data[], int off_start, int off_end);
char *getascii(unsigned int in_data[], int off_start, int off_end)
{
static char ret_val[255];
int loop, loop1;
for(loop = off_start, loop1 = 0; loop <= off_end; loop++)
{
ret_val[loop1++] = (char)(in_data[loop]/256); // Get High byte
ret_val[loop1++] = (char)(in_data[loop]%256); // Get Low byte
}
ret_val[loop1] = '\0'; // Make sure is ends in a NULL character
return(ret_val); // Return Serial Number of Physical Disk
}
void main(void)
{
unsigned int dd[256]; // DiskData
unsigned int dd_off; // DiskData offset
while(inp(0x1F7)!=0x50); // Wait for controller not busy
outp(0x1F6,0xA0); // Get first/second drive
outp(0x1F7,0xEC); // Get drive info data
while(inp(0x1F7)!=0x58); // Wait for data ready
for(dd_off = 0; dd_off != 256; dd_off++) // Read "sector"
dd[dd_off] = inpw(0x1F0);
printf("The Serial Number of Physical Disk [C] is %s", getascii(dd,10,19));
asm
{
mov ah, 4ch; // Return to DOS.
int 21h;
}
} 作者: Kinglion 时间: 2004-3-22 00:00 还有下面这个程序也可做参考:
/////////////////////////////////////////////////////////////////////////////////
// 程序名: VOLSN.C 最后整理日期: 2002.08.08 //
// //
// 程序主要功能: //
// 获得 IDE 硬盘逻辑盘 C 的卷序列号 //
// //
////////////////////////////////////////////////////////////////////////////////