VC获取硬盘序列号
来源:互联网 发布:php ftp上传大文件 编辑:程序博客网 时间:2024/05/16 03:15
转载自: http://blog.163.com/jinfd@126/blog/static/6233227720133218314327/
博主写的很认真,建议大家看原博客
#include "stdafx.h"#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0501#endif#include <windows.h>#include <winioctl.h>//BOOL GetPhyDriveSerial(LPTSTR pModelNo, LPTSTR pSerialNo);void ToLittleEndian(PUSHORT pWords, int nFirstIndex, int nLastIndex, LPTSTR pBuf);void TrimStart(LPTSTR pBuf);int _tmain(int argc, _TCHAR* argv[]){ TCHAR szModelNo[48], szSerialNo[24]; if(GetPhyDriveSerial(szModelNo, szSerialNo)) { _tprintf(_T(" : 0 1 2\n")); _tprintf(_T(" : 012345678901234567890123456789\n")); _tprintf(_T("Model No: %s\n"), szModelNo); _tprintf(_T("Serial No: %s\n"), szSerialNo); TrimStart(szSerialNo); _tprintf(_T("Serial No: %s\n"), szSerialNo); } else { _tprintf(_T("Failed.\n")); } getchar(); return 0;}//// Model Number: 40 ASCII Chars// SerialNumber: 20 ASCII Chars//BOOL GetPhyDriveSerial(LPTSTR pModelNo, LPTSTR pSerialNo){ //-1是因为 SENDCMDOUTPARAMS 的结尾是 BYTE bBuffer[1]; BYTE IdentifyResult[sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1]; DWORD dwBytesReturned; GETVERSIONINPARAMS get_version; SENDCMDINPARAMS send_cmd = { 0 }; HANDLE hFile = CreateFile(_T("\\\\.\\PHYSICALDRIVE0"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if(hFile == INVALID_HANDLE_VALUE) return FALSE; //get version DeviceIoControl(hFile, SMART_GET_VERSION, NULL, 0, &get_version, sizeof(get_version), &dwBytesReturned, NULL); //identify device send_cmd.irDriveRegs.bCommandReg = (get_version.bIDEDeviceMap & 0x10)? ATAPI_ID_CMD : ID_CMD; DeviceIoControl(hFile, SMART_RCV_DRIVE_DATA, &send_cmd, sizeof(SENDCMDINPARAMS) - 1, IdentifyResult, sizeof(IdentifyResult), &dwBytesReturned, NULL); CloseHandle(hFile); //adjust the byte order PUSHORT pWords = (USHORT*)(((SENDCMDOUTPARAMS*)IdentifyResult)->bBuffer); ToLittleEndian(pWords, 27, 46, pModelNo); ToLittleEndian(pWords, 10, 19, pSerialNo); return TRUE;}//把WORD数组调整字节序为little-endian,并滤除字符串结尾的空格。void ToLittleEndian(PUSHORT pWords, int nFirstIndex, int nLastIndex, LPTSTR pBuf){ int index; LPTSTR pDest = pBuf; for(index = nFirstIndex; index <= nLastIndex; ++index) { pDest[0] = pWords[index] >> 8; pDest[1] = pWords[index] & 0xFF; pDest += 2; } *pDest = 0; //trim space at the endof string; 0x20: _T(' ') --pDest; while(*pDest == 0x20) { *pDest = 0; --pDest; }}//滤除字符串起始位置的空格void TrimStart(LPTSTR pBuf){ if(*pBuf != 0x20) return; LPTSTR pDest = pBuf; LPTSTR pSrc = pBuf + 1; while(*pSrc == 0x20) ++pSrc; while(*pSrc) { *pDest = *pSrc; ++pDest; ++pSrc; } *pDest = 0;}
0 0
- VC获取硬盘序列号
- VC获取硬盘序列号
- VC获取硬盘序列号
- 获取硬盘序列号(VC)
- VC获取硬盘物理序列号
- vc获取硬盘物理序列号
- VC 之获取硬盘序列号
- VC获取硬盘序列号 网卡 cpuid bios
- VC获取硬盘序列号 网卡 cpuid bios
- VC++ 获取硬盘序列号源码(XP适用)
- VC++获取网卡MAC、硬盘序列号、CPU ID、BIOS编号
- VC++获取网卡MAC、硬盘序列号、CPU ID、BIOS编号
- VC++获取网卡MAC、硬盘序列号、CPU ID、BIOS编号
- C#获取硬盘序列号
- 获取硬盘序列号
- 获取硬盘序列号
- 获取硬盘物理序列号
- 获取硬盘相应序列号
- 快速排序的非递归实现
- libvirt安装流程
- Java内存泄露的理解与解决
- 数据恢复
- ubuntu 14.04简单运行vsftpd
- VC获取硬盘序列号
- 图解TCP-IP协议
- webservice-demo
- 软件智力题
- java快速排序QuickSort的代码和使用(包含清晰完成过程)
- C++ 虚函数表解析
- php验证手机归属地
- solrcloud学习记录
- IT忍者神龟之jquery easyui DataGrid 实例,增、删、查、改基础功能