public IntPtr GetPrincipalDelegate()
        {
            if (IntPtr.Zero == _principalDelegatePointer)
            {
                lock (_delegatelock) {
                    if (IntPtr.Zero == _principalDelegatePointer)
                    {
                        PrincipalFunctionDelegate d = new PrincipalFunctionDelegate(GetManagedPrincipalHandler);
                        if (null != d)
                        {
                            IntPtr p = Marshal.GetFunctionPointerForDelegate(d);
                            if (IntPtr.Zero != p)
                            {
                                Thread.MemoryBarrier();
                                _principalDelegate        = d;
                                _principalDelegatePointer = p;
                            }
                        }
                    }
                }
            }

            return(_principalDelegatePointer);
        }
        public IntPtr GetPrincipalDelegate() {
            if (IntPtr.Zero == _principalDelegatePointer) {
                lock (_delegatelock) {
                    if (IntPtr.Zero == _principalDelegatePointer) {
                        PrincipalFunctionDelegate d = new PrincipalFunctionDelegate(GetManagedPrincipalHandler);
                        if (null != d) {
                            IntPtr p = Marshal.GetFunctionPointerForDelegate(d);
                            if (IntPtr.Zero != p) {
                                Thread.MemoryBarrier();
                                _principalDelegate = d;
                                _principalDelegatePointer = p;
                            }
                        }
                    }
                }
            }

            return _principalDelegatePointer;
        }