CreateMailSlot не работает как надо!
От: andrew_www  
Дата: 20.01.07 15:08
Оценка:
Доброе время суток!!!!

У меня возникла такая проблема!!!

1. мне нужно получать даные с MailSlot с использованием SafeHandle
как это можно сделать???

2. когда пишу такой код, даный MailSlot не может открытся тоесть возв. -1

SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES();
sa.bInheritHandle = false;
sa.Length = Marshal.SizeOf(sa);
sa.lpSecurityDescriptor = new IntPtr(<любое число но не 0>); // когда 0 работает нормально

m_mailSlotHandle = MailSlot.CreateMailslotA(m_mailSlotName, MaxMsgSize, ReadTimeoutTime, ref sa);

Вы скажите так используй 0 и не парся!
0 использовать не могу нужно передать security params

Спасибо за ответы!!!!
Re: CreateMailSlot не работает как надо!
От: Аноним  
Дата: 13.02.08 15:47
Оценка:
Здравствуйте, andrew_www, Вы писали:

_>Доброе время суток!!!!


_>У меня возникла такая проблема!!!


_>1. мне нужно получать даные с MailSlot с использованием SafeHandle

_>как это можно сделать???

_>2. когда пишу такой код, даный MailSlot не может открытся тоесть возв. -1


_>SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES();

_> sa.bInheritHandle = false;
_> sa.Length = Marshal.SizeOf(sa);
_> sa.lpSecurityDescriptor = new IntPtr(<любое число но не 0>); // когда 0 работает нормально

_>m_mailSlotHandle = MailSlot.CreateMailslotA(m_mailSlotName, MaxMsgSize, ReadTimeoutTime, ref sa);


_>Вы скажите так используй 0 и не парся!

_>0 использовать не могу нужно передать security params

_>Спасибо за ответы!!!!


Native.SECURITY_DESCRIPTOR securityDesc;
const UInt32 sdRevisionLevel = 1;
if (!Native.InitializeSecurityDescriptor(out securityDesc, sdRevisionLevel))
{
throw new Exception(String.Format("Failed to initialize security descriptor. Win32 error num: '{0}'", Marshal.GetLastWin32Error()));
}
if (!Native.SetSecurityDescriptorDacl(ref securityDesc, true, IntPtr.Zero, false))
{
throw new Exception(String.Format("Failed to set security descriptor DACL. Win32 error num: '{0}'", Marshal.GetLastWin32Error()));
}
Native.SECURITY_ATTRIBUTES secAttribs = new Native.SECURITY_ATTRIBUTES();
secAttribs.nLength = Marshal.SizeOf(secAttribs);
secAttribs.bInheritHandle = 1;
IntPtr securityDescPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(securityDesc));
Marshal.StructureToPtr(securityDesc, securityDescPtr, false);
secAttribs.lpSecurityDescriptor = securityDescPtr;
IntPtr attributesPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(secAttribs));
Marshal.StructureToPtr(secAttribs, attributesPtr, false);
_slotName = String.Format(@"\\.\mailslot\parsec\{0}", Guid.NewGuid());
_hSlot = new SafeFileHandle(Native.CreateMailslot(_slotName, 0, (UInt32)(-1), attributesPtr), true);

Overlapped overlapped = new Overlapped(0, 0, new ManualResetEvent(false).SafeWaitHandle.DangerousGetHandle(), null);
Byte[] buffer = new Byte[1024];
_nativeOverlapped = overlapped.Pack(readCompletedHandler, buffer);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.