我试图从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目录时-它已成功消失。

首先,我认为重新启动后文件和文件夹将被删除-不会。

为什么会这样?

最佳答案

顾名思义,System32是一个包含关键文件的系统目录。它可以防止意外删除文件。也不要在此处创建文件。

在特殊情况下,在MSDN中可能会发现此规则的例外,但是从上下文中可以清楚地看出要使用的特定功能。例如。驱动程序安装将在此处创建文件,但您仍然不调用CreateFile这样做。

[编辑]

现在,您已经确定不仅在尝试从System32中删除文件,而且还试图从操作系统的实际部分中删除文件,这证实了您的怀疑。

如果右键单击SysPrep.EXE,您将看到它归TrustedInstaller所有。这会将其标识为Windows Update管理的受保护文件。您不仅无法删除它,而且您的尝试可能会触发每个不错的防病毒程序。

09-04 02:20