C#에 대해서는 잘 모르겠지만 C++에서는 이것을 사용하고 있습니다. DeviceIoControl()
에 IOCTL_DISK_SET_DISK_ATTRIBUTES
으로 전화 해보세요. 파일 핸들에는 읽기 및 쓰기 액세스 권한이 있어야합니다. 적어도 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;
}
왜 쉘이 C#에서 명령 줄을 실행하지 않는 것입니까? –
여러 가지 이유가 있지만 옵션이 아니라고 말하는 것은 충분합니다. diskmgmt 및 diskpart가이를 수행 할 수있는 방법이 있습니다. 나는 그 방법이 무엇인지 알고 싶다. – Joe
@joe - diskmgmt 및 diskpart는 Win32 API를 사용할 수있는 Windows에 내장 된 명령입니다. 그들이 잠시 주위에 있었을 것을 고려하면 그럴 것 같지 않습니다. 커맨드 라인을 통해 할 수있는 모든 것을 할 수 있습니다. –