Да.Вы начинаете с вызова
SC_HANDLE manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (manager)
{
wprintf(L"Opened SC Manager\n");
}
else
{
wprintf(L"Open SC Manager failed\n");
return;
}
Затем, сохраняя INF-файл в szInfFileName, вы звоните:
HInf = SetupOpenInfFile(szInfFileName.c_str(), NULL, INF_STYLE_WIN4, &ErrorLine);
Затем вызываете
if (SetupInstallFileEx(HInf, NULL, SourceFile, SourcePathRoot, DestinationName, SP_COPY_NEWER_OR_SAME, NULL, Context, &FileWasInUse) == NULL)
SourceFile = имя файла драйвера (оканчивающееся на .sys) SourcePathRoot = расположение файла драйвера (будет путем, из которого запускается ваша программа) DestinationName = полный путь кустанавливаемый драйвер (например:
c:\windows\system32\drivers\yourdriver.sys
Затем есть Реестр. Вам необходимо добавить запись для вашего драйвера в
HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \
эта запись (ключ) должна иметь: Имя драйвера, отображаемое имя, описание, ErrorControl и Group.
Следующим шагом вы запускаете драйвер, используя:
SC_HANDLE service = CreateService (менеджер, DRIVER_NAME, DRIVER_NAME, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, KeyName, NULL, NULL, NULL, NULL, NULL);
, когда путь к ключу в системе равен KeyNameпоявился в записи реестра.Например:
system32\drivers\yourdriver.sys
Последний шаг:
BOOL result = StartService(service, 0, NULL);
и очистка
CloseServiceHandle(manager)