0

查看微软关于 Wow64DisableWow64FsRedirection 的页面,我看到了一些 C 代码。如果你想调用这个函数并且它是从 VB.net 恢复的呢?

到目前为止,我已经这样做了:

 <Runtime.InteropServices.DllImport("KERNEL32.DLL",  EntryPoint:="Wow64DisableWow64FsRedirection")> _
Public Shared Function DisableWow64Redirection() As Boolean
End Function

我也为 Revert Brother 功能做同样的事情。

我这样称呼它:

DisableWow64Redirection()

这似乎有效,因为我调用的 shell 命令实际上在 system32 中找到了它的 exe,但我不确定 Revert,它需要参数吗?这个Revert 页面似乎希望我从 disable 中获取输出并将其插入到 revert 调用中。听起来对吗?如何更改我的 DLLimport 以获取布尔值并在 Kernal32.DLL 函数中实际使用它?

谢谢!

4

2 回答 2

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()。

于 2010-10-13T17:52:18.630 回答
1

声明是错误的,它需要一个 (ByRef oldValue As IntPtr) 参数。您需要将其传递给还原函数。

但是,您不能在 .NET 程序中安全地使用它。它还会影响 CLR,它将无法再找到 .NET 框架程序集。您无法预测它们何时加载。肯定有更好的方法来完成你所需要的,开始一个新的问题。

于 2010-10-13T17:55:02.263 回答