NetworkIsolationEnumAppContainers的c#包装器
本文关键字:包装 NetworkIsolationEnumAppContainers | 更新日期: 2023-09-27 18:09:26
如何创建一个c#包装器来调用:
[DllImport("FirewallAPI.dll")]
internal static extern uint NetworkIsolationEnumAppContainers(out uint pdwCntPublicACs, out IntPtr ppACs);
我得到一个AccessViolationException(试图读取或写入受保护的内存)当运行它像这样:
uint aux=0;
IntPtr foo=new IntPtr();
NetworkIsolationEnumAppContainers(out aux, out foo);
Marshall的正确方法是什么?由于
您的p/调用似乎已经从这里解除:http://blogs.msdn.com/b/fiddler/archive/2011/12/10/fiddler-windows-8-apps-enable-loopback-network-isolation-exemption.aspx
那篇文章说:
它们的。net声明(截至BUILD会议)如下:
// Call this API to enumerate all of the AppContainers on the system [DllImport("FirewallAPI.dll")] internal static extern uint NetworkIsolationEnumAppContainers( out uint pdwCntPublicACs, out IntPtr ppACs); ....
然而,API在发布之前发生了变化。API的发布版本有一个额外的参数,位于不同的DLL中。文档可以在MSDN上找到。
你需要修改你的p/调用来使用这个API
感谢最新API的正确指针。下面是正在运行的代码:
uint pdwCntPublicACs = 0;
IntPtr ppACs = new IntPtr();
// Pin down variables
GCHandle handle_pdwCntPublicACs = GCHandle.Alloc(pdwCntPublicACs, GCHandleType.Pinned);
GCHandle handle_ppACs = GCHandle.Alloc(ppACs, GCHandleType.Pinned);
uint retval = NetworkIsolationEnumAppContainers((Int32) NETISO_FLAG.NETISO_FLAG_MAX, out pdwCntPublicACs, out ppACs);
//release pinned variables.
handle_pdwCntPublicACs.Free();
handle_ppACs.Free();