IFileOperation :: DeleteItem在系统目录.Local中不起作用

时间:2018-02-27 09:33:15

标签: c file com directory

我尝试从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。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

System32,如名称所示,是一个保存关键文件的系统目录。它可以防止无意中删除文件。不要在那里创建文件。

对于特殊情况,可能会在MSDN中找到此规则的例外情况,但是从上下文中可以清楚地看到要使用的特定函数。例如。驱动程序安装将在那里创建文件,但您仍然不会调用CreateFile来执行此操作。

[编辑]

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

如果您右键点击SysPrep.EXE,您会看到它归TrustedInstaller所有。这将其标识为受Windows Update管理的受保护文件。你不仅没有删除它,你的尝试可能会引发所有体面的反病毒程序。