IOCTL_DISK_GET_DRIVE_GEOMETRY: 获取磁盘参数

c++实现:

#include <Windows.h>
#include <winioctl.h>
#include <stdio.h> int main()
{
HANDLE hDev = CreateFile("\\\\.\\G:",
GENERIC_READ,
FILE_SHARE_READ,
0,
OPEN_EXISTING,
0,
0); if (hDev != INVALID_HANDLE_VALUE)
{
DISK_GEOMETRY disk_geometry;
DeviceIoControl(hDev, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &disk_geometry, sizeof(disk_geometry), NULL, NULL);
printf(" 柱面数量: %d\n", disk_geometry.Cylinders); //柱面数量
printf(" 介质类型: %d\n", disk_geometry.MediaType); //介质类型
printf("每柱面磁道数: %d\n", disk_geometry.TracksPerCylinder); //每柱面磁道数
printf("每磁道扇区数: %d\n", disk_geometry.SectorsPerTrack); //每磁道扇区数
printf("每扇区字节数: %d\n", disk_geometry.BytesPerSector); //每扇区字节数 CloseHandle(hDev);
}
}

golang实现:

type DISK_GEOMETRY struct {
Cylinders int64
MediaType int32
TracksPerCylinder int32
SectorsPerTrack int32
BytesPerSector int32
} func getHdev(letter byte) int {
deviceName := "\\\\.\\" + string(letter) + ":" kernel32 := syscall.NewLazyDLL("kernel32.dll")
CreateFile := kernel32.NewProc("CreateFileA") hDev, _, _ := CreateFile.Call(BytePtr([]byte(deviceName)), uintptr(0x80000000), uintptr(1), 0, uintptr(3), 0, 0)
return int(hDev)
} func getDiskGeometry(hDev int) {
const IOCTL_DISK_GET_DRIVE_GEOMETRY = 0x70000 var read = 0
disk_geometry := DISK_GEOMETRY{} kernel32 := syscall.NewLazyDLL("kernel32.dll")
DeviceIoControl := kernel32.NewProc("DeviceIoControl") DeviceIoControl.Call(uintptr(hDev), uintptr(IOCTL_DISK_GET_DRIVE_GEOMETRY), 0, 0, uintptr(unsafe.Pointer(&disk_geometry)), 24, uintptr(unsafe.Pointer(&read)), 0)
fmt.Println(" 柱面数量:", disk_geometry.Cylinders) //柱面数量
fmt.Println(" 介质类型:", disk_geometry.MediaType) //介质类型
fmt.Println("每柱面磁道数:", disk_geometry.TracksPerCylinder) //每柱面磁道数
fmt.Println("每磁道扇区数:", disk_geometry.SectorsPerTrack) //每磁道扇区数
fmt.Println("每扇区字节数:", disk_geometry.BytesPerSector) //每扇区字节数 fmt.Println(" 总容量:", (disk_geometry.Cylinders*int64(disk_geometry.TracksPerCylinder)*int64(disk_geometry.SectorsPerTrack)*int64(disk_geometry.BytesPerSector))/1024/1024, "MB")
}

最新文章

  1. Phylab2.0 文档汇总
  2. 《DSP using MATLAB》示例Example5.13
  3. ThinkPHP系的两个东东OneThink和ThinkCMF
  4. 《信息安全系统设计基础》第一次实验报告--Linux 基础入门
  5. linux中PHP dirname(__FILE__)路径问题解决
  6. Basic MSI silent install
  7. 使用Visual Studio发布应用安装包
  8. MySQL添加外键时报错 ERROR 1215 (HY000): Cannot add foreign key constraint
  9. JVM -- 类的初始化
  10. Learning Lua Programming (4) Cocos2d-x中Lua编程(一)
  11. 【Visual C++】Windows GDI贴图闪烁解决方法
  12. linux下apache 的安装
  13. Python基础-用户验证
  14. 《Python 数据科学实践指南》读书笔记
  15. [py]python操作zookeeper
  16. js中关于声明提前的几个误区
  17. C# WebAPI系列(1)
  18. Jsp与Servlet面试题
  19. http协议下载文件
  20. MessagePack 学习笔记

热门文章

  1. iframe结构的网站按F5刷新子页面的实现方式
  2. Py西游攻关之基础数据类型(二)-列表
  3. Java编程打开运行exe程序
  4. 这两天的pwn学习总结
  5. 解题报告:luogu P1516 青蛙的约会
  6. lnmp1.5下安装mongodb
  7. 对于strlen()函数的一点小疑问
  8. IdentityServer4专题之五:OpenID Connect及其Client Credentials流程模式
  9. 通过css 居中div的几种常用方法
  10. hdu 1533 Going Home 最小费用最大流 (模板题)