2015年1月

VBScript调用WMI判断系统分区是否被BitLocker加密

rem=========== check if system partition is bitlockered
rem=========== ©tunpishuang http://tunps.com
rem=========== return 0:not locked, none-0:locked

dim emval, em, psval, ps, drv
Dim fso,sysVol
Dim outFile
Const windir = 0
Const tmpdir = 0
rem ::get system volume
arrComputers = Array(".")
Set fso = CreateObject("Scripting.FileSystemObject")
Set tfolder = fso.GetSpecialFolder(windir)
Set tTmpfolder = fso.GetSpecialFolder(tmpdir)
sysVol = Mid(tfolder, 1, 2)


For Each strComputer In arrComputers
Set objWMIService = GetObject("winmgmts:\\" & strComputer _
& "\root\CIMV2\Security\MicrosoftVolumeEncryption")

Set volumes = objWMIService.InstancesOf("Win32_EncryptableVolume")

for each volume In volumes
emval = volume.GetEncryptionMethod(em)
psval = volume.GetProtectionStatus(ps)
drv = volume.DriveLetter
if drv = sysvol then
wscript.quit em
end if
Next
Next

BCDEdit命令行增加WinPE启动项

在Windows 2000/XP/2003时代,系统采用NTLDR Boot Loader读取boot.ini文本文件的方法来读取系统启动项信息。Vista极其以后的系统采用Bootmgr读取BCD store的方式来读取启动项。BCD信息无法直接通过文本编辑器修改,因为它是一个二进制文件。我们可以通过微软自带的BCDEdit工具来修改、创建、删除启动项极其相关设置。

其实BCD文件就是一个注册表配置单元(registry hive)。可以用注册表管理器加载修改然后卸载。BCD里面的存储项用对象(objects)来分类。每一个对象的名称都是一个38位(包含'{'、'}'和四个'-')的GUID,类似于{02d8887d-7376-11e3-8968-c7419257e3c2}这样。 符号之间是32位16进制的数字。

BCD文件就是一个注册表配置单元(registry hive)

BCDEdit增加WinPE启动项命令行如下:

bcdedit.exe /create {GUID_RO} /device
bcdedit.exe /set {GUID_RO} ramdisksdidevice partition=c:
bcdedit.exe /set {GUID_RO} ramdisksdipath \tunps.com\boot.sdi

bcdedit.exe /create {GUID} /d "WinPE for tunps.com" /application OSLOADER
bcdedit.exe /set {GUID} device ramdisk=[c:]\tunps.com\winpe.wim,{GUID_RO}
bcdedit.exe /set {GUID} osdevice ramdisk=[c:]\tunps.com\winpe.wim,{GUID_RO}
bcdedit.exe /set {GUID} systemroot \windows
bcdedit.exe /set {GUID} detecthal yes
bcdedit.exe /set {GUID} winpe yes
bcdedit.exe /ems {GUID} OFF
bcdedit.exe /displayorder {GUID} /addlast
bcdedit.exe /default {GUID}
bcdedit.exe /timeout 10

首先需要创建一个ramdiskoptions的一个device,您可以直接/create {ramdiskoptions},但是{ramdiskoptions}一个bcd store里面只有一个,如果本机需要多个WinPE启动项就不适用了,所以建议使用/devcice。另外不知道是不是Windows的一个Bug,设置了ramdiskoptions的description之后,启动项将会变为ramdiskoptions的description,而不是启动项的description。所以建议不要设置ramdiskoptions的description

请将上面的{GUID_RO}和{GUID}设置为您需要的GUID识别符。如果没有,可以使用Windows SDK或者是Visual Studio自带的guidgen.exe工具生成的随机GUID。

删除的方法如下:

bcdedit.exe /delete {GUID_RO} /f 
bcdedit.exe /delete {GUID} /f

关于具体bcdedit的参数解释参见BCDedit_reff.docx

批处理判断指定文件是否存在

@echo off
rem search specified file for debugging
set "FileName=tunps.com.tag"
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
if exist %%a:\nul (
rem for /f "delims=" %%b in ('dir /a-d /b "%%a:\%FileName%"') do (
for /f "delims=" %%b in ('dir /a-d /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%b" equ "%FileName%" (
Set "varFound=1"
)
)
)
)

if "%varFound%"=="1" goto FoundDebugTag else goto NotFoundDebugTag

:NotFoundDebugTag
"%programfiles(x86)%\app.exe"
goto Q

:FoundDebugTag
cmd.exe
goto Q

:Q

以上批处理判断所有文件根目录下是否存在文件tunps.com.tag文件,如果存在运行cmd.exe,如果不存在运行app.exe。

右键菜单SignTool快速签名

Windows Registry Editor Version 5.00 
[HKEY_CLASSES_ROOT\exefile\shell\SIGNTOOL]
@="Sign"
[HKEY_CLASSES_ROOT\exefile\shell\SIGNTOOL\command]
@="cmd /c d:\\app\\sign\\signtool.exe sign /f D:\\app\\sign\\tunps.com.pfx /p farstone /v /t http://timestamp.comodoca.com/authenticode \"%1\" & pause"

将以上文件保存为*.reg文件,双击导入注册表,右击需要签名的exe或者dll文件选择Sign即可签名。