diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp index 0384cfdc3d35d0df35c621c11a1bac5340a2c9df..a3561d9901fb595ca85672298ad08a20206c04c5 100644 --- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp +++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp @@ -150,6 +150,17 @@ castVsPartInfo(JNIEnv * env, jlong ptr) return lcl; } +static TSK_POOL_INFO * +castPoolInfo(JNIEnv * env, jlong ptr) +{ + TSK_POOL_INFO *lcl = (TSK_POOL_INFO *)ptr; + if (!lcl || lcl->tag != TSK_POOL_INFO_TAG) { + setThrowTskCoreError(env, "Invalid TSK_POOL_INFO object"); + return 0; + } + return lcl; +} + static TSK_FS_INFO * castFsInfo(JNIEnv * env, jlong ptr) { @@ -1412,6 +1423,82 @@ Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat(JNIEnv * env, return (jlong) vol_part_info; } +/* +* Open pool with the given offset +* @return the created TSK_POOL_INFO pointer +* @param env pointer to java environment this was called from +* @param obj the java object this was called from +* @param a_img_info the pointer to the parent img object +* @param offset the offset in bytes to the pool +* @param pool_type the type of pool +*/ +JNIEXPORT jlong JNICALL +Java_org_sleuthkit_datamodel_SleuthkitJNI_openPoolNat(JNIEnv * env, + jclass obj, jlong a_img_info, jlong offset, jlong pool_type) +{ + printf("@@@ openPoolNat\n"); + TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info); + if (img_info == 0) { + //exception already set + return 0; + } + printf(" Casted img_info\n"); + + // TODO - use pool type + const TSK_POOL_INFO *pool = tsk_pool_open_img_sing(img_info, offset * img_info->sector_size, TSK_POOL_TYPE_DETECT); + if (pool == NULL) { + printf(" Failed to load pool\n"); + tsk_error_print(stderr); + if (tsk_error_get_errno() == TSK_ERR_POOL_UNSUPTYPE) + tsk_pool_type_print(stderr); + setThrowTskCoreError(env, tsk_error_get()); + } + printf(" Loaded pool! Has address 0x%x\n", pool); + return (jlong) pool; +} + +/* +* Open file system with the given offset +* @return the created TSK_FS_INFO pointer +* @param env pointer to java environment this was called from +* @param obj the java object this was called from +* @param a_img_info the pointer to the parent img object +* @param fs_offset the offset in bytes to the file system +*/ +JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsPoolNat +(JNIEnv * env, jclass obj, jlong a_img_info, jlong fs_offset, jlong a_pool_info, jlong pool_block) { + TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info); + if (img_info == 0) { + //exception already set + return 0; + } + + printf("@@@ openFsPoolNat - trying to cast pool with address 0x%x\n", a_pool_info); + TSK_POOL_INFO *pool_info = castPoolInfo(env, a_pool_info); + if (pool_info == 0) { + printf("@@@ openFsPoolNat - Invalid cast to pool???\n"); + fflush(stdout); + //exception already set + return 0; + } + + TSK_FS_INFO *fs_info; + printf("Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsPoolNat - pool_block = %lld\n", pool_block); + fflush(stdout); + printf(" Ok have a pool\n"); + + printf(" Making new img_info\n"); + fflush(stdout); + img_info = pool_info->get_img_info(pool_info, pool_block); + + fs_info = + tsk_fs_open_img(img_info, (TSK_OFF_T)fs_offset, + TSK_FS_TYPE_DETECT); + if (fs_info == NULL) { + setThrowTskCoreError(env, tsk_error_get()); + } + return (jlong)fs_info; +} /* * Open file system with the given offset @@ -1422,32 +1509,13 @@ Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat(JNIEnv * env, * @param fs_offset the offset in bytes to the file system */ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsNat - (JNIEnv * env, jclass obj, jlong a_img_info, jlong fs_offset, jlong pool_block) { + (JNIEnv * env, jclass obj, jlong a_img_info, jlong fs_offset) { TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info); if (img_info == 0) { //exception already set return 0; } TSK_FS_INFO *fs_info; - printf("Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsNat - pool_block = %lld\n", pool_block); - fflush(stdout); - - if (pool_block > 0) { - printf(" Ok have a pool\n"); - const TSK_POOL_INFO *pool = tsk_pool_open_img_sing(img_info, fs_offset, TSK_POOL_TYPE_DETECT); - - if (pool == NULL) { - tsk_error_print(stderr); - if (tsk_error_get_errno() == TSK_ERR_FS_UNSUPTYPE) - tsk_pool_type_print(stderr); - setThrowTskCoreError(env, tsk_error_get()); - } - - printf(" Making new img_info\n"); - fflush(stdout); - img_info = pool->get_img_info(pool, pool_block); - } - fs_info = tsk_fs_open_img(img_info, (TSK_OFF_T) fs_offset, TSK_FS_TYPE_DETECT); diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.h b/bindings/java/jni/dataModel_SleuthkitJNI.h index ad20cb8e6daca47f049ba7aec1dd32ac17b682ef..ef2523e305ae7421da413c6d6f3daa7968ab457c 100644 --- a/bindings/java/jni/dataModel_SleuthkitJNI.h +++ b/bindings/java/jni/dataModel_SleuthkitJNI.h @@ -289,12 +289,28 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat /* * Class: org_sleuthkit_datamodel_SleuthkitJNI - * Method: openFsNat + * Method: openPoolNat * Signature: (JJJ)J */ -JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsNat +JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openPoolNat (JNIEnv *, jclass, jlong, jlong, jlong); +/* + * Class: org_sleuthkit_datamodel_SleuthkitJNI + * Method: openFsNat + * Signature: (JJ)J + */ +JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsNat + (JNIEnv *, jclass, jlong, jlong); + +/* + * Class: org_sleuthkit_datamodel_SleuthkitJNI + * Method: openFsPoolNat + * Signature: (JJJJ)J + */ +JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsPoolNat + (JNIEnv *, jclass, jlong, jlong, jlong, jlong); + /* * Class: org_sleuthkit_datamodel_SleuthkitJNI * Method: openFileNat diff --git a/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java b/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java index 4d67ef80fb369cbbdcf9e5fdfd5e48f52bbe1315..a511934cd59efa80dae55dd46b1bb55dcda2ecac 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java +++ b/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java @@ -193,6 +193,86 @@ public Content getDataSource() throws TskCoreException { return myParent.getDataSource(); } + + /** + * Return whether this content has a Pool above it + * + * @return true if there is a Pool object in the parent structure + * + * @throws TskCoreException + */ + public boolean isPoolContent() throws TskCoreException { + Content myParent = getParent(); + if (myParent == null) { + return false; + } + + if (! (myParent instanceof AbstractContent)) { + return false; + } + + if (myParent instanceof Pool) { + return true; + } + + return ((AbstractContent)myParent).isPoolContent(); + } + + /** + * Get the pool volume + * + * @return the volume above this content and below a Pool object or null if not found + * + * @throws TskCoreException + */ + public Volume getPoolVolume() throws TskCoreException { + Content myParent = getParent(); + if (myParent == null) { + return null; + } + + if (! (myParent instanceof AbstractContent)) { + return null; + } + + if (myParent instanceof Volume) { + // This is potentially it, but need to check that this is a volume under a pool + if (((Volume) myParent).isPoolContent()) { + return (Volume)myParent; + } else { + // There are no pools in the hierarchy, so we're done + return null; + } + } + + // Try one level higher + return ((AbstractContent)myParent).getPoolVolume(); + } + + /** + * Get the pool + * + * @return the pool above this content or null if not found + * + * @throws TskCoreException + */ + public Pool getPool() throws TskCoreException { + Content myParent = getParent(); + if (myParent == null) { + return null; + } + + if (! (myParent instanceof AbstractContent)) { + return null; + } + + if (myParent instanceof Pool) { + return (Pool)myParent; + } + + // Try one level higher + return ((AbstractContent)myParent).getPool(); + } /** * Gets handle of SleuthkitCase to which this content belongs diff --git a/bindings/java/src/org/sleuthkit/datamodel/Content.java b/bindings/java/src/org/sleuthkit/datamodel/Content.java index caa02b9338ce51eb361d3698d9f2cc61a372f614..89d52f0c5025321fd215d332b0179b2d463b2603 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/Content.java +++ b/bindings/java/src/org/sleuthkit/datamodel/Content.java @@ -102,7 +102,7 @@ public interface Content extends SleuthkitVisitableItem { * @throws TskCoreException if critical error occurred within tsk core */ public Content getDataSource() throws TskCoreException; - + /** * Gets the child content objects of this content. * diff --git a/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java b/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java index 67d23024aa4ac6aabfd8fcae924afbcd5564dab2..f3a82485b4fcfe1a783a2dc073d228c3ac683259 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java +++ b/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java @@ -30,7 +30,7 @@ public class FileSystem extends AbstractContent { private long imgOffset, blockSize, blockCount, rootInum, - firstInum, lastInum, poolBlock; + firstInum, lastInum; private TskData.TSK_FS_TYPE_ENUM fsType; private Content parent; private volatile long filesystemHandle = 0; @@ -51,7 +51,7 @@ public class FileSystem extends AbstractContent { */ protected FileSystem(SleuthkitCase db, long obj_id, String name, long img_offset, TskData.TSK_FS_TYPE_ENUM fs_type, long block_size, long block_count, long root_inum, - long first_inum, long last_inum, long poolBlock) { + long first_inum, long last_inum) { super(db, obj_id, name); this.imgOffset = img_offset; this.fsType = fs_type; @@ -60,8 +60,6 @@ protected FileSystem(SleuthkitCase db, long obj_id, String name, long img_offset this.rootInum = root_inum; this.firstInum = first_inum; this.lastInum = last_inum; - this.poolBlock = poolBlock; - System.out.println("%%% Created new FileSystem object with poolBlock = " + poolBlock); } @Override @@ -95,7 +93,22 @@ long getFileSystemHandle() throws TskCoreException { Content dataSource = getDataSource(); if ((dataSource != null) && (dataSource instanceof Image)) { Image image = (Image) dataSource; - filesystemHandle = SleuthkitJNI.openFs(image.getImageHandle(), imgOffset, poolBlock, getSleuthkitCase()); + + // Check if this file system is in a pool + if (isPoolContent()) { + Pool pool = getPool(); + if (pool == null) { + throw new TskCoreException("Error finding pool for file system"); + } + + Volume poolVolume = getPoolVolume(); + if (poolVolume == null) { + throw new TskCoreException("File system is in a pool but has no volume"); + } + filesystemHandle = SleuthkitJNI.openFsPool(image.getImageHandle(), imgOffset, pool.getPoolHandle(), poolVolume.getStart(), getSleuthkitCase()); + } else { + filesystemHandle = SleuthkitJNI.openFs(image.getImageHandle(), imgOffset, getSleuthkitCase()); + } } else { throw new TskCoreException("Data Source of File System is not an image"); } diff --git a/bindings/java/src/org/sleuthkit/datamodel/Pool.java b/bindings/java/src/org/sleuthkit/datamodel/Pool.java index f0a22ba253dd0945fa84ec941272db2da5bfeee2..cae02f115eaa936e9907562c4ee44502a4119b92 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/Pool.java +++ b/bindings/java/src/org/sleuthkit/datamodel/Pool.java @@ -27,7 +27,7 @@ */ public class Pool extends AbstractContent { - private volatile long volumeSystemHandle = 0; + private volatile long poolHandle = 0; private long type, imgOffset; /** @@ -80,28 +80,32 @@ public long getOffset() { return imgOffset; } - + /** - * get the volume system Handle pointer Open a new handle if needed, - * otherwise resuse the existing handle. + * Lazily loads the internal pool structure: won't be loaded until + * this is called and maintains the handle to it to reuse it * - * @return volume system Handle pointer + * @return a pool pointer from the sleuthkit * - * @throws TskException + * @throws TskCoreException exception throw if an internal tsk core error + * occurs */ - //protected synchronized long getPoolHandle() throws TskCoreException { - //if (volumeSystemHandle == 0) { - // Content dataSource = getDataSource(); - // if ((dataSource != null) && (dataSource instanceof Image)) { - // Image image = (Image) dataSource; - // volumeSystemHandle = SleuthkitJNI.openVs(image.getImageHandle(), imgOffset); - // } else { - // throw new TskCoreException("Volume System data source is not an image"); - // } - //} - - //return volumeSystemHandle; - //} + long getPoolHandle() throws TskCoreException { + if (poolHandle == 0) { + synchronized (this) { + if (poolHandle == 0) { + Content dataSource = getDataSource(); + if ((dataSource != null) && (dataSource instanceof Image)) { + Image image = (Image) dataSource; + poolHandle = SleuthkitJNI.openPool(image.getImageHandle(), imgOffset, getType().getPoolType()); + } else { + throw new TskCoreException("Data Source of pool is not an image"); + } + } + } + } + return this.poolHandle; + } @Override public void close() { diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java index c4860edb5cd521efe7c5752e6f40fd24d04a21f5..a0ba56532e1364452ee443e289cfb83319ba42c4 100755 --- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java +++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java @@ -5742,7 +5742,7 @@ public FileSystem addFileSystem(long parentObjId, long imgOffset, TskData.TSK_FS // Create the new FileSystem object return new FileSystem(this, newObjId, displayName, imgOffset, type, blockSize, blockCount, rootInum, - firstInum, lastInum, 0); + firstInum, lastInum); } catch (SQLException ex) { throw new TskCoreException(String.format("Error creating file system with image offset %d and parent ID %d", imgOffset, parentObjId), ex); @@ -7395,7 +7395,7 @@ private FileSystem getFileSystemByIdHelper(long id, Content parent) throws TskCo TskData.TSK_FS_TYPE_ENUM fsType = TskData.TSK_FS_TYPE_ENUM.valueOf(rs.getInt("fs_type")); //NON-NLS FileSystem fs = new FileSystem(this, rs.getLong("obj_id"), "", rs.getLong("img_offset"), //NON-NLS fsType, rs.getLong("block_size"), rs.getLong("block_count"), //NON-NLS - rs.getLong("root_inum"), rs.getLong("first_inum"), rs.getLong("last_inum"), rs.getLong("pool_block")); //NON-NLS + rs.getLong("root_inum"), rs.getLong("first_inum"), rs.getLong("last_inum")); //NON-NLS fs.setParent(parent); // save it for the next call synchronized (fileSystemIdMap) { @@ -7556,7 +7556,7 @@ public Collection<FileSystem> getFileSystems(Image image) { TskData.TSK_FS_TYPE_ENUM fsType = TskData.TSK_FS_TYPE_ENUM.valueOf(rs.getInt("fs_type")); //NON-NLS FileSystem fs = new FileSystem(this, rs.getLong("obj_id"), "", rs.getLong("img_offset"), //NON-NLS fsType, rs.getLong("block_size"), rs.getLong("block_count"), //NON-NLS - rs.getLong("root_inum"), rs.getLong("first_inum"), rs.getLong("last_inum"), rs.getLong("pool_block")); //NON-NLS + rs.getLong("root_inum"), rs.getLong("first_inum"), rs.getLong("last_inum")); //NON-NLS fs.setParent(null); allFileSystems.add(fs); } diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java index 94128c6fc89e1ba676548bfe21ef9387d0efcd73..c76366de323ac0d71d4302db27bd61b07c38025d 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java +++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java @@ -803,7 +803,30 @@ public static long openVsPart(long vsHandle, long volId) throws TskCoreException releaseTSKReadLock(); } } - + + /** + * TODO update this + * Get volume Handle + * + * @param vsHandle pointer to the volume system structure in the sleuthkit + * @param volId id of the volume + * + * @return pointer to a volHandle structure in the sleuthkit + * + * @throws TskCoreException exception thrown if critical error occurs within + * TSK + */ + public static long openPool(long imgHandle, long offset, long poolType) throws TskCoreException { + getTSKReadLock(); + try { + // TODO CACHE + //returned long is ptr to pool Handle object in tsk + return openPoolNat(imgHandle, offset, poolType); + } finally { + releaseTSKReadLock(); + } + } + /** * Get file system Handle Opened handle is cached (transparently) so it does * not need be reopened next time for the duration of the application @@ -817,12 +840,37 @@ public static long openVsPart(long vsHandle, long volId) throws TskCoreException * @throws TskCoreException exception thrown if critical error occurs within * TSK */ - public static long openFs(long imgHandle, long fsOffset, SleuthkitCase skCase) throws TskCoreException { - return openFs(imgHandle, fsOffset, 0, skCase); + getTSKReadLock(); + try { + long fsHandle; + synchronized (HandleCache.cacheLock) { + long caseDbPointer; + if (skCase == null) { + caseDbPointer = HandleCache.getDefaultCaseDbPointer(); + } else { + caseDbPointer = skCase.getCaseHandle().caseDbPointer; + } + final Map<Long, Long> imgOffSetToFsHandle = HandleCache.getCaseHandles(caseDbPointer).fsHandleCache.get(imgHandle); + if (imgOffSetToFsHandle == null) { + throw new TskCoreException("Missing image offset to file system handle cache for image handle " + imgHandle); + } + if (imgOffSetToFsHandle.containsKey(fsOffset)) { + //return cached + fsHandle = imgOffSetToFsHandle.get(fsOffset); + } else { + fsHandle = openFsNat(imgHandle, fsOffset); + //cache it + imgOffSetToFsHandle.put(fsOffset, fsHandle); + } + } + return fsHandle; + } finally { + releaseTSKReadLock(); + } } - public static long openFs(long imgHandle, long fsOffset, long poolBlock, SleuthkitCase skCase) throws TskCoreException { + public static long openFsPool(long imgHandle, long fsOffset, long poolHandle, long poolBlock, SleuthkitCase skCase) throws TskCoreException { getTSKReadLock(); try { long fsHandle; @@ -843,7 +891,7 @@ public static long openFs(long imgHandle, long fsOffset, long poolBlock, Sleuthk //return cached fsHandle = imgOffSetToFsHandle.get(combinedOffset); } else { - fsHandle = openFsNat(imgHandle, fsOffset, poolBlock); + fsHandle = openFsPoolNat(imgHandle, fsOffset, poolHandle, poolBlock); //cache it imgOffSetToFsHandle.put(combinedOffset, fsHandle); } @@ -1669,8 +1717,12 @@ public static long openFile(long fsHandle, long fileId, TSK_FS_ATTR_TYPE_ENUM at private static native long openVsNat(long imgHandle, long vsOffset) throws TskCoreException; private static native long openVolNat(long vsHandle, long volId) throws TskCoreException; + + private static native long openPoolNat(long imgHandle, long offset, long poolType) throws TskCoreException; + + private static native long openFsNat(long imgHandle, long fsId) throws TskCoreException; - private static native long openFsNat(long imgHandle, long fsId, long poolOffset) throws TskCoreException; + private static native long openFsPoolNat(long imgHandle, long fsId, long poolHandle, long poolOffset) throws TskCoreException; private static native long openFileNat(long fsHandle, long fileId, int attrType, int attrId) throws TskCoreException; diff --git a/tsk/auto/db_sqlite.cpp b/tsk/auto/db_sqlite.cpp index 379d311a85e291a3159b0f74788c2dc653460c64..5b67f0516f2f60684f140b7d419e9c7850458031 100755 --- a/tsk/auto/db_sqlite.cpp +++ b/tsk/auto/db_sqlite.cpp @@ -309,7 +309,7 @@ TskDbSqlite::initialize() "Error creating tsk_pool_info table: %s\n") || attempt_exec - ("CREATE TABLE tsk_fs_info (obj_id INTEGER PRIMARY KEY, img_offset INTEGER NOT NULL, fs_type INTEGER NOT NULL, block_size INTEGER NOT NULL, block_count INTEGER NOT NULL, root_inum INTEGER NOT NULL, first_inum INTEGER NOT NULL, last_inum INTEGER NOT NULL, display_name TEXT, pool_block INTEGER NOT NULL, FOREIGN KEY(obj_id) REFERENCES tsk_objects(obj_id));", + ("CREATE TABLE tsk_fs_info (obj_id INTEGER PRIMARY KEY, img_offset INTEGER NOT NULL, fs_type INTEGER NOT NULL, block_size INTEGER NOT NULL, block_count INTEGER NOT NULL, root_inum INTEGER NOT NULL, first_inum INTEGER NOT NULL, last_inum INTEGER NOT NULL, display_name TEXT, FOREIGN KEY(obj_id) REFERENCES tsk_objects(obj_id));", "Error creating tsk_fs_info table: %s\n") || attempt_exec @@ -857,13 +857,13 @@ TskDbSqlite::addFsInfo(const TSK_FS_INFO* fs_info, int64_t parObjId, snprintf(stmt, 1024, "INSERT INTO tsk_fs_info (obj_id, img_offset, fs_type, block_size, block_count, " - "root_inum, first_inum, last_inum, pool_block) " + "root_inum, first_inum, last_inum) " "VALUES (" "%" PRId64 ",%" PRIdOFF ",%d,%u,%" PRIuDADDR "," - "%" PRIuINUM ",%" PRIuINUM ",%" PRIuINUM ",%" PRIuINUM ")", + "%" PRIuINUM ",%" PRIuINUM ",%" PRIuINUM ")", objId, fs_info->offset, (int) fs_info->ftype, fs_info->block_size, fs_info->block_count, fs_info->root_inum, fs_info->first_inum, - fs_info->last_inum, pool_block); + fs_info->last_inum); return attempt_exec(stmt, "Error adding data to tsk_fs_info table: %s\n"); @@ -1927,7 +1927,7 @@ TSK_RETVAL_ENUM TskDbSqlite::getFsInfos(int64_t imgId, vector<TSK_DB_FS_INFO>& f { sqlite3_stmt* fsInfosStatement = NULL; if (prepare_stmt( - "SELECT obj_id, img_offset, fs_type, block_size, block_count, root_inum, first_inum, last_inum, pool_block FROM tsk_fs_info", + "SELECT obj_id, img_offset, fs_type, block_size, block_count, root_inum, first_inum, last_inum FROM tsk_fs_info", &fsInfosStatement)) { return TSK_ERR; @@ -1962,7 +1962,6 @@ TSK_RETVAL_ENUM TskDbSqlite::getFsInfos(int64_t imgId, vector<TSK_DB_FS_INFO>& f rowData.root_inum = sqlite3_column_int64(fsInfosStatement, 5); rowData.first_inum = sqlite3_column_int64(fsInfosStatement, 6); rowData.last_inum = sqlite3_column_int64(fsInfosStatement, 7); - rowData.pool_block = sqlite3_column_int64(fsInfosStatement, 8); //insert a copy of the rowData fsInfos.push_back(rowData); diff --git a/tsk/auto/tsk_db.h b/tsk/auto/tsk_db.h index e3024da59c67dc72d771f127242a591fafb3e328..b0cc10c54c318b8f2df1e46fadf190e9c015ff8d 100755 --- a/tsk/auto/tsk_db.h +++ b/tsk/auto/tsk_db.h @@ -119,7 +119,6 @@ typedef struct _TSK_DB_FS_INFO { TSK_INUM_T root_inum; TSK_INUM_T first_inum; TSK_INUM_T last_inum; - TSK_INUM_T pool_block; } TSK_DB_FS_INFO; ostream& operator <<(ostream &os,const TSK_DB_FS_INFO &fsInfo);