Compartir a través de


IOCTL_LMR_DISABLE_LOCAL_BUFFERING código de control

El código de control IOCTL_LMR_DISABLE_LOCAL_BUFFERING deshabilita el almacenamiento en caché en memoria del lado cliente local 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.

Para realizar esta operación, llame a la función DeviceIoControl con los parámetros siguientes.

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

Parámetros

hDevice [in]

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

dwIoControlCode [in]

Código de control para 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

Si la operación se completa correctamente, DeviceIoControl devuelve un valor distinto de cero.

Si se produce un error en la operación o está pendiente, DeviceIoControl devuelve cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

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 la usan para deshabilitar el almacenamiento en caché en memoria del lado cliente local 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 vigente 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 muevan 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 el error ERROR_INVALID_FUNCTION. La emisión del código de control de IOCTL_LMR_DISABLE_LOCAL_BUFFERING en los identificadores de directorio remoto producirá el error ERROR_NOT_SUPPORTED.

Consulte también

DeviceIoControl