加载设备驱动程序时ERROR_SERVICE_MARKED_FOR_DELETE

时间:2014-05-21 13:20:18

标签: windows driver device

互联网上有很多关于此事的内容,但没有一个是特定于我的。我使用以下代码从文件加载设备驱动程序:

    hService = OpenService (hManager, TC_DRIVER_NAME, SERVICE_ALL_ACCESS);
    if (hService != NULL)
    {
        // Now stop it
        SERVICE_STATUS status;
        if (::ControlService(hService, SERVICE_CONTROL_STOP, &status))
        { 
            int nLoop = 0;
            while (::QueryServiceStatus(hService, &status) && nLoop < 3)
            { 
                if (status.dwCurrentState == SERVICE_STOP_PENDING)
                {
                    Sleep(500);     
                    nLoop++;                                                        
                    continue;
                }
                if (status.dwCurrentState == SERVICE_STOPPED)                                                 
                    break;
            }
        } 
        // Remove stale service (driver is not loaded but service exists)
        DeleteService (hService);
        int n = GetLastError();
        CloseServiceHandle (hService);
        Sleep(500);
}

    hService = CreateService(.... 

我的问题是,如果我的应用程序崩溃 - 或者在Visual Studio中我停止调试而没有正确退出应用程序 - 那么DeleteService和CreateService将始终失败,错误为1072(ERROR_SERVICE_MARKED_FOR_DELETE)。我已经尝试了很多东西,比如更改currentControlSet中的注册表值,甚至删除所有注册表值,但只有重启才能使我能够正常进行。我猜有些句柄可能没有正确关闭,但有没有办法强制设备驱动程序正确删除而不重启?

作为预防措施,我已经添加了一个带有SetUnhandledExceptionFilter的异常处理程序来卸载驱动程序,这有点帮助,但如果我终止进程,它就不会被调用,当然,只有重启才能让我重新加载驱动程序。

由于

0 个答案:

没有答案