2013-10-08 25 views
0

我已經寫了世界糧食計劃署(Windows過濾平臺)我的C#包裝,我使用WinDivert 1.0.5, 這個導入語法WinDivert 1.0.5 DivertRecv()方法獲取最後一個錯誤998

[DllImportAttribute("WinDivert.dll", EntryPoint = "DivertRecv",SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] 
      [return: MarshalAsAttribute(UnmanagedType.Bool)] 
      public static extern bool DivertRecv([InAttribute()] System.IntPtr handle, 
                [OutAttribute()] System.IntPtr pPacket, 
                [InAttribute()] uint packetLen, 
             [ OutAttribute()] System.IntPtr pAddr, 
             [OutAttribute()] System.IntPtr readLen); 

這函數調用的語法

if(DivertRecv(handle, Ppacket, (uint)(8 * packet.Length-1), 
       Paddr, Ppacket_len) == false) 
       { 
        Console.ForegroundColor = ConsoleColor.Red; 
        Console.WriteLine("warning: failed to read packet {0} .", Marshal.GetLastWin32Error()); 
        Console.ResetColor(); 
        Console.WriteLine(" Press any key to Exit ..."); 
        Console.ReadKey(); 
        Environment.Exit(1); 
} 

但函數返回false與每一個電話,和GetLastWin32Error()得到錯誤代碼998。 PLZ幫助我。

+0

你可以看看[這個問題](http://stackoverflow.com/questions/23296106/windivert-in-c-sharp)並幫助我。我想我可能會遇到與你解決的問題相同的問題。 – JohnTube

+0

@SecurityCrazy如果你爲windivert分享了你的C#包裝,它會變得非常酷。我正在努力拼湊一個。 ;) – 2014-10-08 10:26:59

回答

0

998 = ERROR_NOACCESS(對內存位置的訪問無效)。這可能是由於將無效指針傳遞給DivertRecv所致。

pPacket參數是一個指向大小爲packetLen的預分配緩衝區的指針嗎?

+0

先生羅勒感謝您的回覆...我宣佈pPacket爲如下: - IntPtr Ppacket = new IntPtr(Marshal.SizeOf(typeof(PACKET))); 和PACKET是我的項目中聲明的結構類型。 –

+0

我不認爲該聲明是正確的。它只是創建一個IntPtr,其位值是sizeof的整數結果。它沒有分配任何內存。 – Basil

+0

親愛的羅勒,我需要告訴你..你是偉大的程序員,我不知道我怎麼能感謝你..你能幫助我在你的例子中的這個問題,錯誤發送TCP休息包1237 .. –