给个思路:用fopen()或CreateFile()成功打开一个文件时,文件分区表(磁盘的第一个扇区512字节)被读到内存中什么位置了?该怎么解决

给个思路:用fopen()或CreateFile()成功打开一个文件时,文件分区表(磁盘的第一个扇区512字节)被读到内存中什么位置了?
给个思路:用fopen()或CreateFile()成功打开一个文件时,文件分区表(磁盘的第一个扇区512字节)被读到内存中什么位置了?


------解决方案--------------------
觉得楼主的问题有点含糊,文件分区表(如果你指的是NTFS中的MFT)不应该是“磁盘的第一个扇区512字节”。 逻辑磁盘的第一个逻辑扇区应该是BPB。而物理磁盘的第一个扇区应该是分区链表。
------解决方案--------------------
分区表根本不是这个时候读入的。
------解决方案--------------------
就算知道也没用的, 文件系统没那么简单,
至少你的数据更改要通知系统,
具体实现还是要用驱动的
------解决方案--------------------
搂住问题提得非常好

提供给你一个思路,fopen或者CreateFile之后,返回一个句柄,在调试的内存窗口里,查找一下在该句柄内存附近,是否有一段512字节的内容与你通过WinHex读取的内容一致的
还有就是在整个内存中搜索(参看游戏修改器内存查找)与512字节匹配的部分

找到具体内存位置后,需要找到与打开文件句柄是否有关联,是否每次都是固定加载到某一堆栈空间。。。这些还是需要进一步分析

希望想法能有用

------解决方案--------------------
晕,至于CE做驱动是很正常的。在应用层很难安全的实现你说的U盘数据隐藏。

要知道Windows系统通常情况下对文件的操作是Lazy的,也就是说你CreateFile的时候是不会去读文件的,当你ReadFile的时候系统才会根据内部的lazy算法确定读多少和读到哪里去。另外即使你强悍到可以使用应用程序在内存中找到那块内存并且把它给清了,但是你能保证驱动不会将它写回磁盘么?

比如别人插上盘后,又拔走了,你能确保被你清除的内存数据不会刷到U盘上导致数据破坏么?
------解决方案--------------------
楼上各位,本人这个想法是源自于这样:当你用fopen()或CreateFile()打开或创建一个文件成功后,OS自动将文件系统加载成功,可以这样试验,插入一个U盘,编程fopen()成功写入一个文件,然后用WinHex工具将U盘的第一扇区的512字节改写全部填0,并保存到该U盘,这时你用资源管理器操作这个U盘,仍然是可以访问的,那么这512个字节被读到操作系统的设那么地方了呢?拔下U盘再插入,系统会不识别这个U盘,提示:要不要格式化?
=====================================
因为你CreateFile成功之后,操作系统会改分区中的文件表。这个文件表是操作系统维护的。
你更改只会让你的数据丢失,文件表中维护了每个文件从物理磁盘的那个位置开始,那个位置结束之类的信息。
你要加密的话,可以写驱动,自己写自己文件表。这样其他程序都不能读取了。
------解决方案--------------------
第一个扇区的内容在加载磁盘时就读到系统中了,即便你找到也不可能允许你修改吧,因为这个是由系统维护的,你要想隐藏文件可以修改第一个扇区让系统认不出来,然后自己写个读写程序