磁盤聯機有兩種方法,一種是使用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);
附上磁盤聯機部分的核心代碼:
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);