다음을 통해 공유


FSCTL_QUERY_ALLOCATED_RANGES IOCTL(winioctl.h)

파일 또는 대체 스트림을 스캔하여 0이 아닌 데이터를 포함할 수 있는 범위를 찾습니다. 만 스파스 또는 압축 된 파일 수는 0으로 설정 운영 체제에 알려진 범위. 다른 파일의 경우 출력 버퍼에는 시작점과 요청된 길이가 포함된 단일 항목만 포함됩니다.

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

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file
  FSCTL_QUERY_ALLOCATED_RANGES,     // dwIoControlCode
  (LPVOID) lpInBuffer,              // input buffer
  (DWORD) nInBufferSize,            // size of input buffer
  (LPVOID) lpOutBuffer,             // output buffer
  (DWORD) nOutBufferSize,           // size of output buffer
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

설명

이 작업에 겹치는 I/O의 의미는 DeviceIoControl의 설명 섹션을 참조하세요.

NTFS 파일 시스템은 입력 파일 오프셋을 편리한 경계로 반올림하고 길이를 편리한 경계까지 반올림한 다음 파일을 통과하기 시작합니다.

운영 체제는 0 또는 0이 아닌 데이터의 모든 부분을 추적하지 않습니다. 0(0)은 종종 완벽하게 합법적인 데이텀이므로 오해의 소지가 있습니다. 대신 시스템은 디스크 공간이 할당된 범위를 추적합니다. 디스크 공간이 할당되지 않은 경우 모든 데이터는 0으로 간주됩니다. 할당된 스토리지는 0 또는 0이 아닌 데이터를 포함할 수 있습니다. 따라서 이 작업은 0이 아닌 데이터가 있을 수 있는 파일의 일부에 대한 정보를 반환합니다. 애플리케이션의 데이터 규칙에 따라 파일의 이러한 부분을 검사하는 것은 애플리케이션의 입니다.

출력 배열의 각 항목에는 0이 아닌 데이터를 포함할 수 있는 파일의 범위를 나타내는 오프셋과 길이가 포함됩니다. 실제 0이 아닌 데이터(있는 경우)는 이 범위 내 어딘가에 있으며 호출 프로그램은 범위 내에서 더 자세히 검사하여 해당 데이터를 찾고 실제로 유효한 데이터인지 확인해야 합니다. 유효한 데이터의 여러 인스턴스가 범위 내에 있을 수 있습니다.

할당된 범위는 메모리 매핑된 원격(네트워크) 파일과 파일에 대한 열린 핸들이 반드시 일관되지는 않다는 규칙의 적용을 받습니다. 메모리가 스파스 네트워크 파일을 매핑하고 이전에 할당되지 않은 파일 영역에 0이 아닌 데이터를 쓴 경우 디스크 공간이 새 데이터에 할당됩니다. 그러나 이후에 FSCTL_QUERY_ALLOCATED_RANGES 호출하면 할당된 지역의 올바른 목록이 반드시 반환되지는 않습니다. 뷰 메모리와 파일 핸들 간의 일관성을 보장하려면 FlushViewOfFile 함수를 사용하여 데이터를 파일로 플러시합니다.

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

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

요구 사항

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

추가 정보