VB.NET - Вызов Kernel32.DLL Wow64DisableWow64FsRedirection - PullRequest
0 голосов
/ 13 октября 2010

Глядя на страницу Microsoft на Wow64DisableWow64FsRedirection, я вижу некоторый C-код. Что делать, если вы хотите вызвать эту функцию, и она вернется из VB.net?

Пока я сделал это:

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

И я делаю то же самое для функции «Вернуть брата».

Я называю это так:

DisableWow64Redirection()

Кажется, это работает, так как команда оболочки, которую я вызываю после, на самом деле находит свой exe в system32, но я не уверен насчет Revert, нужен ли ей параметр? Эта страница возврата , кажется, хочет, чтобы я взял вывод из отключения и подключил его к вызову возврата. Это звучит правильно? Как я могу изменить мой DLLimport для получения логического значения и фактически использовать его в функции Kernal32.DLL?

Спасибо!

Ответы [ 2 ]

1 голос
/ 13 октября 2010

Объявление неверное, оно принимает аргумент (ByRef oldValue As IntPtr). Который нужно передать функции возврата.

Однако вы не можете безопасно использовать это в программе .NET. Это также влияет на CLR, он больше не сможет найти сборки .NET Framework. Вы не можете предсказать, когда они будут загружены. Несомненно, есть лучшие способы выполнить то, что вам нужно, начать новый вопрос об этом.

1 голос
/ 13 октября 2010

Вы можете изменить определение вашей функции на

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

...