1、白水绕东城Zhongs Blog博客首页 空间 博客 好友 相册 留言 用户操作 留言 发消息 加为好友 订阅我的博客 felixz 的公告 用 Gtalk 和我交谈 _uacct = “UA-292248-3“; urchinTracker(); 文章分类 .net code C+ Builder etc Linux Philosophic Symbian win32 code win32 driverMy Pages Google Analytics hotmail mobile my flickr ReactOS 存档 2008 年 04 月(1) 2008 年 03 月(1) 2007
2、 年 09 月(1) 2007 年 06 月(6) 2007 年 05 月(5) 2007 年 03 月(3) 2006 年 10 月(3) 2006 年 08 月(2) 2006 年 07 月(3) 2006 年 06 月(4) 2006 年 05 月(10)根据驱动器盘符获得分区号 (Convert Driver Name to Partition Number) 收藏 程序里有自动重启 Windows 系统的功能,当有多个 Windows 共存的时候 C: 根目录下的 boot.ini 文件包含类似下面的内容:boot loadertimeout=30default=multi(0)di
3、sk(0)rdisk(0)partition(1)WINNToperating systemsmulti(0)disk(0)rdisk(0)partition(1)WINNT=“Windows 2000 Professional“multi(0)disk(0)rdisk(0)partition(2)WINDOWS=“Windows XP Professional“ /fastdetect我们会判断当前系统所在的驱动器,然后改写 boot.ini 中的 default 值,以使得程序重启系统后进入当前启动的操作系统。例如在拥有以上 boot.ini 的系统上,用户手工从操作系统列表选择了启动处于
4、 partition(2) 上的 Windows XP ,如果我们不作任何修改的重启系统,那么重启以后将进入当前的缺省操作系统 Windows 2000 而不是先前启动的 Windows XP。 GetSystemDirectory() 可以获得当前操作系统所在目录。开始我们想当然的将盘符和分区作了以下映射C: - partition(1)D: - partition(2)E: - partition(3).后来这里被 Report 了一个 Bug, 在 Dell 600m 笔记本电脑上, 单一操作系统, 我们的程序无法正常重启系统。检查后发现这个型号的笔记本电脑有一个隐藏分区,而 C: 则是
5、 partition(2)。我们必须寻找一个途径将驱动器号转换成分区号。查阅 MSDN 后得知标准 Win32 API 的解决方法, 简单范例 :#include #include #include #include #include / Required to ensure correct PhysicalDrive IOCTL structure setup#pragma pack(1)int main(int argc, char* argv)HANDLE hDrv = CreateFile(“.C:“,GENERIC_READ, / Read only to the driveFILE_SHARE_READ | / share modeFILE_SHARE_WRITE, NULL, / default security attributesOPEN_EXISTING, / disposition0, / file attributesNULL);if(!hDrv)cout 热门招聘职位 【 更多】