无法使helper可执行文件中的launchd kextcache无效

时间:2016-09-07 11:08:35

标签: objective-c macos elevated-privileges kernel-extension smjobbless

我已经构建了一个卸载程序,它使用提升的权限调用帮助程序可执行文件来删除我的驱动程序的launchd-plist,以便它不会在下一个引导周期再次出现。

为了反映/Library/LaunchDaemons的新阶段,我使用此question中显示的以下命令touch /Library/Extensions/使kextcache无效。

但是,当我删除plist文件后立即从帮助程序可执行文件执行此操作时,它将不会成功,并且我的驱动程序在重新启动后仍然会启动。 当我通过在卸载程序帮助程序完成后立即键入命令touch /Library/Extensions来手动执行此操作时,它就可以完成。

这是我的代码在第一个选项中的样子(从帮助程序exec中失效)。

        remove(OSX_LAUNCHD_PLIST_PATH);
        pid_t pid = -1;
        char const * args[] = {"touch", "/Library/Extensions", NULL};
        posix_spawn(&pid, "/usr/bin/touch", NULL, NULL, (char **)args, NULL);
        waitpid(pid, &status, WNOHANG|WUNTRACED);

也许你可以告诉我为什么我会在每个选项中得到不同的行为。

更新:

似乎缓存失效需要多次重复此命令。这段代码对我有用,但我不知道为什么......

        for (int x=0 ; x < 2; x++ ) {
            char const * args[] = {"touch", "/Library/Extensions", NULL};
            posix_spawn(&pid, "/usr/bin/touch", NULL, NULL, (char **)args, NULL);
            waitpid(pid, &status, WNOHANG|WUNTRACED);
            char const * args2[] = {"touch", "/System/Library/Extensions", NULL};
            posix_spawn(&pid, "/usr/bin/touch", NULL, NULL, (char **)args2, NULL);
            waitpid(pid, &status, WNOHANG|WUNTRACED);
        }

0 个答案:

没有答案