UnenableRouter
C# Signature:
[DllImport("iphlpapi.dll", SetLastError=true)]
static extern int UnenableRouter(ref System.Threading.NativeOverlapped pOverlapped, IntPtr lpdwEnableCount);
VB.NET Signature:
<DllImport("iphlpapi.dll", CharSet:=CharSet.Ansi)>
Public Shared Function UnenableRouter(pOverlapped As IntPtr, ByRef lpdwEnableCount As Long) As Integer
End Function
Sample Code:
Private Const NO_ERROR As Integer = 0
<StructLayout(LayoutKind.Explicit, Size:=20)>
Public Structure OVERLAPPED
<FieldOffset(0)>
Public Internal As UInt32
<FieldOffset(4)>
Public InternalHigh As UInt32
<FieldOffset(8)>
Public Offset As UInt32
<FieldOffset(12)>
Public OffsetHigh As UInt32
<FieldOffset(8)>
Public Pointer As IntPtr
<FieldOffset(16)>
Public hEvent As IntPtr
End Structure
<DllImport("iphlpapi.dll", CharSet:=CharSet.Ansi)>
Public Shared Function UnenableRouter(pOverlapped As IntPtr, ByRef lpdwEnableCount As Long) As Integer
End Function
<DllImport("kernel32.dll")>
Public Shared Function CloseHandle(ByVal hwn As IntPtr) As Long
End Function
Private pOverlapped As OVERLAPPED <- Important! Created from EnableRouter() call.
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim count As Long
Dim pOverlappedPtr As IntPtr
Dim RetVal As Integer
Dim size As Integer
Try
size = Marshal.SizeOf(pOverlapped)
If pOverlapped.hEvent = IntPtr.Zero Then Exit Sub ' We don't have the handle.
pOverlappedPtr = Marshal.AllocHGlobal(size)
Marshal.StructureToPtr(pOverlapped, pOverlappedPtr, True)
RetVal = UnenableRouter(pOverlappedPtr, count)
If RetVal = NO_ERROR Then
Console.WriteLine("Success!")
Else
Dim errorMessage As String = New Win32Exception(RetVal).Message
Console.WriteLine(errorMessage)
End If
If pOverlappedPtr <> IntPtr.Zero Then CloseHandle(pOverlapped.hEvent)
Catch ex As Exception
Console.WriteLine(ex.ToString)
Finally
Marshal.FreeHGlobal(pOverlappedPtr)
End Try
End Sub
Última actualización