Wow64DisableWow64FsRedirection 函式 (wow64apiset.h)
停用呼叫線程的文件系統重新導向。 預設會啟用檔案系統重新導向。
語法
BOOL Wow64DisableWow64FsRedirection(
[out] PVOID *OldValue
);
參數
[out] OldValue
WOW64 檔案系統重新導向值。 系統會使用此參數來儲存還原 (重新啟用) 檔案系統重新導向所需的資訊。
注意 此值僅供系統使用。 若要避免無法預期的行為,請勿以任何方式修改此值。
傳回值
如果函式成功,則傳回值是非零值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
此函式適用於想要取得原生 system32 目錄存取權的 32 位應用程式。 根據預設,會啟用 WOW64 檔案系統重新導向。
Wow64DisableWow64FsRedirection/Wow64RevertWow64FsRedirection 函式配對是 Wow64EnableWow64FsRedirection 函式功能的取代專案。
若要還原文件系統重新導向,請呼叫 Wow64RevertWow64FsRedirection 函式 。 對 Wow64DisableWow64FsRedirection 函式的每個成功呼叫都必須具有 Wow64RevertWow64FsRedirection 函式的相符呼叫。 這可確保重新導向已啟用,並釋放相關聯的系統資源。
注意Wow64DisableWow64FsRedirection 函式會影響目前線程執行的所有檔案作業,如果文件系統重新導向已停用任何時間,可能會產生非預期的結果。 例如,DLL 載入取決於檔案系統重新導向,因此停用檔案系統重新導向會導致 DLL 載入失敗。 此外,許多功能實作都會使用延遲載入,而且會在重新導向停用時失敗。 會保存初始延遲載入作業的失敗狀態,因此即使重新啟用檔案系統重新導向,後續使用延遲載入函式也會失敗。 若要避免這些問題,請在呼叫特定檔案 I/O 函式之前立即停用文件系統重新導向 (,例如無法重新導向的 CreateFile) ,然後使用 Wow64RevertWow64FsRedirection 立即重新啟用文件系統重新導向。
在 Windows 8 和 Windows Server 2012 中,下列技術支援此函式。
技術 | 支援 |
---|---|
伺服器消息塊 (SMB) 3.0 通訊協定 | No |
SMB 3.0 透明故障轉移 (TFO) | No |
具有向外延展檔案共用的SMB 3.0 (SO) | No |
叢集共用磁碟區文件系統 (CsvFS) | Yes |
彈性檔案系統 (ReFS) | 否 |
範例
下列範例使用 Wow64DisableWow64FsRedirection 停用文件系統重新導向,讓在 WOW64 下執行的 32 位應用程式可以開啟 %SystemRoot%\System32 中 64 位版本的 Notepad.exe,而不是重新導向至 %SystemRoot%\SysWOW64 中的 32 位版本。
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
#define _WIN32_WINNT 0x0501
#ifdef NTDDI_VERSION
#undef NTDDI_VERSION
#endif
#define NTDDI_VERSION 0x05010000
#include <Windows.h>
void main()
{
HANDLE hFile = INVALID_HANDLE_VALUE;
PVOID OldValue = NULL;
// Disable redirection immediately prior to the native API
// function call.
if( Wow64DisableWow64FsRedirection(&OldValue) )
{
// Any function calls in this block of code should be as concise
// and as simple as possible to avoid unintended results.
hFile = CreateFile(TEXT("C:\\Windows\\System32\\Notepad.exe"),
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
// Immediately re-enable redirection. Note that any resources
// associated with OldValue are cleaned up by this call.
if ( FALSE == Wow64RevertWow64FsRedirection(OldValue) )
{
// Failure to re-enable redirection should be considered
// a critical failure and execution aborted.
return;
}
}
// The handle, if valid, now can be used as usual, and without
// leaving redirection disabled.
if( INVALID_HANDLE_VALUE != hFile )
{
// Use the file handle
}
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista、Windows XP Professional x64 Edition [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008、Windows Server 2003 SP1 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | wow64apiset.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |