FSCTL_QUERY_ALLOCATED_RANGES IOCTL (winioctl.h)
Examina un archivo o un flujo alternativo en busca de rangos que puedan contener datos distintos de cero. Solo los archivos comprimidos o dispersos pueden tener intervalos ceros conocidos por el sistema operativo. Para otros archivos, el búfer de salida contendrá solo una entrada que contenga el punto inicial y la longitud solicitada.
Para realizar esta operación, llame a la función DeviceIoControl con los siguientes parámetros.
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
);
Comentarios
Para conocer las implicaciones de la E/S superpuesta en esta operación, consulte la sección Comentarios de DeviceIoControl.
El sistema de archivos NTFS redondea el desplazamiento del archivo de entrada hasta un límite conveniente y la longitud hasta un límite conveniente y, a continuación, comienza a recorrer el archivo.
El sistema operativo no realiza un seguimiento de cada fragmento de datos cero (0) o distinto de cero. Dado que cero (0) suele ser un dato perfectamente legal, sería engañoso. En su lugar, el sistema realiza un seguimiento de los intervalos en los que se asigna espacio en disco. Cuando no se asigna espacio en disco, se supone que todos los datos son cero (0). El almacenamiento asignado puede contener cero (0) o datos distintos de cero. Por lo tanto, toda esta operación devuelve información sobre las partes del archivo donde se pueden encontrar datos distintos de cero. Es necesario que la aplicación examine estas partes del archivo de acuerdo con las convenciones de datos de la aplicación.
Cada entrada de la matriz de salida contiene un desplazamiento y una longitud que indica un intervalo en el archivo que puede contener datos distintos de cero. Los datos reales distintos de cero, si existen, están en algún lugar dentro de este intervalo y el programa de llamada debe examinar más dentro del intervalo para localizarlos y determinar si realmente son datos válidos. Pueden existir varias instancias de datos válidos dentro del intervalo.
Los intervalos asignados están sujetos a la regla de que un archivo remoto (red) asignado a memoria y un identificador abierto al archivo no son necesariamente coherentes. Si la memoria asignó un archivo de red disperso y escribió datos distintos de cero en regiones no asignadas previamente del archivo, se asignaría espacio en disco para los nuevos datos. Sin embargo, una llamada a FSCTL_QUERY_ALLOCATED_RANGES después no devolvería necesariamente una lista correcta de regiones asignadas. Para garantizar la coherencia entre la memoria de vista y el identificador de archivo, vacíe los datos en el archivo con la función FlushViewOfFile .
En Windows 8 y Windows Server 2012, este código es compatible con las siguientes tecnologías.
Tecnología | Compatible |
---|---|
Protocolo Bloque de mensajes del servidor (SMB) 3.0 | Sí |
Conmutación por error transparente (TFO) de SMB 3.0 | Sí |
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO) | Sí |
Sistema de archivos de Volumen compartido de clúster (CsvFS) | Sí |
Sistema de archivos resistente a errores (ReFS) | No |
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Encabezado | winioctl.h (incluye Windows.h) |