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 為零。
如果 lpOverlapped 參數為 Null, 則 lpBytesReturned 不能是 Null。 即使作業未傳回任何輸出資料,且 lpOutBuffer 參數為 Null, DeviceIoControl 仍會使用 lpBytesReturned。 在這類作業之後, lpBytesReturned 的值是無意義的。
如果 lpOverlapped 不是 Null, 則 lpBytesReturned 可以是 Null。 如果 lpOverlapped 不是 Null ,而且作業會傳回資料,則在重迭的作業完成之前, lpBytesReturned 是無意義的。 若要擷取傳回的位元組數目,請呼叫 GetOverlappedResult 函 式。 如果 hDevice 參數與 I/O 完成埠相關聯,您可以呼叫 GetQueuedCompletionStatus 函式來擷取傳回的位元組數目。
-
lpOverlapped [in]
-
重迭結構的指標。
如果開啟 hDevice 參數但未指定 FILE_FLAG_OVERLAPPED,則會忽略 lpOverlapped 。
如果 hDevice 是以 FILE_FLAG_OVERLAPPED 旗標開啟,則會以重迭的 (非同步) 作業來執行。 在此情況下, lpOverlapped 必須指向包含事件物件控制碼的有效 OVERLAPPED 結構。 否則,函式會以無法預期的方式失敗。
針對重迭的作業, DeviceIoControl 會立即傳回,而且當作業完成時會發出事件物件的訊號。 否則,函式不會在作業完成或發生錯誤之前傳回。
傳回值
如果作業順利完成, DeviceIoControl 會傳回非零值。
如果作業失敗或擱置中, DeviceIoControl 會 傳回零。 若要取得擴充的錯誤資訊,請呼叫 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。
另請參閱