2014年7月28日 星期一

POSReady7使用Powershell with FBWF WMI Provider管理FBWF


目的:了解如何使用FBWF WMI Provider configure FBWF
目標:每一個configurationmapFBWF WMI Provider,最後使用一個script來設定必須configuration

FBWF簡介
有一些embedded devices不想也不需要寫入資料,FBWF提供一個保護機制,當有寫入的動作要寫入被保護的Disk(volumes),所有的寫入動作將被轉向而被寫到RAM cache(被稱為overlay),而不會寫到被保護的Disk(volumes)
針對FBWF,做以下簡單的簡介:
FBWF是操作在file level
FBWF 將寫入動作從新導向RAM cache
RAM cache被稱為overlay
FBWF只使用RAM overlay
Enable FBWF,需要重新開機後才能生效。


FBWFFeature
FBWF包和以下的Feature
開放 file and directory management functions的相關API,可以撰寫自己的管理程式。
描述如何在protected volumes底下開放一些filedirectory來做寫入的動作。
描述如何從overlay cache commit寫入的資訊到protected volumes
和如何放棄在overlay cache的資料,使protected volumes所呈現的資訊restore到未做修改前的狀態。
描述如何更有效率的使用overlay cache


FBWFcommand
Command-line方式的FBWF Manager可以更快速的管理 FBWF (File-Based Write Filter) FBWF Manager 主要是在design-time的階段來使用,但是也可以在run time階段使用它來設定FBWF
The FBWF Manager command-line syntax follows:
fbwfmgr  [ /? | /help /[switch] | /displayconfig |
 /overlaydetail | /enable | /disable | /addvolume [volumename] |
 /removevolume [volumename] [1|0] |
 /addexclusion [volumename] [file or directory path] |
 /removeexclusion [volumename] [file or directory path] |
 /setthreshold [threshold] | /setcompression [1|0] |
 /setpreallocation [1|0] | /commit [volumename] [file path] |
 /restore [volumename] [file path] | /setsizedisplay [1|0] |
 /getvirtualsize [volumename] | /getactualsize [volumename]
The following table describes the command-line switches.
Switch
Description
?
嗅出usagehelp
addexclusion
新增一個開放寫入的write-through的路徑 ,重新開機後才會生效。
volumename
Volume的名稱可以為 drive letter (, C)device name ( \Device\Harddiskvolume) 或是 volume GUID path(\\?\Volume{GUID}\)GUID ( globally unique identifier) 是用來定義 volume(\\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\)
addvolume
新增一個volume來做保護,重新開機後才會生效。
commit
Commits 修改的資料到保護的volume
Volume的名稱可以為 drive letter (, C)device name ( \Device\Harddiskvolume) 或是 volume GUID path(\\?\Volume{GUID}\)GUID ( globally unique identifier) 是用來定義 volume(\\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\)
disable
Disables write filter的功能,重新開機後才會生效。
displayconfig
顯示所有FBWFconfiguration information,包含protected volumes listoverlay configurationwrite-through paths
enable
Enables write filter的功能,重新開機後才會生效。
getactualsize
顯示 actual volume disk size information.
getvirtualsize
顯示 virtual volume disk size information.
help / [switch]
顯示關於 FBWF Manager switch help information
overlaydetail
顯示the current overlay contents (for all protected volumes)
removeexclusion
exclusion list消除一個write-through path,重新開機後才會生效。
removevolume
protected volume list刪除保護的volume
restore
放一對file的修改,, files的內容還原。
Notice that the volume 必須是被保護的,否則會看到以下的error訊息:"The system cannot find the drive specified."
setcompression
設定overlay的內容需不需要compression(壓縮)enabled (1) or disabled (0),重新開機後才會生效。
setpreallocation
設定cache是否為pre-allocation enabled (1) or disabled (0,重新開機後才會生效。
setsizedisplay
設定 size display mode virtual (1) actual (0) ,重新開機後才會生效。
setthreshold
設定 overlay threshold value的大小,,重新開機後才會生效。為overlay threshold,是以MB為單位。

FBWF WMI Provider簡介
Powershell with WMI
The File-Based Write Filter (FBWF) WMI Provider支援在run-time 時經由FBWF API來存取和設置 FBWFWMIremote management capabilities也可以被使用來做remote管理 FBWF
EWFFBWF Providers提供以WMI objects (object-oriented model) map Write Filter APIs functionality 來設定Write Filter機制,由singleton classes multiple type instances所組成。當enumerating他的type(MethodProperties)時, instances就會被建立。所有的 classes被註冊在 "\\root\Microsoft\WriteFilters" namespace

JJ980507.note(en-us,WinEmbedded.81).gifNote:
當使用遠端設定,使用WMI scripts applications 來存取root\standardcimv2\embedded 底下的WMI providersremote clients建議設定authentication level PacketIntegrity PacketPrivacy 。關於如何設定WMI providersauthentication,請參考Microsoft Web site

以下描述一個WMI architecture Write Filter Providers如何在其內運作的overview


以下描述providers如何在WMI hosting process內運作:

Client application連到WMI namespace並且要求FBWF Provider 註冊的types(MethodProperties)。 完成enumerating 所有的 types或經由得到一個指定的 instanceWMI service會要求WMI hosting proces呼叫 provider library來執行request和呼叫native API
Write Filter Providers有限制的允許一般的users 存取Write Filter APIs read-only functionality of th,當在遠端要修改write filter configurations 和呼叫Write Filter Providers 就需要administrator permissions 的權限。

The FBWF Provider 包含以下的classes:
Fbwf
一個singleton class,用來做一般的FBWF操作,如disabling enabling filter,設定cache threshold和新增或移除 exclusion filepaths
FbwfVolumeConfiguration
class Instances,被使用來存取每一個protected volume configuration settings
FbwfPathExclusionListEntry
class Instances,被使用來存取protected volume exclusion list 的相關資訊。
FbwfCacheDetail
class Instances,被使用來存儲cache 被修改的信息。
FbwfMemoryConfiguration
一個singleton class,被使用來存取關於memory usagecache threshold的資訊,也可以使用來修改memory-related 的設定。
FbwfFileSystemInformation
class Instances,被使用來存取file system volumes的資訊。

以下描述FBWF Provider classes和他們的relationships


FBWF WMI Provider methodProperties
這個class 定義以下的members types
Methods
這個class 定義以下的methods.
Methods
Description
新增一個filedirectoryfile exclusion list
cached file寫到physical disk file
Enables 寫入保護到volume
exclusion list移除一個filedirectory
Resets一個specified filecached view
移除一個volumewrite protection和選擇性的移除exclusion list

Properties
這個class 定義以下的properties.
Property
Data type
Qualifiers
Description
Enabled
Boolean
[Read]
假如FBWcurrent sessionactive,就傳回true ,否則傳回 false
NextEnabled
Boolean
[Read, Write]
指定是否FBWFnext session active


Powershell使用WMI Provider設定FBWF
Sample1、如何enable fbwf

1、使用fbwfmgrcommand prompt查看fbwf原本的狀態,得知原本為disable


2、使用fbwf wmi providerenable fbwf
l   取得fbwf class
$nextsession = Get-WmiObject –class fbwf –Namespace "root\microsoft\writefilters"


l   設定next session啟動fbwf(設定fbwfproperties)
$nextsession.NextEnabled = 1


l   儲存設定值(fbwfproperties))
$nextsession.Put()


Note:查看fbwf原本的狀態,得知原本為disable(enabledcurrent sessionNextEnablednext session)



3、使用fbwfmgrcommand prompt查看fbwf的狀態,得知next session將啟動fbwf



4、重新開機後,使用fbwfmgrcommand prompt查看fbwf的狀態,得知已經啟動fbwf



Sample2、設定保護的volume
ProtectVolume Method
Fbwf.ProtectVolume WMI method 的語法、membersexamples如下:
This method enables File-Based Write Filter (FBWF) protection for a specific volume.

uint32 ProtectVolume(
  [in]  string Name
);

Name
[in] enable write filtering volume名稱,名稱可以為 drive letter 或是device name
Examples: "C:", "\Device\Harddiskvolume1"

Returns an HRESULT that 說明BWF API librariesWMI status WMI error error

以下為enable一個FBWF-protected volume的操作。

1、使用fbwfmgrcommand prompt查看fbwf的狀態,得知原本沒有壽保後的volume



2、使用fbwf wmi provider來加入保護的volume
l   取得fbwf class
$fbwfObjService = Get-WmiObject –class fbwf –Namespace "root\microsoft\writefilters" -list


或是下以下的command
$fbwfObjService = [WmiClass]"\\$ComputerName\ROOT\Microsoft\WriteFilters:fbwf"
note$ComputerName="localhost"option選項


l   設定保護的volume
$fbwfObjService.ProtectVolume("c: ")


Notevolume可以為"c:""\Device\HarddiskVolume1"

3、使用fbwfmgrcommand prompt查看fbwf的狀態,得知next session將啟動保護"c:"



4、重新開機後,使用fbwfmgrcommand prompt查看fbwf的狀態,得知已經啟動保護C碟了。



Sample3、使用powershell script file
總結以上的samp1sampl2,將其寫成一個powershell script file如下。

1、將以下的powershell script file存成fbwf.ps1
$ComputerName = "localhost"   ### or "remote-machine-name"
$Namespace = "root\microsoft\writefilters"
$Class = "Fbwf"
$Volume = "c:"

######使用fbwf wmi providerenable fbwf
$nextsession = Get-WmiObject -class $Class -Namespace $Namespace
$nextsession.NextEnabled = 1
$nextsession.Put()

######設定保護的volume
$fbwfObjService = Get-WmiObject -class $Class -Namespace $Namespace -list
$Result = $fbwfObjService.ProtectVolume($Volume)

######顯示回傳值
$ReturnValue = "0x{0:x}" -f $Result.ReturnValue
Write-Host "Method executed with return code: " $ReturnValue

2、在powershell console上執行該.ps1檔。



3、使用fbwfmgrcommand prompt查看fbwf的狀態,得知next session將啟動和保護"c:"



4、重新開機後,使用fbwfmgrcommand prompt查看fbwf的狀態,得知已經啟動和保護C碟了。



沒有留言:

張貼留言