Beispiel #1
0
 private DllWrapper(int processId, SafeHandle hProcess, IAutoScalingSharedBuffer buffer) : base(IntPtr.Zero, false)
 {
     m_process   = hProcess;
     m_buffer    = buffer;
     m_unwrapper = buffer.Reserve(c_unwrapper.Length * 4 + c_padding);
     m_unwrapper.WriteNullTerminatedString(c_padding, c_unwrapper, Encoding.Unicode);
     m_pid = processId;
     SetHandle(getHandle(processId, "Kernel32.dll"));
 }
Beispiel #2
0
 // todo: dispose before buffer disposed or use other memory
 public DllWrapper(string name, SafeHandle hProcess, int processId, DllWrapper kernel, IAutoScalingSharedBuffer buffer) : base(IntPtr.Zero, true)
 {
     m_process   = hProcess;
     m_kernel    = kernel;
     m_buffer    = buffer;
     m_unwrapper = m_kernel.m_unwrapper;
     m_pid       = processId;
     SetHandle(getHandle(processId, name));
 }
Beispiel #3
0
        public InterprocessManualResetEventSlim InitializeInteraction(IAutoManagedMemory queue)
        {
            if (!Kernel.DuplicateHandle(m_process, (IntPtr)this[c_init, false](queue), Process.GetCurrentProcess()
                                        .Handle, out var duplicated))
            {
                throw new InvalidOperationException($"Can't duplicate handle (error: 0x{Kernel.GetLastError():X})");
            }

            return(new InterprocessManualResetEventSlim(duplicated, true));
        }
Beispiel #4
0
        private SafeWaitHandleSlim callProc(IAutoManagedMemory unwrapperArg)
        {
            var thread = new SafeWaitHandleSlim(Kernel.CreateRemoteThread(m_process, 0, 0, m_unwrapper + c_padding, unwrapperArg.Start, 0, out _), true);

            if (thread.DangerousGetHandle() == IntPtr.Zero)
            {
                throw new InvalidOperationException($"Error: 0x{Kernel.GetLastError():X}");
            }

            return(thread);
        }
 internal void AddNested(IAutoManagedMemory nested)
 {
     m_nested.Add(nested);
 }
 public void Write(int offset, IAutoManagedMemory pointer)
 {
     Write(offset, pointer.Start);
 }
Beispiel #7
0
        public bool TryReserve(int size, out IAutoManagedMemory reserved)
        {
            reserved = reserveBlock(size);

            return(reserved != null);
        }