차단 모드에서 ConnectNamedPipe()를 사용하는 XP 응용 프로그램을 개발했습니다.XP에서 Windows 7로 ConnectNamedPipe()를 마이그레이션 할 때 문제가 발생했습니다.
Win 7에서 테스트 할 때 응용 프로그램은 차단 해제 된 것처럼 작동합니다. VBS 클라이언트가 연결되기 전에 ConnectNamedPipe()가 반환됩니다. 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);
방향에 대한 아이디어가 있습니까? 보안과 관련이있을 수 있습니까? 감사.