Bagikan melalui


FSCTL_QUERY_ALLOCATED_RANGES IOCTL (winioctl.h)

Memindai file atau aliran alternatif mencari rentang yang mungkin berisi data bukan nol. Hanya file terkompresi atau jarang yang dapat memiliki rentang nol yang diketahui oleh sistem operasi. Untuk file lain, buffer output hanya akan berisi satu entri yang berisi titik awal dan panjang yang diminta.

Untuk melakukan operasi ini, panggil fungsi DeviceIoControl dengan parameter berikut.

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
);

Keterangan

Untuk implikasi I/O yang tumpang tindih pada operasi ini, lihat bagian Keterangan deviceIoControl.

Sistem file NTFS membulatkan offset file input ke bawah ke batas yang nyaman dan panjang hingga batas yang nyaman dan kemudian mulai berjalan melalui file.

Sistem operasi tidak melacak setiap bagian dari nol (0) atau data bukan nol. Karena nol (0) sering kali merupakan datum hukum yang sempurna, itu akan menyesatkan. Sebagai gantinya, sistem melacak rentang tempat ruang disk dialokasikan. Jika tidak ada ruang disk yang dialokasikan, semua data diasumsikan nol (0). Penyimpanan yang dialokasikan dapat berisi data nol (0) atau bukan nol. Jadi semua operasi ini adalah mengembalikan informasi tentang bagian file di mana data bukan nol mungkin berada. Terserah aplikasi untuk memindai bagian file ini sesuai dengan konvensi data aplikasi.

Setiap entri dalam array output berisi offset dan panjang yang menunjukkan rentang dalam file yang mungkin berisi data bukan nol. Data nonzero yang sebenarnya, jika ada, berada di suatu tempat dalam rentang ini, dan program panggilan harus memindai lebih lanjut dalam rentang untuk menemukannya dan menentukan apakah itu benar-benar data yang valid. Beberapa instans data yang valid mungkin ada dalam rentang.

Rentang yang dialokasikan tunduk pada aturan bahwa file jarak jauh (jaringan) yang dipetakan memori dan handel terbuka ke file belum tentu koheren. Jika memori Anda memetakan file jaringan yang jarang dan menulis data bukan nol ke wilayah file yang sebelumnya tidak dialokasikan, ruang disk akan dialokasikan untuk data baru. Namun, panggilan ke FSCTL_QUERY_ALLOCATED_RANGES setelahnya tidak akan selalu mengembalikan daftar wilayah yang dialokasikan dengan benar. Untuk memastikan koherensi antara memori tampilan dan handel file, hapus data ke file dengan fungsi FlushViewOfFile .

Di Windows 8 dan Windows Server 2012, kode ini didukung oleh teknologi berikut.

Teknologi Didukung
Protokol Server Message Block (SMB) 3.0 Ya
SMB 3.0 Transparent Failover (TFO) Ya
SMB 3.0 dengan Berbagi File Peluasan Skala (SO) Ya
Sistem File Volume Bersama Kluster (CsvFS) Ya
Sistem File Tangguh (ReFS) Tidak

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Header winioctl.h (termasuk Windows.h)

Lihat juga