带有CreateService的umdf2驱动程序

时间:2019-01-10 02:26:08

标签: c++ windows winapi driver umdf

我可以在Windows 10中使用CreateServiceStartService API来启动umdf2驱动程序吗?我正在寻找任何可以参考的运行示例。

我以前使用WDM驱动程序完成了此操作,但是目前我无法使用umdf2驱动程序完成此操作。这是代码

WCHAR strPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, strPath);
std::wstring binaryPath(strPath);
binaryPath += L"\\" + pDeviceName + L".dll";

std::string logPath(binaryPath.begin(), binaryPath.end());
cout << "Load Path : " << logPath << endl;

SC_HANDLE hManager, hService;
hManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (!hManager) {
    DWORD err = GetLastError();
    if (err == ERROR_ACCESS_DENIED) {
        cout << "OPenSCManager Access denied - run administration access" << endl;
    } else {
        cout << "OPenSCManager Error : " << err << endl;
    }
    return;
}

hService = CreateService(hManager, pDeviceName.c_str(), pDeviceName.c_str(), SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
    SERVICE_ERROR_NORMAL, binaryPath.c_str(), NULL, NULL, NULL, NULL, NULL);
if (!hService) {
    hService = OpenService(hManager, pDeviceName.c_str(), SERVICE_ALL_ACCESS);
    if (!hService) {
        CloseServiceHandle(hManager);
        return;
    }
}

if (!StartService(hService, 0, NULL)) {
    DWORD err = GetLastError();
    cout << "StartService Error : " << err << endl;
    if (err == ERROR_SERVICE_ALREADY_RUNNING) {
        cout << "Already running" << endl;
    }
}

CloseServiceHandle(hManager);
CloseServiceHandle(hService);

pDeviceName是指驱动程序名称。代码执行失败,并显示错误2:

StartService Error : 2

我在Win7和Win10中都对此进行了测试,结果是相同的。

1 个答案:

答案 0 :(得分:0)

错误代码告诉了我们大多数事情:

  

系统找不到指定的文件。

首先,检查(pDeviceName).dll是否位于当前目录中。

第二,使用Dependency Walker之类的工具检查其依赖性,将它们移至“当前目录”或“系统目录”,以确保系统也可以找到依赖性。

然后尝试检查“ regedit”,打开注册表项HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ pDeviceName或其他类似的名称。检查键值“ ImagePath”,该路径是您首次创建它。将dll移至路径或将路径更改为dll。