IOCTL_LMR_DISABLE_LOCAL_BUFFERING código de control

El código de control de IOCTL_LMR_DISABLE_LOCAL_BUFFERING deshabilita el almacenamiento en caché local del lado cliente en memoria de los datos al leer o escribir datos en un archivo remoto. Se trata de un código de control definido internamente que no está disponible en un encabezado público.

A pesar de la convención de nomenclatura, este código de control se define con un tipo de dispositivo de FILE_DEVICE_NETWORK_FILE_SYSTEM, por lo que es un código de control del sistema de archivos (FSCTL) en lugar de un código de control de E/S de dispositivo (IOCTL). Debe enviarlo mediante NtFsControlFile en lugar de DeviceIoControl. El código de control y los parámetros se documentan a continuación mediante la convención DeviceIoControl como referencia.

BOOL DeviceIoControl(
  (HANDLE) hDevice,             // handle to device
  IOCTL_LMR_DISABLE_LOCAL_BUFFERING, // dwIoControlCode
  (LPVOID) NULL,                // lpInBuffer
  (DWORD) 0,                    // nInBufferSize
  (LPVOID) NULL,                // lpOutBuffer
  (DWORD) 0,                    // nOutBufferSize
  (LPDWORD) lpBytesReturned,    // number of bytes returned
  (LPOVERLAPPED) lpOverlapped   // OVERLAPPED structure
);

Parameters

hDevice [in]

Identificador del archivo remoto. Para obtener este identificador, llame a la función CreateFile .

dwIoControlCode [in]

Código de control de la operación. Use el valor 0x140390 para esta operación.

lpInBuffer

No se usa, debe ser NULL.

nInBufferSize [in]

Tamaño del búfer de entrada, en bytes. Debe ser cero.

lpOutBuffer [out]

No se usa, debe ser NULL.

nOutBufferSize [in]

Tamaño del búfer de salida, en bytes. Debe ser cero.

lpBytesReturned [out]

Puntero a una variable que recibe el tamaño de los datos almacenados en el búfer de salida, en bytes.

Si el búfer de salida es demasiado pequeño, se produce un error en la llamada, la función GetLastError devuelve ERROR_INSUFFICIENT_BUFFER y lpBytesReturned es cero.

Si el parámetro lpOverlapped es NULL, lpBytesReturned no puede ser NULL. Incluso cuando una operación no devuelve datos de salida y el parámetro lpOutBuffer es NULL, DeviceIoControl usa lpBytesReturned. Después de esta operación, el valor de lpBytesReturned no tiene sentido.

Si lpOverlapped no es NULL, lpBytesReturned puede ser NULL. Si lpOverlapped no es NULL y la operación devuelve datos, lpBytesReturned no tiene sentido hasta que se haya completado la operación superpuesta. Para recuperar el número de bytes devueltos, llame a la función GetOverlappedResult . Si el parámetro hDevice está asociado a un puerto de finalización de E/S, puede recuperar el número de bytes devueltos llamando a la función GetQueuedCompletionStatus .

lpOverlapped [in]

Puntero a una estructura SUPERPUESTA .

Si se abrió el parámetro hDevice sin especificar FILE_FLAG_OVERLAPPED, lpOverlapped se omite.

Si hDevice se abrió con la marca FILE_FLAG_OVERLAPPED , la operación se realiza como una operación superpuesta (asincrónica). En este caso, lpOverlapped debe apuntar a una estructura SUPERPUESTA válida que contenga un identificador para un objeto de evento. De lo contrario, se produce un error en la función de maneras impredecibles.

Para las operaciones superpuestas, DeviceIoControl devuelve inmediatamente y el objeto de evento se señala cuando se ha completado la operación. De lo contrario, la función no devuelve hasta que se haya completado la operación o hasta que se produzca un error.

Valor devuelto

Llamar a DeviceIoControl con este código de control siempre devolverá un error porque es un FSCTL, no un IOCTL. Use NtFsControlFile en su lugar. NtFsControlFile devuelve un valor NTSTATUS ; STATUS_SUCCESS indica que la operación se completó correctamente.

Remarks

El sistema define internamente el código de control IOCTL_LMR_DISABLE_LOCAL_BUFFERING como 0x140390 y no en un archivo de encabezado público. Las aplicaciones de propósito especial lo usan para deshabilitar el almacenamiento en caché local del lado cliente en memoria de los datos al leer o escribir datos en un archivo remoto. Una vez deshabilitado el almacenamiento en búfer local, la configuración permanece en vigor hasta que se cierran todos los identificadores abiertos en el archivo y el redirector limpia sus estructuras de datos internas.

Las aplicaciones de uso general no deben usar IOCTL_LMR_DISABLE_LOCAL_BUFFERING, ya que puede provocar un tráfico de red excesivo y una pérdida de rendimiento asociada. El código de control de IOCTL_LMR_DISABLE_LOCAL_BUFFERING solo debe usarse en aplicaciones especializadas que mueven grandes cantidades de datos a través de la red al intentar maximizar el uso del ancho de banda de red. Por ejemplo, las funciones CopyFile y CopyFileEx usan IOCTL_LMR_DISABLE_LOCAL_BUFFERING para mejorar el rendimiento de la copia de archivos de gran tamaño.

los sistemas de archivos locales no implementan IOCTL_LMR_DISABLE_LOCAL_BUFFERING y producirán un error ERROR_INVALID_FUNCTION. Al emitir el código de control de IOCTL_LMR_DISABLE_LOCAL_BUFFERING en los identificadores de directorio remoto, se producirá un error ERROR_NOT_SUPPORTED.

Consulte también

NtFsControlFile

DeviceIoControl