次の方法で共有


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_BUFFERを返し、 lpBytesReturned は 0 です。

lpOverlapped パラメーターが NULL の場合、lpBytesReturnedNULL にすることはできません。 操作が出力データを返せず、 lpOutBuffer パラメーターが NULL の場合でも、 DeviceIoControllpBytesReturned を使用します。 このような操作の後、 lpBytesReturned の値は意味がありません。

lpOverlappedNULL でない場合は、lpBytesReturnedNULL を指定できます。 lpOverlappedNULL ではなく、操作がデータを返す場合、重複する操作が完了するまで lpBytesReturned は意味がありません。 返されるバイト数を取得するには、 GetOverlappedResult 関数を呼び出します。 hDevice パラメーターが I/O 完了ポートに関連付けられている場合は、GetQueuedCompletionStatus 関数を呼び出すことによって返されるバイト数を取得できます。

lpOverlapped [in]

OVERLAPPED 構造体へのポインター。

FILE_FLAG_OVERLAPPEDを指定せずに hDevice パラメーターを開いた場合、lpOverlapped は無視されます。

hDeviceFILE_FLAG_OVERLAPPED フラグで開かれた場合、操作は重複 (非同期) 操作として実行されます。 この場合、 lpOverlapped は、イベント オブジェクトへのハンドルを含む有効な OVERLAPPED 構造体を指す必要があります。 それ以外の場合、関数は予期しない方法で失敗します。

重複する操作の場合、 DeviceIoControl はすぐに返され、操作が完了するとイベント オブジェクトが通知されます。 それ以外の場合、関数は操作が完了するまで、またはエラーが発生するまで戻りません。

戻り値

操作が正常に完了すると、 DeviceIoControl は 0 以外の値を返します。

操作が失敗するか、保留中の場合、 DeviceIoControl は 0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

注釈

IOCTL_LMR_DISABLE_LOCAL_BUFFERING制御コードは、パブリック ヘッダー ファイルではなく、0x140390としてシステムによって内部的に定義されます。 これは、リモート ファイルからのデータの読み取りまたはリモート ファイルへのデータの書き込み時に、データのローカル クライアント側のメモリ内キャッシュを無効にするために、特殊な用途のアプリケーションで使用されます。 ローカル バッファリングが無効になった後、ファイルに対して開いているすべてのハンドルが閉じられ、リダイレクターがその内部データ構造をクリーンアップするまで、設定は有効なままになります。

汎用アプリケーションでは、ネットワーク トラフィックが過剰になり、パフォーマンスが低下する可能性があるため、 IOCTL_LMR_DISABLE_LOCAL_BUFFERINGを使用しないでください。 IOCTL_LMR_DISABLE_LOCAL_BUFFERING制御コードは、ネットワーク帯域幅の最大限の使用を試みながら、ネットワーク経由で大量のデータを移動する特殊なアプリケーションでのみ使用する必要があります。 たとえば、CopyFile 関数と CopyFileEx 関数は、IOCTL_LMR_DISABLE_LOCAL_BUFFERINGを使用して大きなファイル コピーのパフォーマンスを向上させます。

IOCTL_LMR_DISABLE_LOCAL_BUFFERING はローカル ファイル システムによって実装されず、エラー ERROR_INVALID_FUNCTIONで失敗します。 リモート ディレクトリ ハンドルで IOCTL_LMR_DISABLE_LOCAL_BUFFERING 制御コードを発行すると、エラー ERROR_NOT_SUPPORTEDで失敗します。

こちらもご覧ください

DeviceIoControl