【问题标题】:Problem migrating ConnectNamedPipe() from XP to Win 7将 ConnectNamedPipe() 从 XP 迁移到 Win 7 时出现问题
【发布时间】:2011-11-05 21:28:23
【问题描述】:

我们开发了一个在阻塞模式下使用 ConnectNamedPipe() 的 XP 应用程序。

在 Win 7 上进行测试时,应用程序的行为就好像它没有被阻止:ConnectNamedPipe() 在其 VBS 客户端连接之前返回。调用 StreamReader.ReadLine() 时引发异常(“等待进程打开管道的另一端”)。使用调试器运行时,即使在 Win 7 中也不会出现这种情况!

这些是我们正在使用的函数: [

DllImport("kernel32.dll", SetLastError = true)]
public static extern SafeFileHandle CreateNamedPipe(
String pipeName,
uint dwOpenMode,
uint dwPipeMode,
uint nMaxInstances,
uint nOutBufferSize,
uint nInBufferSize,
uint nDefaultTimeOut,
IntPtr lpSecurityAttributes);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern int ConnectNamedPipe(
SafeFileHandle hNamedPipe,
IntPtr lpOverlapped); 

写完之后,我们从 CodePlex All-In-One Code Framework Samples 中找到了一个 MS 示例:(我们现在正在尝试)

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern SafePipeHandle CreateNamedPipe(string pipeName,
                PipeOpenMode openMode, PipeMode pipeMode, int maxInstances,
                int outBufferSize, int inBufferSize, uint defaultTimeout,
                SECURITY_ATTRIBUTES securityAttributes);
            [return: MarshalAs(UnmanagedType.Bool)]
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern bool ConnectNamedPipe(SafePipeHandle hNamedPipe,
                IntPtr overlapped);

有人知道方向吗?可能与安全有关吗?谢谢。

【问题讨论】:

    标签: c# windows-7 vbscript windows-xp pipe


    【解决方案1】:

    MS All-In-One Code Framework(用于 IPC 的 C# 命名管道服务器(CSNamedPipeServer))提供的代码示例显示了如何执行此操作的正确方法,它适用于 Win 7。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      相关资源
      最近更新 更多