我们开发了一个在阻止模式下使用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多功能一体代码框架示例中找到了一个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);
有没有人对方向有所了解?它可能与安全有关吗?感谢。
答案 0 :(得分:0)
MS All-In-One Code Framework(C#命名管道服务器用于IPC(CSNamedPipeServer))提供的代码示例显示了如何执行此操作的正确方法,它适用于Win 7。