Fungsi Wow64DisableWow64FsRedirection (wow64apiset.h)

Menonaktifkan pengalihan sistem file untuk utas panggilan. Pengalihan sistem file diaktifkan secara default.

Sintaks

BOOL Wow64DisableWow64FsRedirection(
  [out] PVOID *OldValue
);

Parameter

[out] OldValue

Nilai pengalihan sistem file WOW64. Sistem menggunakan parameter ini untuk menyimpan informasi yang diperlukan untuk mengembalikan (mengaktifkan kembali) pengalihan sistem file.

Catatan Nilai ini hanya untuk penggunaan sistem. Untuk menghindari perilaku yang tidak dapat diprediksi, jangan ubah nilai ini dengan cara apa pun.
 

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan adalah nilai bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Fungsi ini berguna untuk aplikasi 32-bit yang ingin mendapatkan akses ke direktori sistem32 asli. Secara default, pengalihan sistem file WOW64 diaktifkan.

Pasangan fungsi Wow64DisableWow64FsRedirection/Wow64RevertWow64FsRedirection adalah pengganti fungsionalitas fungsi Wow64EnableWow64FsRedirection .

Untuk memulihkan pengalihan sistem file, panggil fungsi Wow64RevertWow64FsRedirection . Setiap panggilan yang berhasil ke fungsi Wow64DisableWow64FsRedirection harus memiliki panggilan yang cocok ke fungsi Wow64RevertWow64FsRedirection . Ini akan memastikan pengalihan diaktifkan kembali dan membebaskan sumber daya sistem terkait.

Catatan Fungsi Wow64DisableWow64FsRedirection memengaruhi semua operasi file yang dilakukan oleh utas saat ini, yang dapat memiliki konsekuensi yang tidak diinginkan jika pengalihan sistem file dinonaktifkan untuk jangka waktu apa pun. Misalnya, pemuatan DLL tergantung pada pengalihan sistem file, sehingga menonaktifkan pengalihan sistem file akan menyebabkan pemuatan DLL gagal. Selain itu, banyak implementasi fitur menggunakan pemuatan tertunda dan akan gagal saat pengalihan dinonaktifkan. Status kegagalan operasi penundaan-beban awal tetap ada, sehingga setiap penggunaan fungsi tunda-muatan berikutnya akan gagal bahkan setelah pengalihan sistem file diaktifkan kembali. Untuk menghindari masalah ini, nonaktifkan pengalihan sistem file segera sebelum panggilan ke fungsi I/O file tertentu (seperti CreateFile) yang tidak boleh dialihkan, dan aktifkan kembali pengalihan sistem file segera setelah itu menggunakan Wow64RevertWow64FsRedirection.
 
Menonaktifkan pengalihan sistem file hanya memengaruhi operasi yang dibuat oleh utas saat ini. Beberapa fungsi, seperti CreateProcessAsUser, melakukan pekerjaan mereka pada utas lain, yang tidak terpengaruh oleh status pengalihan sistem file di utas panggilan.

Di Windows 8 dan Windows Server 2012, fungsi ini didukung oleh teknologi berikut.

Teknologi Didukung
Protokol Server Message Block (SMB) 3.0 Tidak
SMB 3.0 Transparent Failover (TFO) Tidak
SMB 3.0 dengan Scale-out File Shares (SO) Tidak
Sistem File Volume Bersama Kluster (CsvFS) Ya
Sistem File Tangguh (ReFS) Tidak
 

Contoh

Contoh berikut menggunakan Wow64DisableWow64FsRedirection untuk menonaktifkan pengalihan sistem file sehingga aplikasi 32-bit yang berjalan di WOW64 dapat membuka versi 64-bit Notepad.exe di %SystemRoot%\System32 alih-alih dialihkan ke versi 32-bit di %SystemRoot%\SysWOW64.

#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
    }
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista, Windows XP Professional x64 Edition [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008, Windows Server 2003 dengan SP1 [hanya aplikasi desktop]
Target Platform Windows
Header wow64apiset.h (termasuk Windows.h)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

Fungsi Manajemen File

Pengalih Sistem File

Wow64EnableWow64FsRedirection

Wow64RevertWow64FsRedirection