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 работает нормально
Вы скажите так используй 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);