首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

Java怎么读取硬盘的序列号

2012-10-07 
Java如何读取硬盘的序列号java如何读取硬盘的序列号2011-02-12 14:46以下是获取硬盘序列号,CPU?? 道理一样

Java如何读取硬盘的序列号
java如何读取硬盘的序列号2011-02-12 14:46

以下是获取硬盘序列号,CPU?? 道理一样.?
? //?? Sys.java?
? public?? class?? Sys?
? {?
? public?? static?? native?? void?? showHDSerial();?
??
? static?? {?
? System.loadLibrary("Sys");?
? }?
??
? public?? static?? void?? main(String[]?? args)?
? {?
? showHDSerial();?
? }?
? }?
??
? 1)?? 编译?
? javac?? Sys.java?
? 2)生成?? .h?? 文件?
? javah?? -jni?? Sys?
??
? 3)打开VC->文件->新建->工程->Win32?? DLL?? (这里简写了)?
? 4)写入工程名;Sys???? 创建空白工程?
? 5)将Sys.h,jni.h?? 添加到工程中(其中jni.h在[JAVA_HOME]\include?? 下).?
? 6)创建Sys.cpp?? 文件.文件内容如下:?
? //?? Sys.cpp?
??
? #include?? "jni.h"?
? #include?? <windows.h>???
? #include?? <iostream.h>???
? #include?? <stdio.h>???
??
? #define?? DFP_GET_VERSION?? 0x00074080???
? #define?? DFP_SEND_DRIVE_COMMAND?? 0x0007c084???
? #define?? DFP_RECEIVE_DRIVE_DATA?? 0x0007c088???
??
? #pragma?? pack(1)???
? typedef?? struct?? _GETVERSIONOUTPARAMS?? {???
??? BYTE?? bVersion;???? //?? Binary?? driver?? version.???
??? BYTE?? bRevision;???? //?? Binary?? driver?? revision.???
??? BYTE?? bReserved;???? //?? Not?? used.???
??? BYTE?? bIDEDeviceMap;?? //?? Bit?? map?? of?? IDE?? devices.???
??? DWORD?? fCapabilities;?? //?? Bit?? mask?? of?? driver?? capabilities.???
??? DWORD?? dwReserved[4];?? //?? For?? future?? use.???
? }?? GETVERSIONOUTPARAMS,?? *PGETVERSIONOUTPARAMS,?? *LPGETVERSIONOUTPARAMS;???
??
? typedef?? struct?? _IDEREGS?? {???
??? BYTE?? bFeaturesReg;???? //?? Used?? for?? specifying?? SMART?? "commands".???
??? BYTE?? bSectorCountReg;?? //?? IDE?? sector?? count?? register???
??? BYTE?? bSectorNumberReg;?? //?? IDE?? sector?? number?? register???
??? BYTE?? bCylLowReg;?????? //?? IDE?? low?? order?? cylinder?? value???
??? BYTE?? bCylHighReg;???? //?? IDE?? high?? order?? cylinder?? value???
??? BYTE?? bDriveHeadReg;???? //?? IDE?? drive/head?? register???
??? BYTE?? bCommandReg;???? //?? Actual?? IDE?? command.???
??? BYTE?? bReserved;?????? //?? reserved?? for?? future?? use.???? Must?? be?? zero.???
? }?? IDEREGS,?? *PIDEREGS,?? *LPIDEREGS;???
??
? typedef?? struct?? _SENDCMDINPARAMS?? {???
??? DWORD?? cBufferSize;???? //?? Buffer?? size?? in?? bytes???
??? IDEREGS?? irDriveRegs;???? //?? Structure?? with?? drive?? register?? values.???
??? BYTE?? bDriveNumber;???? //?? Physical?? drive?? number?? to?? send???
????????????????? //?? command?? to?? (0,1,2,3).???
??? BYTE?? bReserved[3];???? //?? Reserved?? for?? future?? expansion.???
??? DWORD?? dwReserved[4];???? //?? For?? future?? use.???
??? //BYTE???? bBuffer[1];?????? //?? Input?? buffer.???
? }?? SENDCMDINPARAMS,?? *PSENDCMDINPARAMS,?? *LPSENDCMDINPARAMS;???
??
? typedef?? struct?? _DRIVERSTATUS?? {???
??? BYTE?? bDriverError;???? //?? Error?? code?? from?? driver,???
????????????????? //?? or?? 0?? if?? no?? error.???
??? BYTE?? bIDEStatus;?????? //?? Contents?? of?? IDE?? Error?? register.???
????????????????? //?? Only?? valid?? when?? bDriverError???
????????????????? //?? is?? SMART_IDE_ERROR.???
??? BYTE?? bReserved[2];???? //?? Reserved?? for?? future?? expansion.???
??? DWORD?? dwReserved[2];???? //?? Reserved?? for?? future?? expansion.???
? }?? DRIVERSTATUS,?? *PDRIVERSTATUS,?? *LPDRIVERSTATUS;???
??
? typedef?? struct?? _SENDCMDOUTPARAMS?? {???
??? DWORD???????? cBufferSize;???? //?? Size?? of?? bBuffer?? in?? bytes???
??? DRIVERSTATUS?? DriverStatus;???? //?? Driver?? status?? structure.???
??? BYTE?????? bBuffer[512];?????? //?? Buffer?? of?? arbitrary?? length???
????????????????????? //?? in?? which?? to?? store?? the?? data?? read?? from?? the?? drive.???
? }?? SENDCMDOUTPARAMS,?? *PSENDCMDOUTPARAMS,?? *LPSENDCMDOUTPARAMS;???
??
? typedef?? struct?? _IDSECTOR?? {???
??? USHORT?? wGenConfig;???
??? USHORT?? wNumCyls;???
??? USHORT?? wReserved;???
??? USHORT?? wNumHeads;???
??? USHORT?? wBytesPerTrack;???
??? USHORT?? wBytesPerSector;???
??? USHORT?? wSectorsPerTrack;???
??? USHORT?? wVendorUnique[3];???
??? CHAR?? sSerialNumber[20];???
??? USHORT?? wBufferType;???
??? USHORT?? wBufferSize;???
??? USHORT?? wECCSize;???
??? CHAR?? sFirmwareRev[8];???
??? CHAR?? sModelNumber[40];???
??? USHORT?? wMoreVendorUnique;???
??? USHORT?? wDoubleWordIO;???
??? USHORT?? wCapabilities;???
??? USHORT?? wReserved1;???
??? USHORT?? wPIOTiming;???
??? USHORT?? wDMATiming;???
??? USHORT?? wBS;???
??? USHORT?? wNumCurrentCyls;???
??? USHORT?? wNumCurrentHeads;???
??? USHORT?? wNumCurrentSectorsPerTrack;???
??? ULONG?? ulCurrentSectorCapacity;???
??? USHORT?? wMultSectorStuff;???
??? ULONG?? ulTotalAddressableSectors;???
??? USHORT?? wSingleWordDMA;???
??? USHORT?? wMultiWordDMA;???
??? BYTE?? bReserved[128];???
? }?? IDSECTOR,?? *PIDSECTOR;???
??
? /*+++???
? Global?? vars???
? ---*/???
? GETVERSIONOUTPARAMS?? vers;???
? SENDCMDINPARAMS?? in;???
? SENDCMDOUTPARAMS?? out;???
? HANDLE?? h;???
? DWORD?? i;???
? BYTE?? j;???
??
??
? VOID?? ChangeByteOrder(PCHAR?? szString,?? USHORT?? uscStrSize)???
? {???
??
? USHORT?? i;???
? CHAR?? temp;???
??
??? for?? (i?? =?? 0;?? i?? <?? uscStrSize;?? i+=2)???
??? {???
????? temp?? =?? szString[i];???
????? szString[i]?? =?? szString[i+1];???
????? szString[i+1]?? =?? temp;???
??? }???
? }???
??
? void?? DetectIDE(BYTE?? bIDEDeviceMap){???
??? if?? (bIDEDeviceMap&1){???
????? if?? (bIDEDeviceMap&16){???
??????? cout<<"ATAPI?? device?? is?? attached?? to?? primary?? controller,?? drive?? 0."<<endl;???
????? }else{???
??????? cout<<"IDE?? device?? is?? attached?? to?? primary?? controller,?? drive?? 0."<<endl;???
????? }???
??? }???
??? if?? (bIDEDeviceMap&2){???
????? if?? (bIDEDeviceMap&32){???
??????? cout<<"ATAPI?? device?? is?? attached?? to?? primary?? controller,?? drive?? 1."<<endl;???
????? }else{???
??????? cout<<"IDE?? device?? is?? attached?? to?? primary?? controller,?? drive?? 1."<<endl;???
????? }???
??? }???
??? if?? (bIDEDeviceMap&4){???
????? if?? (bIDEDeviceMap&64){???
??????? cout<<"ATAPI?? device?? is?? attached?? to?? secondary?? controller,?? drive?? 0."<<endl;???
????? }else{???
??????? cout<<"IDE?? device?? is?? attached?? to?? secondary?? controller,?? drive?? 0."<<endl;???
????? }???
??? }???
??? if?? (bIDEDeviceMap&8){???
????? if?? (bIDEDeviceMap&128){???
??????? cout<<"ATAPI?? device?? is?? attached?? to?? secondary?? controller,?? drive?? 1."<<endl;???
????? }else{???
??????? cout<<"IDE?? device?? is?? attached?? to?? secondary?? controller,?? drive?? 1."<<endl;???
????? }???
??? }???
? }???
??
? void?? hdid9x(){???
??? ZeroMemory(&vers,sizeof(vers));???
??? //We?? start?? in?? 95/98/Me???
??? h=CreateFile("\\\\.\\Smartvsd",0,0,0,CREATE_NEW,0,0);???
??? if?? (!h){???
????? cout<<"open?? smartvsd.vxd?? failed"<<endl;???
????? exit(0);???
??? }???
??
??? if?? (!DeviceIoControl(h,DFP_GET_VERSION,0,0,&vers,sizeof(vers),&i,0)){???
????? cout<<"DeviceIoControl?? failed:DFP_GET_VERSION"<<endl;???
????? CloseHandle(h);???
????? return;???
??? }???
??? //If?? IDE?? identify?? command?? not?? supported,?? fails???
??? if?? (!(vers.fCapabilities&1)){???
????? cout<<"Error:?? IDE?? identify?? command?? not?? supported.";???
????? CloseHandle(h);???
????? return;???
??? }???
??? //Display?? IDE?? drive?? number?? detected???
??? DetectIDE(vers.bIDEDeviceMap);???
??? //Identify?? the?? IDE?? drives???
??? for?? (j=0;j<4;j++){???
????? PIDSECTOR?? phdinfo;???
????? char?? s[41];???
??
????? ZeroMemory(&in,sizeof(in));???
????? ZeroMemory(&out,sizeof(out));???
????? if?? (j&1){???
??????? in.irDriveRegs.bDriveHeadReg=0xb0;???
????? }else{???
??????? in.irDriveRegs.bDriveHeadReg=0xa0;???
????? }???
????? if?? (vers.fCapabilities&(16>>j)){???
??????? //We?? don't?? detect?? a?? ATAPI?? device.???
??????? cout<<"Drive?? "<<(int)(j+1)<<"?? is?? a?? ATAPI?? device,?? we?? don't?? detect?? it"<<endl;???
??????? continue;???
????? }else{???
??????? in.irDriveRegs.bCommandReg=0xec;???
????? }???
????? in.bDriveNumber=j;???
????? in.irDriveRegs.bSectorCountReg=1;???
????? in.irDriveRegs.bSectorNumberReg=1;???
????? in.cBufferSize=512;???
????? if?? (!DeviceIoControl(h,DFP_RECEIVE_DRIVE_DATA,&in,sizeof(in),&out,sizeof(out),&i,0)){???
??????? cout<<"DeviceIoControl?? failed:DFP_RECEIVE_DRIVE_DATA"<<endl;???
??????? CloseHandle(h);???
??????? return;???
????? }???
????? phdinfo=(PIDSECTOR)out.bBuffer;???
????? memcpy(s,phdinfo->sModelNumber,40);???
????? s[40]=0;???
????? ChangeByteOrder(s,40);???
????? cout<<endl<<"Module?? Number:"<<s<<endl;???
????? memcpy(s,phdinfo->sFirmwareRev,8);???
????? s[8]=0;???
????? ChangeByteOrder(s,8);???
????? cout<<"\tFirmware?? rev:"<<s<<endl;???
????? memcpy(s,phdinfo->sSerialNumber,20);???
????? s[20]=0;???
????? ChangeByteOrder(s,20);???
????? cout<<"\tSerial?? Number:"<<s<<endl;???
????? cout<<"\tCapacity:"<<phdinfo->ulTotalAddressableSectors/2/1024<<"M"<<endl<<endl;???
??? }???
??
??? //Close?? handle?? before?? quit???
??? CloseHandle(h);???
? //?? CopyRight();???
??
? }???
???

