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



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

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

最新更新