Windows 7 驱动程序服务启动
Windows 7 driver service start
我正在尝试在Windows 7上运行驱动程序服务。首先,我的代码安装服务,然后尝试运行它。我的问题是 StartService 返回错误代码 2 - "系统找不到指定的文件。
驱动程序和代码是在 Windows 10 中开发的,在 32 位 win7 虚拟机上调试。但是,该驱动程序是为Windows 7开发的。
Procmon在StartService - services中表现出非常奇怪的行为.exe只查询了HKLM\System\CurrentControlSet\services\KMDFDriver2\ObjectName键,该键不存在。.sys文件的路径位于 HKLM\System\CurrentControlSet\services\KMDFDriver2\ImagePath 中。我怀疑这可能是原因。
你能帮忙吗?
SC_HANDLE InstallDriver(LPCWSTR driverName, LPCWSTR binaryPath)
{
SC_HANDLE scmDBHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (scmDBHandle == NULL)
{
DBG_TRACE("InstallDriver", "could not open handle to SCM database");
PrintError();
return NULL;
}
SC_HANDLE svcHandle = CreateService(
scmDBHandle,
driverName,
driverName,
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
binaryPath,
NULL, NULL, NULL, NULL, NULL
);
if (svcHandle == NULL)
{
DWORD lastError = GetLastError();
if (lastError == ERROR_SERVICE_EXISTS)
{
DBG_TRACE("InstallDriver", "driver already installed");
svcHandle = OpenService(scmDBHandle, driverName, SERVICE_ALL_ACCESS);
if (svcHandle == NULL)
{
DBG_TRACE("InstallDriver", "could not open handle to driver");
PrintError();
CloseServiceHandle(scmDBHandle);
return NULL;
}
CloseServiceHandle(scmDBHandle);
return svcHandle;
}
DBG_TRACE("InstallDriver", "could not create handle to driver");
PrintError();
return NULL;
}
DBG_TRACE("InstallDriver", "Function returning succesfuly");
CloseServiceHandle(scmDBHandle);
return svcHandle;
}
BOOL LoadDriver(SC_HANDLE svcHandle)
{
//DebugBreak();
if (StartService(svcHandle, 0, NULL) == 0)
{
if (GetLastError() == ERROR_SERVICE_ALREADY_RUNNING)
{
DBG_TRACE("loadDriver", "driver already running");
return TRUE;
}
else
{
DBG_TRACE("loadDriver", "driver failed loading");
PrintError();
return FALSE;
}
}
DBG_TRACE("loadDriver", "driver loaded succesfuly");
return TRUE;
}
int main() {
SC_HANDLE driver = InstallDriver(L"KMDFDriver2", L"C:\Windows\System32\drivers\KMDFDriver2.sys");
LoadDriver(driver);
CloseServiceHandle(driver);
}
如果您的驱动程序安装程序编译为 x86 并在 x64 Windows 上运行,则 Windows 文件系统和注册表重定向可能存在此问题。简而言之 - %WINDIR%SysWoW64
中放置了 x86 环境的不同目录,%WINDIR%System32
中放置了本机 x64 环境。如果您的 x86 安装程序尝试打开C:WindowsSystem32driversKMDFDriver2.sys
文件,它将获取C:WindowsSysWOW64driversKMDFDriver2.sys
路径。为避免这种情况,请尝试使用Wow64DisableWow64FsRedirection()
函数。
https://en.wikipedia.org/wiki/WoW64#Registry_and_file_system
https://technet.microsoft.com/ru-ru/aa384187
如果它没有帮助,请检查您的UNICODE
和_UNICODE
定义,因为您使用DBG_TRACE
使用LPCSTR
,因此可能未定义。Unicode 字符串将是有效的 ANSI 字符串,但它将被截断为第一个零字节 - 并且只有 1 个字符。因此,Windows 无法访问名为 "K"
的二进制路径名为 "C"
的驱动程序
- Win7 C++ - 从以用户身份登录的服务启动可执行文件的问题
- Windows 服务在启动时不进入_tmain
- IO服务重新启动后,Boost最后期限计时器持续触发
- WTSFreeMemory在启动期间从服务调用时挂起-我应该省略吗
- 如何读取windows服务启动的控制台应用程序的输出
- 通过服务启动进程后,从SHGetKnownFolderPath 0x80070005错误
- 阻止进程在从服务启动时启动,并在某些进程关闭后继续运行服务。
- LG电视通过串行使用Windows服务在PC开机后运行约30秒 - 如何更快地启动服务
- 如何从 Windows 上的服务在未登录用户的桌面上启动应用程序
- 如何调试由于"TypeInitializationException"而无法启动的服务
- Windows 服务启动的超时值是多少
- Selinux拒绝在Android 8上启动服务
- Windows 7 驱动程序服务启动
- 在使用WiX进行主要升级后无法启动Windows服务
- 如何从 NDK 安卓启动服务
- 如何在 c++ 中获取有关服务的启动类型的信息
- 错误 1503:服务未及时响应启动或控制请求
- 服务重新启动后未释放套接字
- 启动服务时找不到文件
- 启动服务在启动时需要很长时间