在Wow64DisableWow64FsRedirection上查看Microsoft's page,我看到了一些C代码。如果你想调用这个函数并从VB.net恢复怎么办?
到目前为止,我已经这样做了:
<Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint:="Wow64DisableWow64FsRedirection")> _
Public Shared Function DisableWow64Redirection() As Boolean
End Function
我也为Revert兄弟功能做了同样的事。
我称之为:
DisableWow64Redirection()
这似乎有效,因为我调用的shell命令实际上在system32中找到了它的exe,但是我不确定Revert,它需要一个参数吗?这个Revert page似乎要我从禁用输出并将其插入恢复调用。听起来不错吗?如何更改我的DLLimport以获取布尔值并实际在Kernal32.DLL函数中使用它?
谢谢!
答案 0 :(得分:1)
您可以将功能定义更改为
<DllImport("kernel32.dll", EntryPoint := "Wow64DisableWow64FsRedirection")> _
Public Shared Function DisableWow64Redirection(ByRef output As IntPtr) As Boolean
并像这样定义Revert():
<DllImport("kernel32.dll", EntryPoint := "Wow64RevertWow64FsRedirection")> _
Public Shared Function RevertWow64Redirection(ByRef handle As IntPtr) As Boolean
你会像这样调用这些:
Dim handle As IntPtr
DisableWow64Redirection(handle)
RevertWow64Redirection(handle)
我不是VB.NET的人,所以也许某些语法不正确 - 重要的是你提供了IntPtr类型的引用参数,它映射到PVOID本机类型。你想要坚持下去,并将相同的值传递给Revert()。
答案 1 :(得分:1)
声明是错误的,它需要一个(ByRef oldValue As IntPtr)参数。您需要将其传递给还原功能。
但是,您无法在.NET程序中安全地使用它。它也会影响CLR,它将无法再找到.NET框架程序集。你无法预测它们何时被加载。肯定有更好的方法来完成你所需要的,开始一个新的问题。