IOCTL_LMR_DISABLE_LOCAL_BUFFERING控件代码

当从远程文件读取数据或将数据写入数据时 ,IOCTL_LMR_DISABLE_LOCAL_BUFFERING 控制代码禁用数据的本地客户端内存中缓存。 这是一个内部定义的控件代码,在公共标头中不可用。

若要执行此操作,请使用以下参数调用 DeviceIoControl 函数。

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

参数

hDevice [in]

远程文件的句柄。 若要获取此句柄,请调用 CreateFile 函数。

dwIoControlCode [in]

操作的控制代码。 对此操作使用值0x140390。

lpInBuffer

未使用,必须为 NULL

nInBufferSize [in]

输入缓冲区的大小(以字节为单位)。 必须为零。

lpOutBuffer [out]

未使用,必须为 NULL

nOutBufferSize [in]

输出缓冲区的大小(以字节为单位)。 必须为零。

lpBytesReturned [out]

指向接收输出缓冲区中存储的数据大小的变量的指针,以字节为单位。

如果输出缓冲区太小,则调用失败, GetLastError 函数将返回 ERROR_INSUFFICIENT_BUFFERlpBytesReturned 为零。

如果 lpOverlapped 参数为 NULL则 lpBytesReturned 不能为 NULL。 即使操作不返回任何输出数据并且 lpOutBuffer 参数为 NULLDeviceIoControl 也使用 lpBytesReturned。 执行此类操作后, lpBytesReturned 的值毫无意义。

如果 lpOverlapped 不是 NULL则 lpBytesReturned 可以为 NULL。 如果 lpOverlapped 不是 NULL 且操作返回数据,则在重叠的操作完成之前 ,lpBytesReturned 毫无意义。 若要检索返回的字节数,请调用 GetOverlappedResult 函数。 如果 hDevice 参数与 I/O 完成端口相关联,则可以通过调用 GetQueuedCompletionStatus 函数来检索返回的字节数。

lpOverlapped [in]

指向 重叠 结构的指针。

如果在未指定FILE_FLAG_OVERLAPPED的情况下打开 hDevice 参数,则忽略 lpOverlapped

如果使用FILE_FLAG_OVERLAPPED标志打开 hDevice,则操作将作为重叠 (异步) 操作执行。 在这种情况下, lpOverlapped 必须指向包含事件对象的句柄的有效 OVERLAPPED 结构。 否则,函数会以不可预知的方式失败。

对于重叠的操作, DeviceIoControl 会立即返回,并在操作完成后发出事件对象信号。 否则,该函数不会在操作完成或发生错误之前返回。

返回值

如果操作成功完成, DeviceIoControl 将返回非零值。

如果操作失败或挂起, DeviceIoControl 将返回零。 要获得更多的错误信息,请调用 GetLastError

备注

IOCTL_LMR_DISABLE_LOCAL_BUFFERING控件代码由系统在内部定义为0x140390,而不是在公共头文件中定义。 它由专用应用程序用于在从远程文件读取数据或将数据写入数据时禁用本地客户端内存中数据缓存。 禁用本地缓冲后,设置将保持有效状态,直到文件的所有打开句柄都关闭,重定向程序会清理其内部数据结构。

常规用途应用程序不应使用 IOCTL_LMR_DISABLE_LOCAL_BUFFERING,因为它可能导致过多的网络流量和相关的性能损失。 IOCTL_LMR_DISABLE_LOCAL_BUFFERING控制代码应仅在专用应用程序中使用,同时尝试最大程度地使用网络带宽,从而移动大量数据。 例如, CopyFileCopyFileEx 函数使用 IOCTL_LMR_DISABLE_LOCAL_BUFFERING 来提高大型文件复制性能。

IOCTL_LMR_DISABLE_LOCAL_BUFFERING 不是由本地文件系统实现的,并且错误 ERROR_INVALID_FUNCTION失败。 在远程目录句柄上发出 IOCTL_LMR_DISABLE_LOCAL_BUFFERING 控制代码将失败,错误 ERROR_NOT_SUPPORTED

另请参阅

DeviceIoControl