以编程方式使用CreateService安装未签名的驱动程序

时间:2018-04-14 21:01:46

标签: windows winapi driver

我正在尝试安装一个未签名的驱动程序,我从旧的嵌入式解决方案(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允许我以编程方式安装此未签名的驱动程序?

1 个答案:

答案 0 :(得分:0)

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