有没有纯AU3方法或API方法获取当前分区是否GPT格式的思路?
近期有些需求,需要判断分区所在硬盘是GPT模式还是传统的MBR模式。在搜索本站并尝试多种方法后无果,虽然WMI的方法可以实现但在大多数WinPE环境下无法正常运行。而依赖第三方,如DiskPart,很多PE也不自带,集成又会增加空间。
我现在已有方法获取卷名和卷所在设备或所在分区的编号,请问有没有API方法或纯AU3的方法可以简而有效的获取某个分区是GPT模式还是MBR模式?
谢谢! 本帖最后由 yhjfirst 于 2016-1-7 12:41 编辑
Func _wmi_Win32_DiskPartition()
Local $colItems = ""
Local $output = ""
Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
If @error Then Exit
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskPartition", "WQL", 48)
If IsObj($colItems) Then
For $objItem In $colItems
$GPT = StringInStr($objItem.Type, "GPT")
$MBR = StringInStr($objItem.Type, "Installable")
If $GPT Then;"GPT: System GPT: 系统"
$output &= "磁盘名称: " & $objItem.Type & @CRLF & _
"引导分区: " & $objItem.Bootable & @CRLF & _
"系统分区: " & $objItem.BootPartition & @CRLF & _
'GPT分区编号: ' & $objItem.diskindex + 1 & ':' & $objItem.index + 1& @CRLF
EndIf
If $MBR Then
$output &= "磁盘名称: " & $objItem.Type & @CRLF & _
"引导分区: " & $objItem.Bootable & @CRLF & _
"系统分区: " & $objItem.BootPartition & @CRLF & _
'MBR分区编号: ' & $objItem.diskindex + 1 & ':' & $objItem.index + 1
EndIf
If MsgBox(1, "WMI输出",$output) = 2 Then ExitLoop
$output = ""
Next
EndIf
EndFunc ;==>__wmi_Win32_DiskPartition
向老大献丑了,在你论坛上偶然找到的 在2003上有可能无效,没测试,win7以上正常包括PE 回复 2# yhjfirst
这个就是WMI方法啊,亲。这方法在各种PE下无效。 本帖最后由 yhjfirst 于 2016-1-7 12:53 编辑
有效的啊,我就是在你PE下测试过可行的,我用的一直是你的PE,你的PE是开启WMI的 回复 4# skyfree
刚刚用你最新的PE测试了下,也可以的。PE默认是关闭了WMI服务,我自己在脚本里检测了服务。没开启并自动开启。然后再执行
API开启服务
Func _Winmgmt($services)
Local $QueryConfig = _Service_QueryStartType($services, @ComputerName);检测服务启动类型
If $QueryConfig > 3 Then
TrayTip("WMI服务未开启", "正在开启WMI服务中。。。。。。。。。", 0, 2)
RunWait(@ComSpec & ' /c ' & 'del %SystemRoot%\System32\wbem\Repository\*.* /f /q', @WindowsDir & '\system32', @SW_HIDE)
Local $SetStart = _Service_SetStartType($services, 2, @ComputerName);设置启动类型 2自动 3手动 4禁止 返回值1 True
Local $start = _Service_Start($services, @ComputerName);启动服务
EndIf
EndFunc ;==>_Winmgmt
强兄,可否把GPT分区的硬盘000H-1FFH的数值截图发上来看下。MBR是通过这部分内容获取,GPT不知道是不是? 回复 7# haijie1223
这段值怎么获取……? 回复 6# yhjfirst
多数PE里Winmgmt并没有什么卵用…… 回复 8# skyfree
winhex打开磁盘,从000H-1FFH段,截个图。 这是内存地址还是别的,内存地址的话没用H的只有F一下 回复 10# haijie1223
可以第三方直接读取 mbr还是gpt
输出到文本
包括分区间隙、未分区大小等 回复 12# fuldho
楼主说了,不用第三方,要纯AU3的。 回复 14# haijie1223
哦
是装不下了吧