示例#1
0
        public LogProvider(ILogProviderHost host, Factory factory)
            :
            base(host, factory, ConnectionParamsUtils.CreateConnectionParamsWithIdentity(DebugOutput.Factory.connectionIdentity))
        {
            using (trace.NewFrame)
            {
                try
                {
                    dataReadyEvt   = new EventWaitHandle(false, EventResetMode.AutoReset, "DBWIN_DATA_READY");
                    bufferReadyEvt = new EventWaitHandle(false, EventResetMode.AutoReset, "DBWIN_BUFFER_READY");
                    trace.Info("Events opened OK. DBWIN_DATA_READY={0}, DBWIN_BUFFER_READY={1}",
                               dataReadyEvt.SafeWaitHandle.DangerousGetHandle(), bufferReadyEvt.SafeWaitHandle.DangerousGetHandle());

                    bufferFile = new SafeFileHandle(
                        Unmanaged.CreateFileMapping(new IntPtr(-1), IntPtr.Zero, Unmanaged.PAGE_READWRITE, 0, 1024, "DBWIN_BUFFER"), true);
                    if (bufferFile.IsInvalid)
                    {
                        throw new Win32Exception(Marshal.GetLastWin32Error());
                    }
                    trace.Info("DBWIN_BUFFER shared file opened OK. Handle={0}", bufferFile.DangerousGetHandle());

                    bufferAddress = new SafeViewOfFileHandle(
                        Unmanaged.MapViewOfFile(bufferFile, Unmanaged.FILE_MAP_READ, 0, 0, 512), true);
                    if (bufferAddress.IsInvalid)
                    {
                        throw new Win32Exception(Marshal.GetLastWin32Error());
                    }
                    trace.Info("View of file mapped OK. Ptr={0}", bufferAddress.DangerousGetHandle());

                    StartLiveLogThread("DebugOutput listening thread");
                }
                catch (Exception e)
                {
                    trace.Error(e, "Failed to inistalize DebugOutput reader. Disposing what has been created so far.");
                    Cleanup();
                    throw;
                }
            }
        }