VC 基於NTFS的資料流建立與檢測

2021-09-05 23:51:00 字數 2768 閱讀 5589

#include

#include

int readstream( handle hfile, bool bisdirectory, char* filename )

printf( "\n" );

return 0; }

*/if( !bisdirectory )   //如果不是目錄,就執行此段

//讀取原始檔內容

char len64[25];

dword orgfilelen;

zeromemory( len64, sizeof( len64 ) );

//將i64轉為dword型

sprintf( len64, "%u", sid.size );

orgfilelen = atol( len64 );

//跳過檔案內容

dword filelenl, filelenh;

success = ::backupseek( hfile, orgfilelen, null, &filelenl, &filelenh, &lpcontext );

if( !success )

} while( dwread )

//讀取資料流名稱

buffer = (uchar*)malloc( sid.dwstreamnamesize + 2 );  //動態申請快取

memset( buffer, 0, sid.dwstreamnamesize + 2 );   //快取清空

success = ::backupread( hfile, (lpbyte)buffer, sid.dwstreamnamesize, &dwread, false, false, &lpcontext );

if( !success )

if( dwread )  //讀取數不為0

//讀取資料流檔案內容大小

zeromemory( len64, sizeof( len64 ) );

//將i64轉為dword型

sprintf( len64, "%u", sid.size );

orgfilelen = atol( len64 );

printf( "\t\t[%ws] -> %u byte\n", buffer, orgfilelen );  //結果輸出,直接輸出資料流名稱,用空格分隔

free( buffer );  //釋放快取

count ++;  //資料流個數加1 }

//跳過資料流檔案內容

dword filelenl, filelenh;

success = ::backupseek( hfile, orgfilelen, null, &filelenl, &filelenh, &lpcontext );

if( !success )

} return count; }

void getfiledatastream( char* filename, bool bisdirectory )

if( !bisdirectory )  //不是目錄

if( dwfilesize == 0 )  //大小為0

} count = readstream( hfile, bisdirectory, filename );

if( count )

::closehandle( hfile ); }

void findallfilesindirectory( char* dir, bool bisrecursion )

if( *(dir+dirstrlen) == '\\' )  //在字串最後新增"\*.*"

char* path = (char*)malloc( max_path + 1 );  //申請記憶體

memset( path, 0, max_path + 1 );

memcpy( path, dir, max_path );

strcat( path, "\\*.*" );  //查詢當前目錄下的*.*檔案(即所有檔案)

//這裡查打此目錄下的所有檔案

handle hfile;

win32_find_data findfile;

//開始查詢資料夾下的所有檔案及目錄

hfile = findfirstfile( path, &findfile );

if( hfile != invalid_handle_value )  //存在檔案或目錄

else if( strcmp( findfile.cfilename, "." ) != 0 \

&& strcmp( findfile.cfilename, ".." ) != 0 )  //下一級目錄

else  //不遞迴,只檢視該子目錄

} } while( findnextfile( hfile, &findfile ) );  //還有檔案或目錄 }

free( path );  //釋放記憶體 }

void usage()  //用法幫助

void main( int argc, char* argv )

if( argc == 2 )  //掃瞄不遞迴的目錄

else

} else   //加了兩個引數來執行

} else if( ( argv[2][0] == '-' ) && ( argv[2][2] == '\0' ) ) //第二個引數的第乙個字元為引數號

} else  //錯誤的引數

} }

catch(...)

}

NTFS資料流隱寫

最近做題遇到了幾個是ntfs資料流隱寫的題目,感覺很有趣,就深入的學習一下。知識面較淺。建立乙個資料交換流檔案的方法,命令為 宿主檔案 準備與宿主檔案關聯的資料流檔案 首先,分出乙個很小的盤,來測試用。先在f盤中新建乙個空的文字檔案,命名為m0re.txt,建立乙個ntfs資料流,已經成功的隱藏資訊...

NTFS的交換資料流ADS應用

ntfs的交換資料流ads應用 ntfs是windows常用的檔案系統格式。該格式支援交換資料流 alternate data streams,縮寫ads 特性。該特性可以讓多個檔案流使用同乙個檔名,便於系統管理和使用檔案。這樣,乙個檔名可以包含乙個主檔案流和多個非主檔案流。其中,主檔案流可以以檔名...

資料流建立檔案

以前一直是把檔案轉為資料流存入資料庫儲存,例項多是應用在儲存上。如今需要把excel檔案以二進位製流存入資料庫中,當使用者需要做excel資料分析時,得先把資料流建立為乙個檔案,然後再對這個檔案進行處理。上傳檔案以二進位制儲存資料庫中,insus.net在這裡就不做演示了,因為在insus.net的...