public static int SetContextAttributes(SSPIInterface SecModule, SafeDeleteContext securityContext, ContextAttribute contextAttribute, object value) {
            GlobalLog.Enter("SetContextAttributes", contextAttribute.ToString());

            byte[] nativeBuffer;

            switch (contextAttribute) {                
                case ContextAttribute.UiInfo:
                    Debug.Assert(value is IntPtr, "Type Mismatch");
                    IntPtr hwnd = (IntPtr)value; // A window handle
                    nativeBuffer = new byte[IntPtr.Size];
                    if (IntPtr.Size == 4) // 32bit
                    {
                        int ptr = hwnd.ToInt32();
                        nativeBuffer[0] = (byte)(ptr);
                        nativeBuffer[1] = (byte)(ptr >> 8);
                        nativeBuffer[2] = (byte)(ptr >> 16);
                        nativeBuffer[3] = (byte)(ptr >> 24);
                    }
                    else // 64bit
                    {
                        long ptr = hwnd.ToInt64();
                        nativeBuffer[0] = (byte)(ptr);
                        nativeBuffer[1] = (byte)(ptr >> 8);
                        nativeBuffer[2] = (byte)(ptr >> 16);
                        nativeBuffer[3] = (byte)(ptr >> 24);
                        nativeBuffer[4] = (byte)(ptr >> 32);
                        nativeBuffer[5] = (byte)(ptr >> 40);
                        nativeBuffer[6] = (byte)(ptr >> 48);
                        nativeBuffer[7] = (byte)(ptr >> 56);
                    }
                    break;

                default:
                    throw new ArgumentException(SR.GetString(SR.net_invalid_enum, "ContextAttribute"), "contextAttribute");
            }

            return SecModule.SetContextAttributes(securityContext, contextAttribute, nativeBuffer);
        }