VC++ 基于NTFS的数据流创建与检测

本文介绍了如何使用VC++进行NTFS数据流的创建与检测,通过`BackupRead`、`BackupSeek`等API读取文件头和数据流信息,遍历文件系统查找数据流并输出相关信息。
摘要由CSDN通过智能技术生成

#include <stdio.h>
#include <windows.h>

int ReadStream( HANDLE hFile, bool bIsDirectory, char* FileName )
{
 //数据流文件名查找
 //
 //输入:
 //     已打开的文件句柄
 //     bIsDirectory
 //     文件名, 用于显示数据流在哪个文件中
 //结果:
 //     直接在函数中输出
 //返回:
 //     Count:数据流的个数
 
 WIN32_STREAM_ID sid;  //数据流头结构
 LPVOID lpContext = NULL; //环境指针,读取数据流时,必须为空
 DWORD dwRead = 1;    //实际读取的大小
 int Success;
 int Count = 0;  //数据流的个数
 UCHAR *Buffer;  //动态分配的空间指针
 bool bIsFirst = true;  //是否为所查找到的第一个数据流名

 ZeroMemory( &sid, sizeof( WIN32_STREAM_ID ) );  //清空sid
 //数据流头大小,实际为20字节
 DWORD dwStreamHeaderSize = (LPBYTE)&sid.cStreamName - (LPBYTE)&sid;


 /*
 if( strcmp( FileName, "F://VC 6//Contrl控制台程序//DataStreamFinder//test//test//Last.txt" ) == 0 )
 {
 //打印出所有流字符
 UCHAR *Buffer1 = (UCHAR*)malloc(50000);
 memset( Buffer1, 0, 50000);
 Success = ::BackupRead( hFile, (LPBYTE)Buffer1, 50000, &dwRead, false, false, &lpContext );
 printf( "Size of Head: %d/n", dwStreamHeaderSize );
 for( unsigned int i=0; i<dwRead; i ++ )
 {
  printf( "(%d)%c", i, Buffer1[i] );
 }
 printf( "/n" );
 return 0;
 }
 */

 

 if( !bIsDirectory )   //如果不是目录,就执行此段
 {
  //读取原始文件头
  Success = ::BackupRead( hFile, (LPBYTE)&sid, dwStreamHeaderSize, &dwRead, false, false, &lpContext );
  if( !Success )  //读取原始文件头失败
  {
   return 0;
  }
  //读取源文件内容
  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, &F

摘要:NTFS是Microsoft公司开发的一种有着良好安全性和稳定性的高性能文件系统,NTFS文件文件夹中附加多个额外的数据流,但是其访问一直没有很好的解决办法,本文使用VB2003实现NTFS文件附加数据流写类,提供.Net框架下NTFS文件附加数据流的完整解决方案。 关键词:VB.Net NTFS 数据流 类 在项目中选择添加引用->浏览->选择“JWBStreamOP.dll”文件->确定,即可成功引用。 4.1 类的声明: Dim myStreamOP As New ClassJWBStreamOP(“NTFS文件完整路径”) 4.2 属性: 该类共有3个只属性 属性名 返回值类型 备注 FileName String 只,在成功声明后使用 Ready Boolean 只,该类可操作时为True Ver String 只,类版本、版权信息 4.3 方法 该类共有6个方法: 4.3.1 OpenNTFSStream(ByVal sStreamName As String) As System.IO.FileStream 打开指定文件(声明时指定)的指定数据流,返回值为指定数据流FileStream接口。 参数列表 类型 传递方式 参数说明 sStreamName String Byval 流文件名 4.3.2 GetNTFSStreamSize(ByVal sStreamName As String) As Long 获取指定数据流的大小,返回实际大小,执行失败返回-1 参数列表 类型 传递方式 参数说明 sStreamName String Byval 流文件名 4.3.3 AddNTFSStream(ByVal toHidName As String, ByRef percentDone As Double) As Boolean 添加附加数据流,返回执行结果。 参数列表 类型 传递方式 参数说明 toHidName String ByVal 待添加的文件路径 percentDone Double ByRef 传递一个完成百分比的参数 4.3.4 SaveNTFSStream(ByVal sStreamName As String, ByVal outFileName As String, ByRef percentDone As Double) As Boolean将指定的数据流保存为文件,返回执行结果。 参数列表 类型 传递方式 参数说明 sStreamName String ByVal 流文件名 outFileName String ByVal 保存文件路径 percentDone Double ByRef 传递一个完成百分比的参数 4.3.5 ReadNTFSStreamsName() As String() 获取文件的所有附加数据流名称,返回名称数组。 4.3.6 DeleteNTFSStream(ByVal sStreamName As String) As Boolean 删除指定数据流,返回执行结果。 参数列表 类型 传递方式 参数说明 sStreamName String Byval 流文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值