`
- 浏览:
116154 次
- 性别:
- 来自:
北京
-
1#define _WIN32_WINNT 0x0400
2#include <windows.h>
3#include <winioctl.h>
4//ReadFileLink
5ULONGLONG *GetFileClusters(
6 PCHAR lpFileName,
7 ULONG *ClusterSize,
8 ULONG *ClCount,
9 ULONG *FileSize
10 )
11{
12 HANDLE hFile;
13 ULONG OutSize;
14 ULONG Bytes, Cls, CnCount, r;
15 ULONGLONG *Clusters = NULL;
16 BOOLEAN Result = FALSE;
17 LARGE_INTEGER PrevVCN, Lcn;
18 STARTING_VCN_INPUT_BUFFER InBuf;
19 PRETRIEVAL_POINTERS_BUFFER OutBuf;
20 CHAR Name[7];
21
22 Name[0] = lpSrcName[0];
23 Name[1] = ':';
24 Name[2] = 0;
25
26 GetDiskFreeSpace(Name, &SecPerCl, &BtPerSec, NULL, NULL);
27
28 ClusterSize = SecPerCl * BtPerSec;
29
30 hFile = CreateFile(lpFileName, FILE_READ_ATTRIBUTES,
31 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
32 NULL, OPEN_EXISTING, 0, 0);
33
34 if (hFile != INVALID_HANDLE_VALUE)
35 {
36 *FileSize = GetFileSize(hFile, NULL);
37
38 OutSize = sizeof(RETRIEVAL_POINTERS_BUFFER) + (*FileSize / ClusterSize) * sizeof(OutBuf->Extents);
39
40 OutBuf = malloc(OutSize);
41
42 InBuf.StartingVcn.QuadPart = 0;
43
44 if (DeviceIoControl(hFile, FSCTL_GET_RETRIEVAL_POINTERS, &InBuf,
45 sizeof(InBuf), OutBuf, OutSize, &Bytes, NULL))
46 {
47 *ClCount = (*FileSize + ClusterSize - 1) / ClusterSize;
48
49 Clusters = malloc(*ClCount * sizeof(ULONGLONG));
50
51 PrevVCN = OutBuf->StartingVcn;
52
53 for (r = 0, Cls = 0; r < OutBuf->ExtentCount; r++)
54 {
55 Lcn = OutBuf->Extents[r].Lcn;
56
57 for (CnCount = (ULONG)(OutBuf->Extents[r].NextVcn.QuadPart - PrevVCN.QuadPart);
58 CnCount; CnCount--, Cls++, Lcn.QuadPart++) Clusters[Cls] = Lcn.QuadPart;
59
60 PrevVCN = OutBuf->Extents[r].NextVcn;
61 }
62 }
63
64 free(OutBuf);
65
66 CloseHandle(hFile);
67 }
68 return Clusters;
69}
70
71//how do we use the clusters
72void Read(
73 PCHAR lpSrcName
74 )
75{
76 ULONG ClusterSize, BlockSize;
77 ULONGLONG *Clusters;
78 ULONG ClCount, FileSize, Bytes;
79 HANDLE hDrive, hFile;
80 ULONG SecPerCl, BtPerSec, r;
81 PVOID Buff;
82 LARGE_INTEGER Offset;
83 CHAR Name[7];
84
85 Clusters = GetFileClusters(lpSrcName, &ClusterSize, &ClCount, &FileSize);
86
87 if (Clusters)
88 {
89 Name[0] = '\\';
90 Name[1] = '\\';
91 Name[2] = '.';
92 Name[3] = '\\';
93 Name[4] = lpSrcName[0];
94 Name[5] = ':';
95 Name[6] = 0;
96
97 hDrive = CreateFile(Name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
98
99 if (hDrive != INVALID_HANDLE_VALUE)
100 {
101
102 Buff = malloc(ClusterSize);
103
104 for (r = 0; r < ClCount; r++, FileSize -= BlockSize)
105 {
106 Offset.QuadPart = ClusterSize * Clusters[r];
107
108 SetFilePointer(hDrive, Offset.LowPart, &Offset.HighPart, FILE_BEGIN);
109
110 ReadFile(hDrive, Buff, ClusterSize, &Bytes, NULL);
111
112 BlockSize = FileSize < ClusterSize ? FileSize : ClusterSize;
113
114 }
115
116 free(Buff);
117
118 CloseHandle(hDrive);
119 }
120 free(Clusters);
121 }
122}
123
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更...
* 实现遥控器按键控制来读取链表数据。 * 实现图片的显示。 六、结果分析 * 电子相册实现简单的文件读取、文件单浏览的模块按键控制,以及图片全屏时的按键控制。 * 总共分四个模块,一个是初始化模块、单浏览模式...
建设者静态(和最终) 字符串生成器和字符串格式toString()方法遗产配套介面公共,私人,受保护多态性封装和API文档转换数值上投和下投使用泛型泛型和通配符匿名类使用扫描仪读取文件处理样品多个例外运行时与已...
②、文件的读写、何时读取完毕、读取一行数据; ③、文件指针位置的设置; ④、刷新缓存数据到文件; 17、文件的基本操作[Ⅱ] ①、文件的复制[适用于文件夹]; ②、文件的重命名或移动[适用于文件夹]; ③、...
12.4.1 保存在文件外、文件头还是文件尾 263 12.4.2 隐藏文件头的大小 264 12.4.3 隐藏文件头的设置偏移 266 12.4.4 隐藏文件头的读/写偏移 267 12.5 文件加密表 267 12.5.1 何时进行加密操作 267 12.5.2 文件...
12.4.1 保存在文件外、文件头还是文件尾 263 12.4.2 隐藏文件头的大小 264 12.4.3 隐藏文件头的设置偏移 266 12.4.4 隐藏文件头的读/写偏移 267 12.5 文件加密表 267 12.5.1 何时进行加密操作 267 12.5.2 文件...
输入核心:输入核心提供了注册设备驱动以及事件驱动的API,维护着事件驱动的链表以及设备驱动的链表 设备驱动 对应input_dev 负责实际的设备数据读取,通过input core 将数据传递到事件驱动程序,上报给用户层 事件...
基于unbuntu下的违章查询系统,使用tinyxml读取XML文件数据,存储进结构体中,声明两个Map容器,单号容器Sequence_numMap的键为单号, 值为结构体;声明一个表CarList,暂时存储孙节点,继而将表存入车牌容器再清除...
A:数组 B:结构体 C:链表 D:变量 答案:A 以下哪个选项属于木马()。 A:震网病毒 B:WannaCry C:灰鸽子 D:熊猫烧香 答案:C WinINet API实现了()层的协议。 A:网络层 B:数据链路层 C:应用层 D:传输层 答案:C 单步...
* 数据包捕获模块:创建了新的线程,利用了WinPcap的非回调函数Pcap_next_ex()函数从WinPcap底层驱动的数据缓冲区中读取数据包,并将数据包存储在系统临时文件中,以便于之后的分析。 * 解析和显示模块:负责解析...
实例197 采用API实现文件拖放 254 实例198 文件比较 255 第6章 操作系统与Windows相关程序 257 6.1 获得磁盘属性 258 实例199 获得硬盘序列号 258 实例200 获取映射驱动器路径 259 实例201 判断驱动器...
2.2.4 Native API 2.2.5 系统服务 2.2.6 执行程序组件 2.2.7 驱动程序 2.2.8 内核 2.2.9 硬件抽象层 2.2.10 Windows与微内核 2.3 从应用程序到驱动程序 2.4 小结 第3章 Windows驱动...
2.2.4 Native API 2.2.5 系统服务 2.2.6 执行程序组件 2.2.7 驱动程序 2.2.8 内核 2.2.9 硬件抽象层 2.2.10 Windows与微内核 2.3 从应用程序到驱动程序 2.4 小结 第3章 Windows驱动...
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect...
readDataThread.java 读取数据的线程类 demoEnhanceThread.java 使用自己定义的线程类示例 producer_consumer.java 演示生产者-消费者线程 consumer.java 消费者线程 producer.java 生产者线程 common.java ...
模块名称:茶凉专用模块 作者:茶凉 版本:2.0 本模块可以编程更简单...子程序 读内存长整数型, 长整数型, 公开, 从内存中读取长整数型数据,失败返回失败内容 .参数 进程ID, 整数型, , 进程ID .参数 地址, 整数型, , ...
了解和MFC各个类功能相近的API函数。 3、一定要理解MFC中消息映射的作用。 4、训练自己在编写代码时不使用参考书而是使用Help Online。 5、记住一些常用的消息名称和参数的意义。 6、学会看别人的代码。 7、多看书,...
代码401-高级软件开发表中的内容阅读编号读取名称阅读回购阅读1 节点生态系统,TDD,CI / CD 阅读2 表达 阅读3 Express REST API 阅读4 资料建模 阅读5 链表 阅读6 验证 阅读7 承载授权 阅读8 访问控制(ACL) 阅读...