关于SHFileOperation函数的另类思考!!!!
微软的文件夹有一个系统漏洞,例如你可以在dos下建个带“\”文件夹,md test..\
,而这个文件夹在windows下是无法打开和删除的,在用SHFileOperation函数的时候可以把一个正常的文件改名为那个非法的文件名,如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char Path[256];
char topath[256];
SHFILEOPSTRUCT sfo;
memset(&sfo, 0, sizeof(sfo));
memset(Path, 0, sizeof(Path));
memset(topath,0,sizeof(topath));
strcpy(Path, "D:\\test");
strcpy(topath,"D:\\test..\");
sfo.wFunc = FO_RENAME;
sfo.pFrom = Path;
sfo.pTo = topath;
sfo.fFlags=FOF_NOCONFIRMATION;
SHFileOperation(&sfo);
}
可是当把
strcpy(Path, "D:\\test");
strcpy(topath,"D:\\test..\");
改为
strcpy(topath,"D:\\test..\");
strcpy(Path, "D:\\test");
时候却无法更改,也就是说执行这个函数的时候会对源文件名的合法性进行检查,而对目标文件名的时候却不检查???
或者有其他的什么???希望大家讨论讨论???