目的:了解如何使用FBWF WMI Provider configure FBWF。
目標:每一個configuration都map到FBWF 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,需要重新開機後才能生效。
FBWF的Feature
FBWF包和以下的Feature:
開放 file and directory management functions的相關API,可以撰寫自己的管理程式。
描述如何在protected volumes底下開放一些file和directory來做寫入的動作。
描述如何從overlay cache來 commit寫入的資訊到protected volumes,
和如何放棄在overlay cache的資料,使protected volumes所呈現的資訊restore到未做修改前的狀態。
描述如何更有效率的使用overlay cache。
FBWF的command
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
|
?
|
嗅出usage和help。
|
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
|
顯示所有FBWF的configuration information,包含protected volumes 的list、overlay configuration和write-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來存取和設置 FBWF,WMI的remote management capabilities也可以被使用來做remote管理 FBWF。
EWF和FBWF Providers提供以WMI objects (object-oriented model) 來map Write Filter APIs 的functionality 來設定Write Filter機制,由singleton classes 和multiple type instances所組成。當enumerating他的type(Method或Properties)時, instances就會被建立。所有的 classes被註冊在 "\\root\Microsoft\WriteFilters" namespace。
Note:
|
當使用遠端設定,使用WMI scripts 或applications 來存取root\standardcimv2\embedded 底下的WMI providers, remote clients建議設定authentication level 為PacketIntegrity 或 PacketPrivacy 。關於如何設定WMI providers的authentication,請參考Microsoft Web site。
|
以下描述providers如何在WMI hosting process內運作:
Client application連到WMI namespace並且要求FBWF Provider 註冊的types(Method或Properties)。 完成enumerating 所有的 types或經由得到一個指定的 instance,WMI 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 file的paths。
FbwfVolumeConfiguration
class 的Instances,被使用來存取每一個protected volume 的configuration settings。
FbwfPathExclusionListEntry
class 的Instances,被使用來存取protected volume 的exclusion list 的相關資訊。
FbwfCacheDetail
class 的Instances,被使用來存儲cache 被修改的信息。
FbwfMemoryConfiguration
一個singleton class,被使用來存取關於memory usage和cache threshold的資訊,也可以使用來修改memory-related 的設定。
FbwfFileSystemInformation
class 的Instances,被使用來存取file system volumes的資訊。
FBWF WMI Provider 的method和Properties
這個class 定義以下的members 的types:
Methods
這個class 定義以下的methods.
Methods
|
Description
|
新增一個file或directory到file exclusion list。
| |
將cached file寫到physical disk file。
| |
Enables 寫入保護到volume。
| |
從exclusion list移除一個file或directory。
| |
Resets一個specified file的cached view。
| |
移除一個volume的write protection和選擇性的移除exclusion list。
|
Properties
這個class 定義以下的properties.
Property
|
Data type
|
Qualifiers
|
Description
|
Enabled
|
Boolean
|
[Read]
|
假如FBW在current session是active,就傳回true ,否則傳回 false。
|
NextEnabled
|
Boolean
|
[Read, Write]
|
指定是否FBWF在next session 為active。
|
Powershell使用WMI Provider設定FBWF
Sample1、如何enable fbwf
1、使用fbwfmgr在command prompt查看fbwf原本的狀態,得知原本為disable:
2、使用fbwf wmi provider來enable fbwf
l 取得fbwf class
$nextsession = Get-WmiObject –class fbwf –Namespace "root\microsoft\writefilters"
l 設定next session啟動fbwf(設定fbwf的properties)。
$nextsession.NextEnabled = 1
l 儲存設定值(fbwf的properties))
$nextsession.Put()
Note:查看fbwf原本的狀態,得知原本為disable(enabled為current session,NextEnabled為next session)。
3、使用fbwfmgr在command prompt查看fbwf的狀態,得知next session將啟動fbwf。
4、重新開機後,使用fbwfmgr在command prompt查看fbwf的狀態,得知已經啟動fbwf。
Sample2、設定保護的volume
ProtectVolume Method
Fbwf.ProtectVolume WMI method 的語法、members和examples如下:
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"
以下為enable一個FBWF-protected 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: ")
Note:volume可以為"c:"或"\Device\HarddiskVolume1"
4、重新開機後,使用fbwfmgr在command prompt查看fbwf的狀態,得知已經啟動保護C碟了。
Sample3、使用powershell script file
總結以上的samp1、sampl2,將其寫成一個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 provider來enable 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
3、使用fbwfmgr在command prompt查看fbwf的狀態,得知next session將啟動和保護"c:"
4、重新開機後,使用fbwfmgr在command prompt查看fbwf的狀態,得知已經啟動和保護C碟了。
沒有留言:
張貼留言