FSCTL_SHRINK_VOLUME IOCTL(winioctl.h)

축소 작업을 수행하기 위해 볼륨을 준비하거나, 축소 작업을 커밋하거나, 축소 작업을 종료해야 한다는 신호를 보냅니다.

이 작업을 수행하려면 다음 매개 변수를 사용하여 DeviceIoControl 함수를 호출합니다.

BOOL DeviceIoControl(
  (HANDLE) hDevice,             // handle to device
  FSCTL_SHRINK_VOLUME,          // dwIoControlCode
  (LPVOID) lpInBuffer,          // input buffer
  nInBufferSize,                // size of input buffer    
  NULL,                         // output buffer
  O,                            // size of output buffer
  (LPDWORD) lpBytesReturned,    // number of bytes returned
  (LPOVERLAPPED) lpOverlapped   // OVERLAPPED structure
);

설명

이 제어 코드는 NTFS 및 RAW 파일 시스템에서만 지원됩니다.

축소 작업을 완료하려면 다음을 수행해야 합니다.

  1. CreateFile을 호출하여 볼륨에 대한 핸들을 엽니다.
  2. FSCTL_SHRINK_VOLUME 호출합니다. SHRINK_VOLUME_INFORMATION 구조체의 ShrinkRequestType 멤버를 ShrinkPrepare로 설정합니다. 동일한 구조체의 NewNumberOfSectors 멤버를 0으로 설정합니다. 이 호출이 성공하면 파일 시스템은 새 볼륨 길이가 끝날 때까지 클러스터를 할당하지 않습니다.
  3. 새 섹터 수를 초과하는 모든 파일에서 FSCTL_MOVE_FILE 호출하고 유효한 범위 내에서 이동합니다. 축소 작업의 영향을 받는 모든 파일을 이동할 책임이 있습니다.
  4. FSCTL_SHRINK_VOLUME 호출합니다. SHRINK_VOLUME_INFORMATION 구조체의 ShrinkRequestType 멤버를 ShrinkCommit으로 설정합니다. 동일한 구조체의 NewNumberOfSectors 멤버를 0으로 설정합니다. 새 볼륨 크기 종료 이후의 모든 파일이 이동되지 않은 경우 STATUS_ALREADY_COMMITTED (ERROR_ACCESS_DENIED)으로 호출이 실패합니다. 그렇지 않으면 파일 시스템이 축소되었습니다.
  5. IOCTL_DISK_GROW_PARTITION 호출합니다. DISK_GROW_PARTITION 구조체의 BytesToGrow 멤버를 제거할 바이트 수를 나타내는 음수로 설정합니다.

Windows 8 및 Windows Server 2012 이 코드는 다음 기술에서 지원됩니다.

기술 지원됨
SMB(서버 메시지 블록) 3.0 프로토콜 No
SMB 3.0 TFO(투명 장애 조치(failover)) No
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 No
CsvFS(클러스터 공유 볼륨 파일 시스템) 주석 참조

NTFS가 탑재된 노드에서만 지원됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
머리글 winioctl.h(Windows.h 포함)

추가 정보