bjutales
驱动牛犊
驱动牛犊
  • 注册日期2011-02-11
  • 最后登录2011-03-07
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2790回复:1

[求助]在C#中调用FilterSendMessage获取文件操作信息的程序

楼主#
更多 发布于:2011-02-17 16:46
各位大侠好, 我最近正在做一个C#中调用FilterSendMessage获取文件操作信息的程序.

在DDK的minispy例子中, C语言下调用FilterSendMessage正常

在C#中通过WindowsAPI调用
先调用FilterConnectCommunicationPort, 返回值为0, 成功
代码如下:
[DllImport("fltlib", SetLastError = false)]
        public static extern int FilterConnectCommunicationPort([MarshalAs(UnmanagedType.LPWStr)]
            string portName,
            uint options,
            IntPtr context,
            uint sizeOfContext,
            IntPtr securityAttributes,
            IntPtr portPtr);

IntPtr portPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)));
            string portName = "\\MiniSpyPort";
            int status = FilterConnectCommunicationPort(
                portName,
                0,
                IntPtr.Zero,
                0,
                IntPtr.Zero,
                portPtr);

紧接着再调用FilterSendMessage就出问题了, 返回-2147024890, 估计是哪个参数传的有问题, 代码如下:
[DllImport("fltlib", SetLastError = true)]
        public static extern int FilterSendMessage(
            IntPtr hPort,
            IntPtr lpInBuffer,
            uint dwInBufferSize,
            IntPtr lpOutBuffer,
            int dwOutBufferSize,
            out int lpBytesReturned
            );
int result = FilterSendMessage(portPtr, IntPtr.Zero, 0, IntPtr.Zero, 0, out size);

我试过从一个在C#中定义的, 类似Demo中传入参数结构的结构体, 通过Marshal得到的lpInBuffer, 但是可能是结构体里的枚举和数据类型或者数据值有问题, 结果还是-2147024890.

请教C#中的结构体应该如何建立, 或者哪里做的有问题导致的, 谢谢.
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2011-02-17 17:17
你为啥不用c++封成一个dll,再用c#?
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
游客

返回顶部