internal void MinimalCreate()
        {
            if (Exists())
                throw new IOException("Composite already exists");

            // Lock the store system (generates an IOException if exclusive Lock
            // can not be made).
            if (!IsReadOnly) {
                StoreSystem.Lock(StateStoreName);
            }

            // Create/Open the state store
            stateStore = StoreSystem.CreateStore(StateStoreName);
            try {
                stateStore.LockForWrite();

                StateStore = new TableStateStore(stateStore);
                long headP = StateStore.Create();
                // Get the fixed area
                var fixedArea = stateStore.GetArea(-1);
                fixedArea.WriteInt8(headP);
                fixedArea.Flush();
            } finally {
                stateStore.UnlockForWrite();
            }

            Setup();

            // Init the conglomerate blob store
            InitObjectStore();

            // Create the system table (but don't initialize)
            CreateSystemSchema();
        }
        public void Open()
        {
            if (!Exists())
                throw new IOException("Table composite does not exist");

            // Check the file Lock
            if (!IsReadOnly) {
                // Obtain the Lock (generate error if this is not possible)
                StoreSystem.Lock(StateStoreName);
            }

            // Open the state store
            stateStore = StoreSystem.OpenStore(StateStoreName);
            StateStore = new TableStateStore(stateStore);

            // Get the fixed 64 byte area.
            var fixedArea = stateStore.GetArea(-1);
            long headP = fixedArea.ReadInt8();
            StateStore.Open(headP);

            Setup();

            InitObjectStore();

            ReadVisibleTables();
            ReadDroppedTables();

            CleanUp();
        }