public static SharedMemoryIPC Connect(string sharedMemoryIPCName, FileMapAccess fileMapAccess) { SharedMemory sharedMemory = Open(sharedMemoryIPCName, fileMapAccess); EventWaitHandle serverEvent; EventWaitHandle clientEvent; string serverEventName = sharedMemory.ReadString(0); try { serverEvent = EventWaitHandle.OpenExisting(serverEventName); clientEvent = EventWaitHandle.OpenExisting(sharedMemory.ReadString(serverEventName.Length + 1)); } catch (Win32Exception ex) { if (ex.ErrorCode == 0x000010d8) { throw new NoServerException(); } else { throw; } } clientEvent.Set(); return(new SharedMemoryIPC(sharedMemory, serverEvent, clientEvent)); }
SharedMemoryIPC(SharedMemory sharedMemory, EventWaitHandle serverEvent, EventWaitHandle clientEvent) { this.sharedMemory = sharedMemory; this.serverEvent = serverEvent; this.clientEvent = clientEvent; role = CLIENT; }
void initializeKernelObjects(string name, uint size, FileMapProtection fileMapProtection, string serverEventName, string clientEventName) { bool newCreatedSrEvent; bool newCreatedClEvent; sharedMemory = Create(name, size, FileMapProtection.PageExecuteReadWrite); serverEvent = new EventWaitHandle(false, EventResetMode.ManualReset, serverEventName, out newCreatedSrEvent); if (newCreatedSrEvent != true) { throw new ObjectAlreadyExistException(serverEventName); } clientEvent = new EventWaitHandle(false, EventResetMode.ManualReset, clientEventName, out newCreatedClEvent); if (newCreatedClEvent != true) { throw new ObjectAlreadyExistException(clientEventName); } }