Столкнулся с такой проблемой. Драйвер должен зарегистрировать службу. (если кто знает как из драйвера заюзать SCM еще лучше) Пишу в реестр: HANDLE hkey=NULL; OBJECT_ATTRIBUTES oa1; UNICODE_STRING RegistryKey; UNICODE_STRING DNP,valname1,valname2,valname3; WCHAR DN[15]=L"LSecure Service"; //display name RtlInitUnicodeString(&DNP, L"DisplayName"); ULONG value1=2; RtlInitUnicodeString(&valname1, L"Start"); ULONG value2=32; RtlInitUnicodeString(&valname2, L"Type"); ULONG value3=1; RtlInitUnicodeString(&valname3, L"ErrorControl"); WCHAR path[16]=L"c:\\lservice.exe"; //display name RtlInitUnicodeString(&Ppath, L"ImagePath"); RtlInitUnicodeString(&RegistryKey, L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\LSecure"); InitializeObjectAttributes(&oa1, &RegistryKey, OBJ_CASE_INSENSITIVE, NULL, NULL); status = ZwCreateKey(&hkey,KEY_WRITE, &oa1, 0, NULL,REG_OPTION_NON_VOLATILE,NULL); ZwSetValueKey(hkey, &DNP, 0, REG_SZ, &DN, sizeof(DN)); ZwSetValueKey(hkey, &valname1, 0, REG_DWORD, &value1, sizeof(ULONG)); ZwSetValueKey(hkey, &valname2, 0, REG_DWORD, &value2, sizeof(ULONG)); ZwSetValueKey(hkey, &valname3, 0, REG_DWORD, &value3, sizeof(ULONG)); ZwSetValueKey(hkey, &Ppath, 0, REG_EXPAND_SZ, &path, sizeof(path)); ZwClose(hkey); return status; В реестре с виду все нормально. Но когда делаю net start LSecure - вываливается с ошибкой. Файл не найден Может я не правильно пишу REG_EXPAND_SZ
для того чтобы установить службу мало добавить ее в реестр, надо еще зарегистрировать в SCM. Как это делать из ядра я точно не знаю, но возможно тебе поможет эта статья: _http://www.rootkit.com/newsread.php?newsid=419 если это все же обязательно должно быть инициировано из ядра то можно создать юзермодную APC, которая регистрирует эту службу.
Four-F пишет, что SCM регистрирует службы сразу после загрузки винды. Т.е. если добавить в службу реестр и перезагрузить то она будет установлена. Правда надо еще добавить REG_SZ с именем ObjectName и значением LocalSystem тогда твой код будет работать