C++ 实现磁盘联机

xiaoxiao2021-03-01  33

磁盘联机有两种方法,一种是使用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);
转载请注明原文地址: https://www.6miu.com/read-3650277.html

最新回复(0)