0
我們開發了一個XP應用程序,它在阻塞模式下使用ConnectNamedPipe()。從XP到Win 7遷移ConnectNamedPipe()的問題
在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);
有沒有人有一個方向的想法?它可能與安全有關嗎?謝謝。