void ChangeByteOrder(LPSTR lpString, int nLen)
{ CHAR c; // 63 63 72 75 6E 2E 63 6F 6D for(int i = 0; i < nLen; i += 2) { c = lpString[i]; lpString[i] = lpString[i+1]; lpString[i+1] = c; } } //获取硬盘序列号 VOID GetDiskNum(HWND hWnd) { CHAR szDiskNum[40]={0}; SENDCMDINPARAMS scip = { 0 }; CHAR szBuffer[sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE] = { 0 }; DWORD dwBytesRet = 0; HANDLE hDevice=INVALID_HANDLE_VALUE; hDevice = CreateFileW(L"\\\\.\\PhysicalDrive0",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0); if(hDevice == INVALID_HANDLE_VALUE) { return; } scip.cBufferSize = IDENTIFY_BUFFER_SIZE; scip.irDriveRegs.bSectorCountReg = 1; scip.irDriveRegs.bSectorNumberReg = 1; scip.irDriveRegs.bDriveHeadReg = IDE_ATAPI_IDENTIFY; scip.irDriveRegs.bCommandReg = IDE_ATA_IDENTIFY; if(DeviceIoControl(hDevice, DFP_RECEIVE_DRIVE_DATA, &scip, sizeof(SENDCMDINPARAMS) - 1, szBuffer, sizeof(szBuffer), &dwBytesRet, NULL)) { PSENDCMDOUTPARAMS pOut = (PSENDCMDOUTPARAMS)szBuffer; PIDSECTOR pIdSec = (PIDSECTOR)(pOut->bBuffer); ChangeByteOrder(pIdSec->sSerialNumber, sizeof(pIdSec->sSerialNumber)); strncpy(szDiskNum, pIdSec->sSerialNumber, 20); } SetDlgItemTextA(hWnd,IDC_STATIC_DISKNUM,szDiskNum); return; } |
分类:
底层
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具