2013-06-01 1 views
1

관리되는 IP 도우미 기능을 C# .net으로 변환 할 수 있습니까? 나는 그것이 PInvoke ing에 의해 쓰여 져야한다는 것을 안다. MicrosoftC# .NET의 관리자 IP 도우미 기능

당신에게 감사 할 것이다 : 여기

는 IP 도우미 기능입니다. 여기

은 예입니다

public static TcpTable GetExtendedTcpTable(bool sorted) 
    { 
     List<TcpRow> tcpRows = new List<TcpRow>(); 

     IntPtr tcpTable = IntPtr.Zero; 
     int tcpTableLength = 0; 

     if (IpHelper.GetExtendedTcpTable(tcpTable, ref tcpTableLength, sorted, IpHelper.AfInet, IpHelper.TcpTableType.OwnerPidAll, 0) != 0) 
     { 
      try 
      { 
       tcpTable = Marshal.AllocHGlobal(tcpTableLength); 
       if (IpHelper.GetExtendedTcpTable(tcpTable, ref tcpTableLength, true, IpHelper.AfInet, IpHelper.TcpTableType.OwnerPidAll, 0) == 0) 
       { 
        IpHelper.TcpTable table = (IpHelper.TcpTable)Marshal.PtrToStructure(tcpTable, typeof(IpHelper.TcpTable)); 

        IntPtr rowPtr = (IntPtr)((long)tcpTable + Marshal.SizeOf(table.length)); 
        for (int i = 0; i < table.length; ++i) 
        { 
         tcpRows.Add(new TcpRow((IpHelper.TcpRow)Marshal.PtrToStructure(rowPtr, typeof(IpHelper.TcpRow)))); 
         rowPtr = (IntPtr)((long)rowPtr + Marshal.SizeOf(typeof(IpHelper.TcpRow))); 
        } 
       } 
      } 
      finally 
      { 
       if (tcpTable != IntPtr.Zero) 
       { 
        Marshal.FreeHGlobal(tcpTable); 
       } 
      } 
     } 

     return new TcpTable(tcpRows); 
    } 

`

여기에 기본 기능입니다 :

[DllImport(IpHelper.DllName, SetLastError = true)] 
public static extern uint GetExtendedTcpTable(IntPtr tcpTable, ref int tcpTableLength, bool sort, int ipVersion, TcpTableType tcpTableType, int reserved); 
+0

이 외모에 대한 pinvoke.net을 확인할 수 있습니다 sendmetehc와 아주 흡사하다. odez 질문. SO 사용자가 pinvoke 선언의 전체 목록을 제공 할 것으로 합리적으로 기대할 수 없습니다. 어쨌든 이미 완료되었습니다. pinvoke interop assistant 또는 pinvoke.net과 같은 사이트를 사용하십시오. 그리고 물론 .NET 프레임 워크를 먼저 사용하십시오. 이미 GetExtendedTcpTable을 포함하여 winapi 함수를 많이 포함하고 있습니다. –

+0

오케이. 죄송 해요. 나는 그것을 독자적으로 쓰려고 노력할 것이다. .NET이 GetExtendedTcpTable과 같은 winapi를 감싸는 곳으로 안내해 주시겠습니까? –

답변

2

당신은 그

[DllImport("iphlpapi.dll", CharSet=CharSet.Ansi)] 
public static extern int GetAdaptersInfo(IntPtr pAdapterInfo, ref Int64 pBufOutLen); 

[DllImport("iphlpapi.dll", SetLastError=true)] 
static extern uint GetExtendedTcpTable(IntPtr pTcpTable, ref int dwOutBufLen, bool sort, int ipVersion, TCP_TABLE_CLASS tblClass,int reserved); 
+0

예! 나도 알아.하지만 위의 예제를 준 것처럼 헬퍼 함수를 ​​제공하지 않는다. 다시 네이티브 콜 (?)을해야한다는 뜻! 내가 이해할 수 있는지 없는지 나는 모른다! –

+0

샘플의 도우미는 RAW 메모리 내 데이터 구조를 관리 대상 개체에 'deserialize'하고 메모리를 확보하기위한 WIN32 API 규칙을 따릅니다. – rene

+0

에 이미 약간의 노력을 한 후에 특정 구조체에 대해 특정 질문을하는 것이 더 현명하다고 생각합니다. 사실 C#에서이 네이티브 함수를 호출하고 관리하는 방법을 얻지 못하고 있습니다. '마샬'과 모두! –