不確定C#,但我在C++中使用它: 嘗試使用IOCTL_DISK_SET_DISK_ATTRIBUTES
調用DeviceIoControl()
。文件句柄必須具有讀取和寫入權限。我認爲它至少需要Windows 7.它不適用於Windows 2003 x64。 Windows 8成功將磁盤脫機,然後您可以從備份中重寫該磁盤。
BOOL disk_offline(HANDLE h_file, bool enable){
DWORD bytes_returned = 0;
BOOL b_offline = 0;
if(get_size_volume_disk(h_file)){
SET_DISK_ATTRIBUTES disk_attr;
ZeroMemory(&disk_attr, sizeof(disk_attr));
disk_attr.Version = sizeof(SET_DISK_ATTRIBUTES);
disk_attr.Attributes = enable? DISK_ATTRIBUTE_OFFLINE: 0;
disk_attr.AttributesMask = DISK_ATTRIBUTE_OFFLINE;
b_offline = DeviceIoControl(h_file, IOCTL_DISK_SET_DISK_ATTRIBUTES, &disk_attr, disk_attr.Version, NULL, 0, &bytes_returned, NULL);
// Invalidates the cached partition table and re-enumerates the device.
if(!enable) BOOL b_update = DeviceIoControl(h_file, IOCTL_DISK_UPDATE_PROPERTIES, NULL, 0, NULL, 0, &bytes_returned, NULL);
}
return b_offline;
}
爲什麼不只是shell從C#執行命令行呢? –
由於多種原因,但足以說這不是一個選項。如果diskmgmt和diskpart可以做到這一點,有一種方法。我想知道那是什麼。 – Joe
@joe - diskmgmt和diskpart是gui對Windows內置的命令,它們可能使用Win32 API。考慮到他們已經有一段時間了,這不太可能。您可以通過命令行完成的任何操作。 –