网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.关于拷贝构造函数和赋值运算符.
.伪随机数生成及在VC++中的实现.
.在C++ Builder6中使用XML.
.C语言中使用环境变量的技巧.
.制作固定大小的Form.
.“Hello world!”的N种写法.
.深度探索C++对象模型(9).
.GCC参数详解.
.C++编程从零开始之赋值操作符.
..
.用CB在WIN.INI中保存信息.
.直接发送数据到打印机.
.ASP.NET在线用户列表精确版——解.
.The Standard C Library for Lin.
.用BCB3.0制作桌面动画.
.链表的C语言实现之动态内存分配.
.快的马.
.VC++编程隐藏计算机中的鼠标.
.查看系统的cpp (C PreProcessor).
.S-DES.

揭开NTFS下流的奥秘

发表日期:2008-3-8



  NTFS下,支持一个非凡概念,那就是'流'.怎么个流法呢?先看'流'的定义:
stream
A sequence of bits, bytes, or other small strUCturally uniform units.
B99v的序列,或者小的统一结构单元.当然,小的统一结构单元并不意味着一定要大小统一,格式统一.
流依附于文件而存在,你可以在流中存储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如何运作,需要源程序的朋有同样可以购买.20元/份.付款信息件UTIL99vY页里的信息.
上一篇:C++程序设计之四书五经(上篇) 人气:376
下一篇:揭开C/C++中数组形参的迷雾 人气:726
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