C++ 實現磁盤聯機

磁盤聯機有兩種方法,一種是使用diskpart工具的online disk命令,一種是使用WMI的Online方法,後者僅對Server 2012及以上系統可用。

1. C++ 調用diskpart的方法,可參閱 我的博客:C++ 修改磁盤san策略 

在磁盤聯機模塊核心的地方 差不多就是:

string s = "select disk ";
s += pIndex;
ret = WriteFile(hChildStdinWr, s.c_str(),s.size()+1, &dwWritten, NULL);
ret = WriteFile(hChildStdinWr, "online disk",sizeof("online disk"), &dwWritten, NULL);

2. WMI的方法,如何利用C++寫WMI的方法不再贅述, 可參閱我的博客:WMI 獲取操作系統版本號 
關於獲取磁盤唯一標識ID的方法,連接ROOT\Microsoft\Windows\Storage 命名空間,輸入WQL語句SELECT * FROM MSFT_Disk,然後會出來一個磁盤的list,可以根據磁盤的Number屬性跟需要聯機磁盤index做比較,一致的即爲我們需要的磁盤,而我們需要的id是磁盤的ObjectId屬性。


附上磁盤聯機部分的核心代碼:

wchar_t msftDiskObjectID[256];
GetWMIMSFTDiskObjectId(msftDiskObjectID, index);

BSTR MethodName = SysAllocString(L"Online");
CComPtr< IWbemClassObject > pOutParams = NULL;
hr = service->ExecMethod(msftDiskObjectID, MethodName, 0, NULL, NULL, &pOutParams, NULL);
if (FAILED(hr))
{
	SysFreeString(MethodName);
	return -1;
}
SysFreeString(MethodName);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章