【问题标题】:Programmatically installing unsigned driver with CreateService使用 CreateService 以编程方式安装未签名的驱动程序
【发布时间】:2018-04-14 21:01:46
【问题描述】:

我正在尝试安装从较旧的嵌入式解决方案(winxp 嵌入式)获得的未签名驱动程序,我目前正在反转该解决方案。我正在像软件一样安装和设置驱动程序,但是,由于驱动程序未签名,我无法安装它,至少以编程方式。

安装代码:

std::cout << "Installing driver from " << this->driverPath << std::endl;

SC_HANDLE scManager = OpenSCManagerA(0, 0, 0xF003F);
if (!scManager) {
    std::cout << "Failed to open SCManager" << std::endl;
    return;
}
SC_HANDLE hService = CreateServiceA(scManager, this->serviceName, this->serviceName, 0xF01FF, 1, 3, 1, this->driverPath, 0, 0, 0, 0, 0);
if (!hService) {
    hService = OpenServiceA(scManager, this->serviceName, 0xF01FF);
    if (!hService) {
        std::cout << "error: " << std::to_string(GetLastError()) << std::endl;
        CloseServiceHandle(scManager);
        return;
    }
    else {
        std::cout << "OK!" << std::endl;
    }
}

if (!StartServiceA(hService, 0, 0)) {
    std::cout << "StartService failed: " << std::to_string(GetLastError()) << std::endl;
    return;
}

基于此的命令行输出如下:

Installing driver from C:\driver.sys
OK!
StartService failed: 1275

错误代码是ERROR_DRIVER_BLOCKED。我试图通过进入高级启动和禁用签名强制来强制 Windows 允许我安装它,但唯一的影响是 Windows 不再给我一个单独的操作系统窗口告诉我它阻止了驱动程序安装。

我已经尝试了这里描述的三种方法,但没有任何运气:https://www.maketecheasier.com/install-unsigned-drivers-windows10/

(不过,我假设这些是为手动安装驱动程序的用户制作的)。

如何让 Windows 允许我以编程方式安装此未签名的驱动程序?

【问题讨论】:

  • 你已经安装好驱动了。让未签名的驱动程序运行 - bcdedit /set testsigning on 并重新启动
  • 我仍然遇到同样的错误。据我所知,驱动程序上没有“测试签名”,我认为它是一个没有任何签名的普通windowxp驱动程序。这是文件详细信息的截图:s1.petterroea.com/serve?hash=1649fd93423bea0e9297
  • 起初你混淆了安装和加载驱动程序。你安装好了。对于加载未签名的驱动程序基本上足够bcdedit /set testsigning on 并重新启动
  • 运行您建议的命令并重新启动后,我仍然在 StartService 上收到 1275
  • 但是您的系统是 64 位还是 32 位? 32位驱动只能在32位windows下运行

标签: windows winapi driver


【解决方案1】:

驱动程序是 32 位的,系统是 64 位的。使用 32 位系统可以解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2023-03-16
    • 2012-05-05
    • 2013-11-15
    • 2011-01-03
    • 2011-01-18
    相关资源
    最近更新 更多