|
![]() | 作者: rain_night [rain_night]
![]() |
登录 |
或者是其他机器硬件的源代码,最好是C写的。 |
地主 发表时间: 04-05-13 16:10 |
![]() | 回复: yingzike [yingzike] ![]() |
登录 |
/* ======================================= */ /* 读取硬盘内部出厂数据函数 */ /* ======================================= */ readser() { unsigned int i,j; unsigned char p; unsigned int c,h,ss,cache=0; unsigned char s[21]; unsigned char v[9]; unsigned char t[41]; i=0;j=0;p=0; clear1(); HZcprintf(208,200,2,7,"正在读硬盘数据..."); while(p!=0x40) { j++; if(j==0xffff) break; p=inportb(0x1f7); p&=0xc0; } outportb(0x3f6,0); for(i=0;i<5;i++) outportb(0x1f1+i,0); outportb(0x1f6,0xa0); outportb(0x1f7,0xec); i=0;j=0;p=0; while(p!=0x8) { j++; if(j==0xffff) break; p=inportb(0x1f7); p&=0x88; } j=inport(0x1f0); c=inport(0x1f0); j=inport(0x1f0); h=inport(0x1f0); j=inport(0x1f0); j=inport(0x1f0); ss=inport(0x1f0); for(i=0;i<3;i++) j=inport(0x1f0); for(i=0;i<11;i++) { j=inport(0x1f0); s[i*2]=(unsigned char)(j>>8); s[i*2+1]=(unsigned char)j; } cache=inport(0x1f0); cache=cache/2; j=inport(0x1f0); for(i=0;i<4;i++) { j=inport(0x1f0); v[i*2]=(unsigned char)(j>>8); v[i*2+1]=(unsigned char)j; } for(i=0;i<20;i++) { j=inport(0x1f0); t[i*2]=(unsigned char)(j>>8); t[i*2+1]=(unsigned char)j; } for(i=0;i<0xb9;i++) j=inportb(0x1f7); i&=0x71; s[20]='\0'; v[8]='\0'; t[40]='\0'; if(ss==65535&&c==65535) { HZcprintf(208,200,2,0,"正在读硬盘数据..."); HZcprintf(180,240,2,15,"注意:硬盘读错误,按任意键退出..."); getch(); } else { HZcprintf(208,200,2,0,"正在读硬盘数据..."); window(5,8,72,25); setcolor(7); line(220,165,375,165); HZcprintf(230,140,4,7,"◆查看硬盘参数"); HZcprintf(20,175,1,7,"柱面数:"); HZcprintf(20,205,1,7,"磁头数:"); HZcprintf(20,235,1,7,"扇区数:"); HZcprintf(200,205,1,7,"产品序列号:"); HZcprintf(200,175,1,7,"缓冲区容量:"); HZcprintf(200,235,1,7,"控制器版本:"); HZcprintf(20,270,1,7,"控制器类型:"); textcolor(15); gotoxy(10,5); cprintf("[%u C]",c); gotoxy(10,7); cprintf("[%u H]",h); gotoxy(10,9); cprintf("[%u S]",ss); gotoxy(42,5); cprintf("[%u K]",cache); gotoxy(42,7); cprintf("%-20s",s); gotoxy(42,9); cprintf("%-8s",v); gotoxy(13,11); cprintf("%-40s",t); getch(); } clear(); } 没事做,把以前的东东拿出来晒晒 ![]() ![]() ![]() 做做好事,不灌水 ![]() ![]() ![]() |
B1层 发表时间: 04-05-13 18:12 |
![]() | 回复: rain_night [rain_night] ![]() |
登录 |
在什么下编译的? |
B2层 发表时间: 04-05-13 18:51 |
![]() | 回复: yingzike [yingzike] ![]() |
登录 |
纯水(C)了 TC2.0 HZcprintf(230,140,4,7,"◆查看硬盘参数");是自己写的打印中文的函数,你改成其他的就行了 ![]() ![]() ![]() ![]() ![]() |
B3层 发表时间: 04-05-13 19:29 |
![]() | 回复: rain_night [rain_night] ![]() |
登录 |
恩 但我在WIN2K下执行时说不能读内存什么地址,也就是说得不到结果,怎么解决! |
B4层 发表时间: 04-05-14 17:57 |
![]() | 回复: yingzike [yingzike] ![]() |
登录 |
晕,WIN2000下,你没有权限读的。 如果在2000下读,还不如看一看DISK32,有全部源程序,可惜不是纯C 又和你的问题不一样了 ![]() ![]() ![]() |
B5层 发表时间: 04-05-17 12:51 |
![]() | 回复: 286 [unique] ![]() |
登录 |
GetVolumeInformation BOOL GetVolumeInformation( LPCTSTR lpRootPathName, // root directory LPTSTR lpVolumeNameBuffer, // volume name buffer DWORD nVolumeNameSize, // length of name buffer LPDWORD lpVolumeSerialNumber, // volume serial number LPDWORD lpMaximumComponentLength, // maximum file name length LPDWORD lpFileSystemFlags, // file system options LPTSTR lpFileSystemNameBuffer, // file system name buffer DWORD nFileSystemNameSize // length of file system name buffer ); |
B6层 发表时间: 04-05-18 09:07 |
![]() | 回复: hackgou [hackgou] ![]() |
登录 |
286兄的够精炼的, 我也来补充一段: /****************************************************************** * * * FileNma: getSerNum.cpp * * Des: 打印卷标号及相关信息,并返回对应序列号 * * cl getSerNum.cpp * * * * * * Author:HackGou Email:HackGou_AT_yeah_Dot_net * * Blog:http://hackgou.blogbus.com * ******************************************************************/ #include <windows.h> #include <iostream.h> #define VOLNAMELEN MAX_PATH #define FILESYSNAMEBUFSIZE MAX_PATH int main(int avgc,char * argn[]) { char VolumeName[VOLNAMELEN]; char FileSysNameBuf[FILESYSNAMEBUFSIZE]; DWORD dwSysFlags; DWORD VolSerNum; DWORD MaxComLen; GetVolumeInformation(argn[1], //需要检查的跟目录名称 VolumeName, //卷名称 VOLNAMELEN, //卷名称长度 &VolSerNum, //序列号 &MaxComLen, //最大的文件名长度 &dwSysFlags, //文件系统类型 FileSysNameBuf, //文件系统类型(NTFS或者FAT32) FILESYSNAMEBUFSIZE); //文件系统类型长度 cout<< "根目录: " << argn[1] << endl; cout<< "卷名: "<< VolumeName << endl; cout<< "序列号: "<< VolSerNum << endl; cout<< "支持的最大文件名长度: "<< MaxComLen<< endl; cout<< "文件系统类型: "<< FileSysNameBuf << endl; return VolSerNum; } 使用如下: D:\My Documents\PGSC\cpp>getSerNum.exe c:\ 根目录: c:\ 卷名: SYS 序列号: 811629652 支持的最大文件名长度: 255 文件系统类型: NTFS D:\My Documents\PGSC\cpp>getSerNum.exe d:\ 根目录: d:\ 卷名: DIG 序列号: 2214828414 支持的最大文件名长度: 255 文件系统类型: NTFS |
B7层 发表时间: 04-05-18 10:42 |
![]() | 回复: rain_night [rain_night] ![]() |
登录 |
yingzike:为什么我在WIN98下编译的结果全是255但同样的程序在DOS下却是正确的 答案了? 也同样谢谢下面的朋友! |
B8层 发表时间: 04-05-18 12:46 |
![]() | 回复: rain_night [rain_night] ![]() |
登录 |
iostream.h和windows.h哪有这两个头文件哦? |
B9层 发表时间: 04-05-18 13:48 |
![]() | 回复: hackgou [hackgou] ![]() |
登录 |
iostream.h 和 windows.h 是windows下C++常用的两个头文件,前者用于io,后者则定义windows常见的一些函数和结构。 在代码的注释部分有些编译的说明: cl getSerNum.cpp 也就是用命令行的VC编译器编译。 另外:GetVolumeInformation在头文件Winbase.h中声明; 但是只需include Windows.h.就可以使用了。 |
B10层 发表时间: 04-05-18 19:51 |
![]() | 回复: rain_night [rain_night] ![]() |
登录 |
但我还是没能在WINDOWS下调试成功,为什么? |
B11层 发表时间: 04-05-20 17:05 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号