void?? hdidnt(){???
??? char?? hd[80];???
??? PIDSECTOR?? phdinfo;???
??? char?? s[41];???
??
??? ZeroMemory(&vers,sizeof(vers));???
??? //We?? start?? in?? NT/Win2000???
??? for?? (j=0;j<4;j++){???
????? sprintf(hd,"\\\\.\\PhysicalDrive%d",j);???
????? h=CreateFile(hd,GENERIC_READ|GENERIC_WRITE,???
??????? FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);???
????? if?? (!h){???
??????? continue;???
????? }???
????? if?? (!DeviceIoControl(h,DFP_GET_VERSION,0,0,&vers,sizeof(vers),&i,0)){???
??????? CloseHandle(h);???
??????? continue;???
????? }???
????? //If?? IDE?? identify?? command?? not?? supported,?? fails???
????? if?? (!(vers.fCapabilities&1)){???
??????? cout<<"Error:?? IDE?? identify?? command?? not?? supported.";???
??????? CloseHandle(h);???
??????? return;???
????? }???
????? //Identify?? the?? IDE?? drives???
????? ZeroMemory(&in,sizeof(in));???
????? ZeroMemory(&out,sizeof(out));???
????? if?? (j&1){???
??????? in.irDriveRegs.bDriveHeadReg=0xb0;???
????? }else{???
??????? in.irDriveRegs.bDriveHeadReg=0xa0;???
????? }???
????? if?? (vers.fCapabilities&(16>>j)){???
??????? //We?? don't?? detect?? a?? ATAPI?? device.???
??????? cout<<"Drive?? "<<(int)(j+1)<<"?? is?? a?? ATAPI?? device,?? we?? don't?? detect?? it"<<endl;???
??????? continue;???
????? }else{???
??????? in.irDriveRegs.bCommandReg=0xec;???
????? }???
????? in.bDriveNumber=j;???
????? in.irDriveRegs.bSectorCountReg=1;???
????? in.irDriveRegs.bSectorNumberReg=1;???
????? in.cBufferSize=512;???
????? if?? (!DeviceIoControl(h,DFP_RECEIVE_DRIVE_DATA,&in,sizeof(in),&out,sizeof(out),&i,0)){???
??????? cout<<"DeviceIoControl?? failed:DFP_RECEIVE_DRIVE_DATA"<<endl;???
??????? CloseHandle(h);???
??????? return;???
????? }???
????? phdinfo=(PIDSECTOR)out.bBuffer;???
????? memcpy(s,phdinfo->sModelNumber,40);???
????? s[40]=0;???
????? ChangeByteOrder(s,40);???
????? cout<<endl<<"Module?? Number:"<<s<<endl;???
????? memcpy(s,phdinfo->sFirmwareRev,8);???
????? s[8]=0;???
????? ChangeByteOrder(s,8);???
????? cout<<"\tFirmware?? rev:"<<s<<endl;???
????? memcpy(s,phdinfo->sSerialNumber,20);???
????? s[20]=0;???
????? ChangeByteOrder(s,20);???
????? cout<<"\tSerial?? Number:"<<s<<endl;???
????? cout<<"\tCapacity:"<<phdinfo->ulTotalAddressableSectors/2/1024<<"M"<<endl<<endl;???
????? CloseHandle(h);???
??? }???
? //?? CopyRight();???
? }???
??
? JNIEXPORT?? void?? JNICALL?? Java_Sys_showHDSerial(JNIEnv?? *env,?? jclass?? jcls)?
? {???
??? OSVERSIONINFO?? VersionInfo;???
??
??? ZeroMemory(&VersionInfo,sizeof(VersionInfo));???
??? VersionInfo.dwOSVersionInfoSize=sizeof(VersionInfo);???
??? GetVersionEx(&VersionInfo);???
??
??? switch?? (VersionInfo.dwPlatformId){???
??? case?? VER_PLATFORM_WIN32s:???
????? cout<<"Win32s?? is?? not?? supported?? by?? this?? programm."<<endl;???
????? return;???
??? case?? VER_PLATFORM_WIN32_WINDOWS:???
????? hdid9x();???
????? return;???
??? case?? VER_PLATFORM_WIN32_NT:???
????? hdidnt();???
????? return;???
??? }???
? }??

?7)新建Sys.def?? 文件,内容如下?
? EXPORTS?
????? Java_Sys_showHDSerial??
???
?编译Sys?? 工程,生成Sys.dll?
? 9)将Sys.dll?? 拷到Sys.class?? 同目录下?
? 10)运行?
? java?? Sys?
??
? 得到如下结果(本人机器)?
? F:\>java?? Sys?
??
? Module?? Number:SAMSUNG?? SP0802N?
????????????????? Firmware?? rev:TK100-28?
????????????????? Serial?? Number:???????????? S00JJ50Y418303?
????????????????? Capacity:76293M??

这个是在网上找的,先留在空间,有时间了再研究下。

热点排行