драйвер umdf2 с CreateService - PullRequest
       78

драйвер umdf2 с CreateService

0 голосов
/ 10 января 2019

Можно ли запустить драйвер umdf2 с помощью API CreateService и StartService в Windows 10? Я ищу любой бегущий образец, который я мог бы сослаться.

Ранее я делал это с драйвером 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 голосов
/ 10 января 2019

Код ошибки сказал нам большинство вещей:

Система не может найти указанный файл.

Сначала проверьте, что (pDeviceName) .dll находится в текущем каталоге.

Во-вторых, проверьте его зависимости с помощью таких инструментов, как Dependency Walker , переместите их в текущий каталог или системный каталог, чтобы убедиться, что система также может найти зависимости.

Затем попробуйте проверить «regedit», открыть ключ HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ pDeviceName или другие похожие имена. Проверьте значение ключа «ImagePath», путь был в первый раз, когда вы создали его. Переместите dll на путь или измените путь на dll.

...