找回密码
 加入
搜索
楼主: 3mile

[AU3基础] 请教如何用纯AU3读取物理磁盘扇区--主要用于备份MBR

[复制链接]
 楼主| 发表于 2010-8-26 17:08:51 | 显示全部楼层
回复 15# C.L
的确,写硬盘是非常危险的。
但是水能载舟亦能覆舟,加上阅读权限吧。阅读权限设得高点,至少100以上。
让大家(其实是指我自己)有升级的冲动。
让我努力提高吧。
发表于 2010-8-26 17:12:09 | 显示全部楼层
本帖最后由 C.L 于 2010-8-26 17:20 编辑

回复 16# 3mile
好吧,我也觉得应该设一下阅读权限,要是不懂的人拿来乱搞,说不定会出什么事情,不过阅读权限设50好了,高级会员可以看到,毕竟能升到高级会员的,应该多少会懂得一点的

找不到设置权限,倒是有个积分限制的,那就设500积分好了,和权限50是对等的吧
发表于 2010-8-26 17:23:13 | 显示全部楼层
NB得很,看得我蛋疼…
又多了个搁置的项目…
发表于 2010-8-26 18:21:37 | 显示全部楼层
权限太大了,看不了。
发表于 2010-8-26 18:27:19 | 显示全部楼层
楼上的,你快了啊。还有30分升级。
我大概明年就能看到了。伤心啊。
如果能直接写扇区是不是可以不挂载盘符。直接读写。防止分区里面的东西中毒?
发表于 2010-8-28 14:02:38 | 显示全部楼层
回复 20# xsjtxy

如果能直接写扇区是不是可以不挂载盘符。直接读写。防止分区里面的东西中毒?

理论上是可以的,不过现在有个技术问题没有得到解决,就是大于4G的扇区指针不能正确的没置。
发表于 2010-8-28 14:31:17 | 显示全部楼层
学习一下,但无法查看。
发表于 2010-8-28 14:34:11 | 显示全部楼层
回复 22# itljl

为了安全考虑,不得不设个权限,不方便之处,请谅解
不过你的积分也差不多,加把劲就可以了,呵呵~~
发表于 2010-8-28 14:36:14 | 显示全部楼层
回复 23# C.L


    大哥,我已经很努力了,可是权限还差得远。可以再低一点吗?
需要这个代码,主要是帮一个朋友检测和备份一下他的MBR,谢谢。
发表于 2010-8-28 14:42:00 | 显示全部楼层
Func _NtSetInformationFile($hFile, $iInfoClass, $vBuffer, $iBuffer, $sBufferType = "ptr")
        Local $iResult, $tStatus, $pStatus
        $tStatus = DllStructCreate("ubyte Status[32]")
        $pStatus = DllStructGetPtr($tStatus)

        $iResult = DllCall("Ntdll.dll", "dword", "NtSetInformationFile", "handle", $hFile, _
                        "ptr", $pStatus, $sBufferType, $vBuffer, "ulong", $iBuffer, _
                        "dword", $iInfoClass)
        Return SetError($iResult[0], 0, $iResult[0] = 0)
EndFunc        ;==>_NtSetInformationFile


#include <SetupAPI.au3>

$hFile = _CM_Create_File("\\.\PhysicalDrive0", 0xC0000000, 3, 0, 3, 0)
_NtSetInformationFile($hFile, 14, 1024 * 1024 * 1024 * 7, 8, "int64*")

$pBuffer = _CM_Heap_Alloc(512)
_CM_Read_Device($hFile, $pBuffer, 512)
_CM_Close_Handle($hFile)
$tBuffer = DllStructCreate("byte Binary[512]", $pBuffer)

MsgBox(0, @Extended, DllStructGetData($tBuffer, "Binary"))
偏移7G。

评分

参与人数 1金钱 +30 贡献 +10 收起 理由
C.L + 30 + 10 很强大

查看全部评分

发表于 2010-8-28 14:45:01 | 显示全部楼层
回复 25# pusofalse


    弱弱的请教一下,这里的7G,4G指的磁盘的大小?还是文件大小?Thanks
发表于 2010-8-28 14:48:15 | 显示全部楼层
回复 26# itljl


    偏移指针,即从7G处开始读取。
发表于 2010-8-28 15:03:09 | 显示全部楼层
回复 25# pusofalse

很强大的代码,学习了,上次P版说过了这个函数,还没有空去研究,现在P版的研究成果放出来了,感谢P版。
有代码了,可得要仔细的了解一下NtSetInformationFile()这个函数的作用,呵呵~~
发表于 2010-8-28 20:35:22 | 显示全部楼层
这么高级的东西 没有权限看  郁闷  加强发帖
发表于 2010-8-28 22:31:24 | 显示全部楼层
回复 25# pusofalse

再次感谢P版,已解决4G限制的问题,经过测试,现在更改后的代码可以读取大小为500G硬盘内的任意的扇区,现在AU3理论上、技术上已经可以任意读取分区表,PBR,EBR,FAT表,$MFTMirr,$Volume等特殊文件和任何的扇区上的普通文件,应该可以算是一个突破吧~~ 呵呵~
   
代码现在还不是太成熟,暂不放出。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-28 22:34 , Processed in 0.070765 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表