shell 编程学习笔记(二)

来源:互联网 发布:python字符串转换列表 编辑:程序博客网 时间:2024/05/26 02:20
shell 编程学习笔记(二)


shell 的结构:


shell由一堆api函数和一些com接口组成, 但它们提供了不一样的功能, 通过api你可以访问shell的基本功能, 而通过com, 给你提供了
shell扩展的功能


shell由folders组成, 所以folder的集合一般被称为shell的namespace, 但folder并不是传统意义上的文件夹, 它可以包含文件也可以包含其他,比如网络节点


folder的实现其实就是一个 com对象, 它提供了标准的接口描述它包含的内容以及它里面的一些属性, 简单的说就是里面有多少文件,多少字文件夹, 它们是什么, 
定义一个folder相当于定义一个特殊的文件夹, 这种特定的folder一般被称为shell namespace extension.


folder里面除了sub folder, 最多的就是文件, 这里准确的应该是file object. 就像folder不一定是文件夹, file object也不见得是文件, 它们都是比较抽象的
概念, 但对于文件系统, 它们是一致的.


上面已经一再声明, folder和file已经不是一般意义上的文件夹和文件,那么它们是如何定义它们的路径的, 一般情况下我们用一串用\来连接的字符串来表明路径,
但是它们是抽象的,并不一定是文件系统,用这种简单的字符串来声明它的唯一性往往是不可能的,因而shell 是用pidl来声明它.


就像  c:\windows\system32\ 它可以被看作是 c: , windows , system32 3个部分,用\ 连起来表示一个路径
在shell里面把这三个部分抽象为pidl. 它实际就是一个结构的 list
typedef struct _ITEMIDLIST 

   SHITEMID mkid; 
} ITEMIDLIST, *LPITEMIDLIST;


typedef struct _SHITEMID 

   USHORT cb; 
   BYTE   abID[1]; 
} SHITEMID, *LPSHITEMID; 




cb: 表示这个结构占用的内存数
abID: 表示一个数据的一个字节.


注意, cb 绝不是 2+1, 这里的abID不是完整的数据,只是数据的第一个字节


就是想c: 它表示为 {4,"c"},  而windows 它为 {9, "w"}, 简单的说它是一个扁平的结构,是将这个路径放在一个连续的区域中.用大小来进行定位内存的操作,至于为
什么非要这样, 只能说设计就是如此.


 
原创粉丝点击