我尝试从sysprep.exe.Local
删除非空文件夹C:\Windows\System32\sysprep
。
首先,我尝试仅删除根test
目录:
...
res = SHCreateItemFromParsingName("C:\\Windows\\System32\\sysprep\\sysprep.exe.Local", NULL, IID_ShellItem, &isrc);
if (res != 0) printf("Error: %#X\n", res);
res = fileOp.lpVtbl.DeleteItem(fileOp, isrc, NULL);
if (res != 0) printf("Error: %#X\n", res);
res = fileOp.lpVtbl.PerformOperations(fileOp);
if (res != 0) printf("Error: %#X\n", res);
...
稍后,我尝试删除test
文件夹中的所有文件,然后删除sysprep.exe.Local
文件夹本身。
每次,我都运行我的程序 - 我有res == 0
。没有错误,但文件和文件夹在同一个地方。当我尝试删除非空C:\Windows\System32\sysprep\test
目录时 - 它已成功消失。
首先,我认为重启后会删除文件和文件夹 - nope。
为什么会这样?
答案 0 :(得分:0)
System32
,如名称所示,是一个保存关键文件的系统目录。它可以防止无意中删除文件。不要在那里创建文件。
对于特殊情况,可能会在MSDN中找到此规则的例外情况,但是从上下文中可以清楚地看到要使用的特定函数。例如。驱动程序安装将在那里创建文件,但您仍然不会调用CreateFile
来执行此操作。
现在您已经确定您不仅仅是尝试从System32中删除文件,而是从操作系统的实际部分中删除文件,这证实了这一点。
如果您右键点击SysPrep.EXE
,您会看到它归TrustedInstaller
所有。这将其标识为受Windows Update管理的受保护文件。你不仅没有删除它,你的尝试可能会引发所有体面的反病毒程序。