.版本 2
.支持库 spec
.局部变量 i, 整数型
.局部变量 文件句柄, 整数型
调试输出 (取物理磁盘个数 ())
调试输出 (读扇区 (0, 63))
.子程序 取物理磁盘个数, 整数型
.局部变量 i, 整数型
.局部变量 文件句柄, 整数型
.局部变量 总数, 整数型
总数 = 0
.计次循环首 (1024, i)
文件句柄 = CreateFile (“\\.\PhysicalDrive” + 到文本 (i - 1), 2147483648, 1, 0, 3, 0, 0) ' \\\\.\\PhysicalDrive0
.如果 (文件句柄 > 0)
CloseHandle (文件句柄)
总数 = 总数 + 1
.否则
CloseHandle (文件句柄)
跳出循环 ()
.如果结束
.计次循环尾 ()
返回 (总数)
.子程序 读扇区, 字节集, 公开
.参数 驱动器位置, 整数型, , 0为主盘
.参数 扇区号, 整数型
.局部变量 文件句柄, 整数型
.局部变量 读写结果, 逻辑型
.局部变量 数据缓冲区, 字节集, 静态
.局部变量 dwCB, 整数型
.局部变量 读写位置, 整数型
.局部变量 Q, 字节集
.局部变量 P, 整数型
.局部变量 读取到的数据, 字节集
读取到的数据 = { }
文件句柄 = CreateFile (“\\.\PhysicalDrive” + 到文本 (驱动器位置), 2147483648, 1, 0, 3, 0, 0) ' \\\\.\\PhysicalDrive0
.如果真 (文件句柄 = -1)
返回 (读取到的数据)
.如果真结束
读写位置 = SetFilePointer (文件句柄, 512 × 扇区号, 0, 0)
数据缓冲区 = 取空白字节集 (512)
读写结果 = ReadFileD (文件句柄, 数据缓冲区, 512, 取整数指针 (dwCB, dwCB, 0), 0)
读取到的数据 = 数据缓冲区
CloseHandle (文件句柄)
返回 (读取到的数据)
.子程序 写扇区, 整数型, 公开
.参数 驱动器位置, 整数型, , 0为主盘
.参数 扇区号, 整数型
.参数 欲写入数据, 字节集
.局部变量 文件句柄, 整数型
.局部变量 读写结果, 整数型
.局部变量 数据缓冲区, 字节集, 静态
.局部变量 读写位置, 整数型
.局部变量 dwCB, 整数型
文件句柄 = CreateFile (“\\.\PhysicalDrive” + 到文本 (驱动器位置), 1073741824, 1, 0, 3, 0, 0) ' \\\\.\\PhysicalDrive0
.如果真 (文件句柄 = -1)
返回 (0)
.如果真结束
读写位置 = SetFilePointer (文件句柄, 512 × 扇区号, 0, 0)
数据缓冲区 = 取空白字节集 (512)
拷贝内存_ (数据缓冲区, 到字节集 (欲写入数据), 取字节集长度 (欲写入数据))
读写结果 = WriteFile (文件句柄, 数据缓冲区, 512, 取整数指针 (dwCB, dwCB, 0), 0)
CloseHandle (文件句柄)
返回 (读写结果)