Я пишу собственный пакет проверки подлинности Windows, но LSA не загружает мою Dll.
У меня есть следующие методы, экспортированные через файл .def
EXTERN_C __declspec(dllexport) NTSTATUS NTAPI SpLsaModeInitialize( УЛОНГ LsaВерсия, Версия пакета PULONG, PSECPKG_FUNCTION_TABLE * ppTables, PULONG ПКСтолы ) { __LOG_TRACE_FUNC_BEGIN(); // Запись записи журнала в C:\temp\log.txt *PackageVersion = SECPKG_INTERFACE_VERSION; *ppTables = sp_lsa_function_table; *pcTables = 1; __LOG_TRACE_FUNC_END(); // Запись записи журнала в C:\temp\log.txt вернуть 0; } У меня также есть функции DllMain и DllInit.
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { __LOG_TRACE_FUNC_BEGIN(); // Запись записи журнала в C:\temp\log.txt переключатель (ul_reason_for_call) { случай DLL_PROCESS_ATTACH: случай DLL_THREAD_ATTACH: случай DLL_THREAD_DETACH: случай DLL_PROCESS_DETACH: перерыв; } __LOG_TRACE_FUNC_END(); // Запись записи журнала в C:\temp\log.txt вернуть ИСТИНА; } BOOLEAN DllInit (В PVOID DllHandle, В причине ULONG, В контексте PCONTEXT НЕОБЯЗАТЕЛЬНО) { __LOG_TRACE_FUNC_BEGIN(); // Запись записи журнала в C:\temp\log.txt переключатель (причина) { случай DLL_PROCESS_ATTACH: #если определено (ОТЛАДКА) ОтладкаBreak(); #endif InitializeCriticalSection(&DllCritSect); перерыв; случай DLL_PROCESS_DETACH: EnterCriticalSection(&DllCritSect); LeaveCriticalSection(&DllCritSect); УдалитьКритическийРаздел(&DllCritSect); перерыв; } __LOG_TRACE_FUNC_END(); // Запись записи журнала в C:\temp\log.txt вернуть ИСТИНА; UNREFERENCED_PARAMETER (Контекст); UNREFERENCED_PARAMETER (DllHandle); } У меня есть определение экспорта в dap.def, как показано ниже,
ЭКСПОРТ DllMain Дллинит SpLsaModeInitialize У меня также есть файл dap.dll.manifest (хотя я не уверен, нужен ли он. Файл манифеста требовался для другой части проекта — учетных данных провайдер)
Моя Dll скомпилирована для Release/x64.
Я подписываю свою Dll (dap.dll), как показано ниже (не уверен, является ли этот шаг обязательным)
makecert.exe -sv dap.pvk -n "CN=Даллас" dap.cer -r pvk2pfx.exe -pvk dap.pvk -spc dap.cer -pfx dap.pfx -po 123 Signtool.exe подписывает /f "dap.pfx" /p 123 "dap.dll" Затем я перемещаю свой файл dap.dll в Windows\System32 на целевой виртуальной машине Windows 10 и добавляю следующую запись реестра.

Я также пробовал добавить то же самое в Пакеты безопасности.

Затем я перезапускаю виртуальную машину.
Но ни одна из этих попыток не сработала, и моя Dll никогда не вызывается (Я не вижу ни одной созданной записи в журнале.).
Вот информация о моей ОС

Мои вопросы:
[*]Все ли я делаю правильно? или я пропустил какой-то шаг? [*]Обязателен ли этап подписания и правильно ли я его делаю? [*]Когда процесс Local Security Authority игнорирует мою DLL, создает ли он какие-либо записи о событиях? Я попробовал включить события %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-LSA%4Operational.evtx, но ничего полезного не получилось. Есть ли другое место? [*]Есть ли другой способ устранить эту неполадку?
С уважением!
Мобильная версия