今年学习汇编语言,要做课程设计,我选择了做个“获取分区(FAT32或NTFS)的大小和剩余空间”的程序,考虑了很久,目前我的基本的一个思路是,利用BIOS 13H 扩展中断来获得磁盘的第一扇区的信息(之前我开始时是用DOS的1CH中断,发现我的硬盘都大于8G的,所以放弃了),网上查了一些资料,发现在XP下的保护模式要调用BIOS中断是不行的,而且还要搞个进入RING 0 的权限。
现在我认为我需要解决的问题是:
1。如何进入RING 0
2。如何调用BIOS中断
应该是我学得还很浅,所以现在只能是有这个思路,我网上找了很多资料,却没能得到一个解决问题的方法,所以在这里希望大家能不吝指教!!
如果有一些例子的,希望能给一个(仅做参考之用!选择这个题目的目的就是为了学到更多,希望高手们指教啊!!),或是有更好的思路的麻烦给我提个思路,或是我还应该看哪些书,参考哪些资料,去哪个网站学习,给小弟指点一二,小弟在此感激不尽。
------解决方案--------------------------------------------------------
"获取分区(FAT32或NTFS)的大小和剩余空间 ", 可以直接调用 GetDiskFreeSpace() 系统函数来实现的. 如果是自己读取磁盘的扇区, 可以参考 CreateFile() 系统函数关于这方面的说明
------解决方案--------------------------------------------------------
如果是纯dos下编程的话,直接使用bios服务。
------解决方案--------------------------------------------------------
windows提供了很多硬件相关API,可以获得硬件(包括硬盘)的信息。
------解决方案--------------------------------------------------------
呵呵,涉及到ring切换,24位段偏移与32位平面寻址方式切换,很多东东呢.
------解决方案--------------------------------------------------------
记得在WindowsXP下是可以调用BIOS中断的,不过我只用过绘图中断,LZ说的有空我去做一下实验。
另外不赞成进入ring 0的想法,Windows2000以后的系统对其内核做了严格的保护,进入ring 0远没有Win9x时来得方便,在NT环境下进入ring 0最现实的一个方法是编写驱动,但这涉及到大量操作系统内核以及ring 0级调试知识,短期内实在难以精通。更何况在内核进行操作很大程度上会影响稳定性与兼容性,故不到万不得已不要尝试此举。