社区
硬件/系统
帖子详情
2k下用那些api函数能够对一个分区格式化
HPHanhan
2003-08-25 04:00:17
2k下用那些api函数(或DeviceIOControlCode)能够对一个分区格式化(FAT32,FAT16,NTFS)。不要用CreateFile和WriteFile自己去一个个Sector的写入数据结构。
...全文
74
3
打赏
收藏
2k下用那些api函数能够对一个分区格式化
2k下用那些api函数(或DeviceIOControlCode)能够对一个分区格式化(FAT32,FAT16,NTFS)。不要用CreateFile和WriteFile自己去一个个Sector的写入数据结构。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BuZhang_AP97091
2003-08-26
打赏
举报
回复
磁盘格式化的编程实现
北京机械工业学院 冉林仓
01-7-3 下午 02:00:32
--------------------------------------------------------------------------------
磁盘格式化是计算机用户经常使用的操作之一,但由于操作系统的控制台和外壳(Shell)提供了对格式化的完美支持,使编程人员很容易忽视用户对格式化的基本需求。在他们看来,磁盘格式化对用户来说并不是一个太大的问题,应用程序不必要对它提供支持。其实,这是一个错觉,当用户在运行应用程序遇到需要格式化磁盘时,再切换到控制台或者资源管理器去格式化磁盘是非常不便和烦琐的。
还有一部分编程人员认为磁盘格式化很容易实现,没有技术障碍,因此没有赋予足够重视。其实,在实际编程时笔者发现磁盘格式化是一个不大不小的问题。一方面,它要求编程尽量简单,不要涉及中断、端口读写、物理扇区存取、VXD、WDM驱动程序等复杂细节,只要能实现格式化即可,代码越简单越好,最好是只调用一个函数即可实现。另一方面,笔者却发现,基本上所有的编程参考书籍都对这个问题只字不提,在MSDN中也很难找到一个具有这样功能的FormatDisk函数。当然,我们可以利用WinExec、CreateProcess和ShellExecute等函数去执行Format命令,并且这方案完全可行,不过随之产生的控制台窗口会使我们的窗口程序显得不伦不类,破坏原有的程序界面。虽然我们还可以通过设置CreateProcess函数的参数实现对控制台窗口的隐藏,使Format.exe隐蔽地在后台运行,但这又需要我们维护它的完整路径,这也存在一定困难。
主要函数
从实际应用的角度看,从Windows 9X到Windows NT都应该提供这个FormatDisk函数,否则怎么实现资源管理器窗口的磁盘格式化呢?笔者通过仔细查找发现,Windows 确实提供了这样一个函数,尽管文档资料没有注明,但是如果我们使用View Dependencies打开Shell2.dll,就会发现这个函数。它就是SHFormatDrive,编译连接到Shell32.lib。尽管通过平台的SDK文档和SHELLAPI.H文件并不能发现这个函数,但是Win32各个操作系统都能找到它的踪影。应用程序可以通过调用这个函数实现借用外壳的磁盘格式化对话框格式化磁盘。调用约定如下:
DWORD WINAPI SHFormatDrive(HWND hwnd,UINT drive,UINT fmtID,UINT options);
参数含义如下:
hwnd:拥有对话框的窗口句柄,注意hwnd为NULL时,并不会导致这个对话框生成一个上层的应用程序,也就是说,这个参数总是非NULL,这个对话框只能作为一个窗口的子窗口,而不能作为一个单独的应用程序;
drive:要格式化的驱动器号,以A: == 0为基准,依此类推;
fmtID:必须设定为 SHFMT_ID_DEFAULT,即0xFFFF;
options:可以有两个选择项:SHFMT_OPT_FULL 0x0001和SHFMT_OPT_SYSONLY 0x0002,如果这一项设置为零,系统就要使用快速格式化作为默认设置。
该函数的返回值要么为一个下列以SHFMT_开头的值,要么是一个成功格式化的磁盘标识。
//上次格式化出错,磁盘可能被格式化
#define SHFMT_ERROR 0xFFFFFFFFL
//格式化被取消
#define SHFMT_CANCEL 0xFFFFFFFEL
// 不能进行磁盘格式化
#define SHFMT_NOFORMAT 0xFFFFFFFDL
实现步骤
1.函数接口声明
typedef DWORD (WINAPI *PFNSHFORMATDRIVE)(HWND hwnd,UINT drive,UINT fmtID,UINT options);
2.加载Shell32.dll库
HINSTANCE hInstance=LoadLibrary(_T
(“Shell32.dll”));
If(hInstance==NULL) return;
3.获得函数指针
PFNSHFORMATDRIVE pFnSHFormatDrive=(
PFNSHFORMATDRIVE)GetProcessAddress(_T
(“SHFormatDrive”));
if(pFnSHFormatDrive==NULL)
{
FreeLibrary(hInstance);
return;
}
4.调用函数
(pFnSHFormatDrive)(hwnd,drive/*a:==0*/,fmtID/* SHFMT_ID_DEFAULT */,options);
5.释放句柄资源
FreeLibrary(hInstance);
Return;
本程序在Windows 2000环境下调试通过,使用Delphi、Visual Basic的用户通过调用上述Windows SDK 函数也可以实现磁盘格式化。
approach
2003-08-26
打赏
举报
回复
a sample:
http://www.codeproject.com/dialog/cformatdrivedialog.asp
approach
2003-08-26
打赏
举报
回复
SHFormatDrive
700个批处理打包下载.rar
判断
分区
格式.bat 判断是文件还是文件夹.cmd 判断驱动器类型.cmd 刷新策略.bat 加密代码.cmd 勾股数算法.cmd 十进制转二进制.cmd 十进制转十六进制.cmd 去掉字符串不同部位的空格.cmd 去掉字符串头所有的0.cmd 去掉...
大量批处理实用程序例程
本资源由大量的实用批处理文件组成,删除.txt尾缀名双击即可直接使用,既是学习的模板也可以作为实用程序,如下为文件组成,涉及文件管理,系统,网络,小工具等等: 0-reaname 2000XP停止打印.bat BAT珍藏 dir.bat...
26.
分区
格式化
,硬盘
分区
,fdisk详解,mkfs
格式化
,mkfs.ext4,mkfs.xfs详细使用方法和示例
本章详细讲解
分区
格式化
,硬盘
分区
,fdisk使用,
格式化
,查看
分区
,fdisk选项含义,创建
分区
等内容 @[TOC](文章目录) # fdisk ##
格式化
作用 Linux fdisk 是
一个
创建和维护
分区
表的程序,实质上是对硬盘的
格式化
。...
linux
分区
格式化
慢,浅谈linux性能调优之三:
分区
格式化
之前的考虑
在Linux中进行
格式化
必须考虑Block与inode,Block还好理解,它是磁盘可以记录的最小单位,是由数个扇区组成,所以大小通常为n*512Bytes,例如4K。 那么inode是什么呢 ? Block是记录文件内容的区域,inode则是记录该...
linux中
格式化
逻辑卷为vfat,linux学习笔记-12存储结构与文件划化
开机菜单及所需配置文件等/dev 任何设备与接口都以文件形式存放在此目录/etc 配置文件/home 用户主目录/bin 单用户维护模式下还
能够
被操作的命令/lib 开机时用到的
函数
库及/bin与/sbin下面命令要调用的
函数
/sbin ...
硬件/系统
2,640
社区成员
17,239
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章