【发布时间】: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