プログラムはファイルをsystem 32フォルダにコピーします

1513 ワード

前提条件:プログラムが正常に動作するにはsysドライバをsystems/drivesにコピーする必要があります.
  • 64ビットプログラム
  •  File.Copy(pLocalFilePath, pSaveFilePath + "\\**.sys", true);
  • 32ビットプログラム①32ビットシステムでは、上のコードが正常にコピーされます②64ビットシステムでは、上のコードがC:WindowsSysWOW 64driversにファイルをコピーします.32ビットと64ビットを区別するため、システム32にアクセスするとsyswow 64にパスがリダイレクトされます.リダイレクトを無効にすると、ファイルを正しい場所にコピーできます.
  • [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
    [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
    
    IntPtr Wow64value = IntPtr.Zero;
    Wow64DisableWow64FsRedirection(ref Wow64value);
    File.Copy(pLocalFilePath, pSaveFilePath + "\\**.sys", true);
    Wow64RevertWow64FsRedirection(Wow64value);

    Microsoftの公式リファレンスドキュメントのアドレス:https://msdn.microsoft.com/en-us/library/aa365743%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396