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);

猜你喜欢

转载自blog.csdn.net/u010281829/article/details/80500278