社区
硬件/系统
帖子详情
vista系统下获取硬盘物理序列号的问题,急,急!!!
stefaniemarkc
2008-06-04 10:34:33
有没有朋友有关于
获取硬盘物理序列号的代码的,
在vista系统下也能正确获取的。
有的请发我邮箱,stefaniemark@163.com
谢了。。
...全文
704
6
打赏
收藏
vista系统下获取硬盘物理序列号的问题,急,急!!!
有没有朋友有关于 获取硬盘物理序列号的代码的, 在vista系统下也能正确获取的。 有的请发我邮箱,stefaniemark@163.com 谢了。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
stefaniemarkc
2008-06-04
打赏
举报
回复
各位高手 进来看看 发表下意见和建议
stefaniemarkc
2008-06-04
打赏
举报
回复
获取的操作就在这个函数里
int ReadPhysicalDriveInNTUsingSmart (void)
{
int done = FALSE;
int drive = 0;
for (drive = 0; drive < MAX_IDE_DRIVES; drive++)
{
HANDLE hPhysicalDriveIOCTL = 0;
char driveName [256];
sprintf (driveName, "\\\\.\\PhysicalDrive%d", drive);
hPhysicalDriveIOCTL = CreateFile (driveName,
GENERIC_WRITE ¦ GENERIC_READ,
FILE_SHARE_DELETE ¦ FILE_SHARE_READ ¦ FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
if (hPhysicalDriveIOCTL == INVALID_HANDLE_VALUE)
{
DWORD err = GetLastError ();
printf ("\n***ReadPhysicalDriveInNTUsingSmart*** error = %d\n", err);
}
else
{
GETVERSIONINPARAMS GetVersionParams;
DWORD cbBytesReturned = 0;
memset ((void*) & GetVersionParams, 0, sizeof(GetVersionParams));
if ( ! DeviceIoControl (hPhysicalDriveIOCTL, SMART_GET_VERSION,
NULL,
0,
&GetVersionParams, sizeof (GETVERSIONINPARAMS),
&cbBytesReturned, NULL) )
{
}
else
{
ULONG CommandSize = sizeof(SENDCMDINPARAMS) + IDENTIFY_BUFFER_SIZE;
PSENDCMDINPARAMS Command = (PSENDCMDINPARAMS) malloc (CommandSize);
#define ID_CMD 0xEC // Returns ID sector for ATA
Command -> irDriveRegs.bCommandReg = ID_CMD;
DWORD BytesReturned = 0;
if ( ! DeviceIoControl (hPhysicalDriveIOCTL,
SMART_RCV_DRIVE_DATA, Command, sizeof(SENDCMDINPARAMS),
Command, CommandSize,
&BytesReturned, NULL) )
{
}
else
{
DWORD diskdata [256];
USHORT *pIdSector = (USHORT *)
(PIDENTIFY_DATA) ((PSENDCMDOUTPARAMS) Command) -> bBuffer;
for (int ijk = 0; ijk < 256; ijk++)
diskdata [ijk] = pIdSector [ijk];
PrintIdeInfo (drive, diskdata);
done = TRUE;
}
// Done
CloseHandle (hPhysicalDriveIOCTL);
free (Command);
}
}
}
return done;
}
vista系统下首先是因为权限问题
返回的 hPhysicalDriveIOCTL == INVALID_HANDLE_VALUE
解决了权限问题后,
调用 DeviceIoControl
返回错误代码 GetLastError() = 2,功能错误
stefaniemarkc
2008-06-04
打赏
举报
回复
获取的操作就在这个函数里
int ReadPhysicalDriveInNTUsingSmart (void)
{
int done = FALSE;
int drive = 0;
for (drive = 0; drive < MAX_IDE_DRIVES; drive++)
{
HANDLE hPhysicalDriveIOCTL = 0;
char driveName [256];
sprintf (driveName, "\\\\.\\PhysicalDrive%d", drive);
// Windows NT, Windows 2000, Windows Server 2003, Vista
hPhysicalDriveIOCTL = CreateFile (driveName,
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
if (hPhysicalDriveIOCTL == INVALID_HANDLE_VALUE)
{
DWORD err = GetLastError ();
printf ("\n***ReadPhysicalDriveInNTUsingSmart*** error = %d\n", err);
}
else
{
GETVERSIONINPARAMS GetVersionParams;
DWORD cbBytesReturned = 0;
// Get the version, etc of PhysicalDrive IOCTL
memset ((void*) & GetVersionParams, 0, sizeof(GetVersionParams));
if ( ! DeviceIoControl (hPhysicalDriveIOCTL, SMART_GET_VERSION,
NULL,
0,
&GetVersionParams, sizeof (GETVERSIONINPARAMS),
&cbBytesReturned, NULL) )
{
}
else
{
// Print the SMART version
// PrintVersion (& GetVersionParams);
// Allocate the command buffer
ULONG CommandSize = sizeof(SENDCMDINPARAMS) + IDENTIFY_BUFFER_SIZE;
PSENDCMDINPARAMS Command = (PSENDCMDINPARAMS) malloc (CommandSize);
// Retrieve the IDENTIFY data
// Prepare the command
#define ID_CMD 0xEC // Returns ID sector for ATA
Command -> irDriveRegs.bCommandReg = ID_CMD;
DWORD BytesReturned = 0;
if ( ! DeviceIoControl (hPhysicalDriveIOCTL,
SMART_RCV_DRIVE_DATA, Command, sizeof(SENDCMDINPARAMS),
Command, CommandSize,
&BytesReturned, NULL) )
{
}
else
{
DWORD diskdata [256];
USHORT *pIdSector = (USHORT *)
(PIDENTIFY_DATA) ((PSENDCMDOUTPARAMS) Command) -> bBuffer;
for (int ijk = 0; ijk < 256; ijk++)
diskdata [ijk] = pIdSector [ijk];
PrintIdeInfo (drive, diskdata);
done = TRUE;
}
// Done
CloseHandle (hPhysicalDriveIOCTL);
free (Command);
}
}
}
return done;
}
vista系统下首先是因为权限问题
返回的 hPhysicalDriveIOCTL == INVALID_HANDLE_VALUE
解决了权限问题后,
调用 DeviceIoControl
返回错误代码 GetLastError() = 2,功能错误
Chivalry
2008-06-04
打赏
举报
回复
把你在其他系统能用的代码发出来
Chivalry
2008-06-04
打赏
举报
回复
看了一下msdn,DeviceIo是支持vista的
lz这样用也没有问题啊
for (drive = 0; drive < MAX_IDE_DRIVES; drive++)
{
你这是一个循环,你先去掉循环,手动式一下"\\\\.\\PhysicalDrive0","\\\\.\\PhysicalDrive1" 等等,看看都不可以么
Chivalry
2008-06-04
打赏
举报
回复
http://blog.csdn.net/bhw98/archive/2003/05/20/19663.aspx
看看这个可以不
提取
硬盘
物理
序列号
用来提取
硬盘
物理
序列号
的,兼容
vista
、win7
系统
修改
硬盘
序列号
2.使用修改
硬盘
序列号
软件可以修改
硬盘
驱动器的
序列号
(非
硬盘
物理
序列号
),
硬盘
驱动器
序列号
的格式是 XXXXXXXX(X 可以是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F)。 3. 修改
序列号
之前请关闭所有打开的...
VB得到
硬盘
物理
ID[DiskID32.Dll]可用实例
VB得到
硬盘
物理
ID,DiskID32.Dll,DiskID32.Dll使用实例,得到
硬盘
序列号
,得到
硬盘
物理
序列号
,
Vista
系统
下得到的数据不会变. 因为是别人的东西,我找到的了,本来可以不要分的,可是我的分的太少了,下载不了其它东西...
内存虚拟
硬盘
软件 Primo Ramdisk Server Edition 6.3.1 + x64 中文多语免费版.zip
Primo Ramdisk 可支持创建128个虚拟
硬盘
,每个虚拟
硬盘
可被 Windows
系统
识别为真实
物理
硬盘
或逻辑
硬盘
。虚拟
硬盘
可被格式成 Windows 支持的文件
系统
,并允许用户根据需要对文件
系统
进行自定义设置。 内存虚拟
硬盘
...
TeraCopy.Pro.v.2.27.MultiLanguage[含简体中文版][新
序列号
]
TeraCopy 2.27自带的简体中文语言文件的乱码
问题
貌似已经解决,如果有
问题
请将压缩包里的“CHS”文件夹中的“zh_Hans”文件夹复制并替代“X:\Program Files\TeraCopy\locale”目录下的同名文件夹,重新启动TeraCopy...
硬件/系统
2,640
社区成员
17,239
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章