|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。编程盘格局化是盘算机用户常常利用的操纵之一,但因为操纵体系的把持台和外壳(Shell)供应了对格局化的完善撑持,使编程职员很简单无视用户对格局化的基础需求。在他们看来,磁盘格局化对用户来讲并非一个太年夜的成绩,使用程序不用要对它供应撑持。实在,这是一个错觉,当用户在运转使用程序碰到必要格局化磁盘时,再切换到把持台大概资本办理器往格局化磁盘长短常方便和啰嗦的。
另有一部分编程职员以为磁盘格局化很简单完成,没有手艺停滞,因而没有付与充足器重。实在,在实践编程时笔者发明磁盘格局化是一个不年夜不小的成绩。一方面,它请求编程只管复杂,不要触及中止、端口读写、物理扇区存取、VXD、WDM驱动程序等庞大细节,只需能完成格局化便可,代码越复杂越好,最好是只挪用一个函数便可完成。另外一方面,笔者却发明,基础上一切的编程参考书本都对这个成绩只字不提,在MSDN中也很难找到一个具有如许功效的FormatDisk函数。固然,我们能够使用WinExec、CreateProcess和ShellExecute等函数往实行Format命令,而且这计划完整可行,不外随之发生的把持台窗口会使我们的窗口程序显得不三不四,损坏原本的程序界面。固然我们还能够经由过程设置CreateProcess函数的参数完成对把持台窗口的埋没,使Format.exe潜伏地在背景运转,但这又必要我们保护它的完全路径,这也存在必定坚苦。
次要函数
从实践使用的角度看,从Windows9X到WindowsNT都应当供应这个FormatDisk函数,不然怎样完成资本办理器窗口的磁盘格局化呢?笔者经由过程细心查找发明,Windows的确供应了如许一个函数,只管文档材料没有说明,可是假如我们利用ViewDependencies翻开Shell2.dll,就会发明这个函数。它就是SHFormatDrive,编译毗连到Shell32.lib。只管经由过程平台的SDK文档和SHELLAPI.H文件其实不能发明这个函数,可是Win32各个操纵体系都能找到它的踪迹。使用程序能够经由过程挪用这个函数完成借用外壳的磁盘格局化对话框格局化磁盘。挪用商定以下:
DWORDWINAPISHFormatDrive(HWNDhwnd,UINTdrive,UINTfmtID,UINToptions);
参数寄义以下:
hwnd:具有对话框的窗口句柄,注重hwnd为NULL时,其实不会招致这个对话框天生一个下层的使用程序,也就是说,这个参数老是非NULL,这个对话框只能作为一个窗口的子窗口,而不克不及作为一个独自的使用程序;
drive:要格局化的驱动器号,以A:==0为基准,依此类推;
fmtID:必需设定为SHFMT_ID_DEFAULT,即0xFFFF;
options:能够有两个选择项:SHFMT_OPT_FULL0x0001和SHFMT_OPT_SYSONLY0x0002,假如这一项设置为零,体系就要利用疾速格局化作为默许设置。
该函数的前往值要末为一个以下以SHFMT_开首的值,要末是一个乐成格局化的磁盘标识。
//前次格局化堕落,磁盘大概被格局化
#defineSHFMT_ERROR0xFFFFFFFFL
//格局化被作废
#defineSHFMT_CANCEL0xFFFFFFFEL
//不克不及举行磁盘格局化
#defineSHFMT_NOFORMAT0xFFFFFFFDL
完成步骤
1.函数接口声明
typedefDWORD(WINAPI*PFNSHFORMATDRIVE)(HWNDhwnd,UINTdrive,UINTfmtID,UINToptions);
2.加载Shell32.dll库
HINSTANCEhInstance=LoadLibrary(_T
(“Shell32.dll”));
If(hInstance==NULL)return;
3.取得函数指针
PFNSHFORMATDRIVEpFnSHFormatDrive=(
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;
本程序在Windows2000情况下调试经由过程,利用Delphi、VisualBasic的用户经由过程挪用上述WindowsSDK函数也能够完成磁盘格局化。
</p>ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于WindowsNT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失; |
|