예제 #1
0
        public void BasicWriteMailSlot()
        {
            const string mailslotName = @"\\?\mailslot\basicwritemailslottest";

            using (var mailslotHandle = MailslotDesktopMethods.CreateMailslot(mailslotName))
            {
                FileHelper.WriteAllText(mailslotName, "basicwritetest");
            }
        }
예제 #2
0
        public void BasicReadMailslot()
        {
            const string mailslotName = @"\\?\mailslot\basicreadmailslottest";

            using (var mailslotHandle = MailslotDesktopMethods.CreateMailslot(mailslotName))
            {
                string message = FileHelper.ReadAllText(mailslotName);
                message.Should().BeNullOrEmpty();
            }
        }
예제 #3
0
 public void BasicGetSetInfoDefaults()
 {
     using (var handle = MailslotDesktopMethods.CreateMailslot(@"\\?\mailslot\basicgetsetinfodefaultstest"))
     {
         handle.IsInvalid.Should().BeFalse();
         var info = MailslotDesktopMethods.GetMailslotInfo(handle);
         info.MessageCount.Should().Be(0);
         info.NextSize.Should().Be(uint.MaxValue);
         info.MaxMessageSize.Should().Be(0);
         info.ReadTimeout.Should().Be(0);
         MailslotDesktopMethods.SetMailslotTimeout(handle, 100);
         MailslotDesktopMethods.GetMailslotInfo(handle).ReadTimeout.Should().Be(100);
     }
 }
예제 #4
0
 public void BasicGetInfo()
 {
     using (var handle = MailslotDesktopMethods.CreateMailslot(
                name: @"\\?\mailslot\basicgetinfotest",
                maxMessageSize: 256,
                readTimeout: 1000))
     {
         handle.IsInvalid.Should().BeFalse();
         var info = MailslotDesktopMethods.GetMailslotInfo(handle);
         info.MessageCount.Should().Be(0);
         info.NextSize.Should().Be(uint.MaxValue);
         info.MaxMessageSize.Should().Be(256);
         info.ReadTimeout.Should().Be(1000);
     }
 }
예제 #5
0
        public void BasicCreateMailslot()
        {
            const string mailslotName = @"\\.\mailslot\basiccreatemailslottest";

            using (var handle = MailslotDesktopMethods.CreateMailslot(mailslotName))
            {
                handle.IsInvalid.Should().BeFalse();

                using (var fileHandle = FileMethods.CreateFile(mailslotName, DesiredAccess.NONE, ShareMode.FILE_SHARE_READWRITE, CreationDisposition.OPEN_EXISTING))
                {
                    fileHandle.IsInvalid.Should().BeFalse();
                    FileMethods.GetFileType(fileHandle).Should().Be(FileType.FILE_TYPE_UNKNOWN);
                    var modeInfo = FileDesktopMethods.GetFileMode(fileHandle);

                    // The mailslot was opened synchronously
                    modeInfo.Should().Be(FILE_MODE_INFORMATION.FILE_SYNCHRONOUS_IO_NONALERT);
                }
            }
        }
예제 #6
0
        public void CreateMailslotAsync()
        {
            const string mailslotName = @"\\.\mailslot\asynccreatemailslottest";

            using (var handle = MailslotDesktopMethods.CreateMailslot(mailslotName))
            {
                handle.IsInvalid.Should().BeFalse();

                using (var fileHandle = FileMethods.CreateFile(mailslotName, DesiredAccess.NONE, ShareMode.FILE_SHARE_READWRITE, CreationDisposition.OPEN_EXISTING,
                                                               FileAttributes.NONE, FileFlags.FILE_FLAG_OVERLAPPED))
                {
                    fileHandle.IsInvalid.Should().BeFalse();
                    FileMethods.GetFileType(fileHandle).Should().Be(FileType.FILE_TYPE_UNKNOWN);
                    var modeInfo = FileDesktopMethods.GetFileMode(fileHandle);

                    // The mailslot was opened asynchronously (e.g. no synchronous flag)
                    modeInfo.Should().Be((FILE_MODE_INFORMATION)0);
                }
            }
        }