当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>揭开NTFS下流的奥妙</b>[VC/C++编程]

赞助商链接



  本文“<b>揭开NTFS下流的奥妙</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

NTFS下,支持一个特别概念,那就是'流'.怎么个流法呢?先看'流'的定义:

stream

A sequence of bits, bytes, or other small structurally uniform units.

BIT的序列,大概小的统一构造单元.当然,小的统一构造单元并不意味着一定要大小统一,格局统一.

流依靠于文件而存在,你可以在流中存储2进制数据,文字大概其他一些东西.就象文件一样.文件存什么,流就可以存什么.每个文件可以含有多个流.但是流又和文件有些差别.每个流的翻开需求单独的一个CreatFile(...)操作,并非翻开文件就翻开了流.

流的名字和文件名以':'脱离.比方:ABC:A.

ABC就是文件名,而流的名字为A.当我们操作流时,可以用以下简单办法:

ECHO STREAM1>ABC:STREAM1

ECHO STREAM2>ABC:STREAM2

目前,ABC就有了:STREAM1和:STREAM2共2个流.

而读出流可以用:

MORE <ABC:STREAM1

MORE <ABC:STREAM2

这样,内容就被读出了.CreateFile("ABC:STREAM1",...);

假如用编程的办法.操作就和文件操作一样.

那么为什么要用流呢?流的好处就是躲藏.WINNT没有任何一个工具用来发现流的存在.我们看

C:\>ECHO "Hi Reader" > XX.TXT:MyStream
C:\>DIR XX.TXT
Volume in drive C is Wizard
Volume Serial Number is 40E5-92D4
Directory of C:\
03/18/98 08:36a           0 XX.TXT
         1 File(s)       0 bytes
         0 Dir(s)  3,399,192,576 bytes free

这就是好处.所以,在绿色兵团里有一篇文章专门介绍了流.说是一种躲藏很深的文件存取格局.

的确深,但是NT只不过没有供应工具罢了.而我们仍旧有探测到流的存在.那就是,Inside Programming为大家供应的Stream.Exe.该工具可以看到含有流的文件以及全部的流的名字.

当然,NT供应一个API,BackupRead(...)用于流名的读出.既然是Inside Programming,介绍这个API明显不能供应更多帮忙,接下来介绍的是一个NATIVE API:NtQueryInformationFile(...)

下面给出该API触及流的部份:

/*+++
Streaminfo.h
author: lulin
date: 2000.8.25
Abstract:
interface to NtQueryInformationFile
stream portion.
---*/
#ifndef __STREAMINFO_H__
#define __STREAMINFO_H__
#include <windef.h>
extern "C"{
typedef LONG NTSTATUS;
typedef struct {
   union {
     NTSTATUS Status;
     PVOID Pointer;
   };
   ULONG *Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
typedef struct { //infoclass 22
ULONG NextEntryOffset;
ULONG StreamNameLength;
LARGE_INTEGER EndOfStream;
LARGE_INTEGER AlloCationSize;
WCHAR StreamName[1];
}FILE_STREAM_INFORMATION,*PFILE_STREAM_INFORMATION;
__declspec(dllimport) NTSTATUS __stdcall NtQueryInformationFile(
HANDLE handle,
PIO_STATUS_BLOCK io_status_block,
PVOID FileInFormation,
ULONG FileInformationLength,
int FileInfomationClass
);
}
#endif //__STREAMINFO_H__

NTFS真正存储流名时,名字里会加上:$DATA,比方:ABC:STREAM1在存储时,流名被存为了:STREAM1:$DATA,所以在查询后果中需求去除:$DATA.在这里,我不具体谈论STREAM.EXE若何运作


  以上是“<b>揭开NTFS下流的奥妙</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .