我尝试实现密码过滤,所以我写了一个简单的密码过滤器。 我按照MSDN中的文档进行操作,并确保正确声明了这些函数。 我在VS 2010中编译。
LIBRARY myFilt
EXPORTS
InitializeChangeNotify
PasswordFilter
PasswordChangeNotify
#include <windows.h>
#include <stdio.h>
#include <ntsecapi.h>
void writeToLog(const char* szString)
{
FILE* pFile = fopen("c:\\work\\logFile.txt", "a+");
if (NULL == pFile)
{
return;
}
fprintf(pFile, "%s\r\n", szString);
fclose(pFile);
return;
}
// Default DllMain implementation
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
OutputDebugString(L"DllMain");
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
BOOLEAN __stdcall InitializeChangeNotify(void)
{
OutputDebugString(L"InitializeChangeNotify");
writeToLog("InitializeChangeNotify()");
return TRUE;
}
BOOLEAN __stdcall PasswordFilter(
PUNICODE_STRING AccountName,
PUNICODE_STRING FullName,
PUNICODE_STRING Password,
BOOLEAN SetOperation
)
{
OutputDebugString(L"PasswordFilter");
return TRUE;
}
NTSTATUS __stdcall PasswordChangeNotify(
PUNICODE_STRING UserName,
ULONG RelativeId,
PUNICODE_STRING NewPassword
)
{
OutputDebugString(L"PasswordChangeNotify");
writeToLog("PasswordChangeNotify()");
return 0;
}
我将myFilt.dll放入%windir%\system32
,将“myFilt”添加到注册表中的“Notification Packages”,重新启动计算机,更改密码,没有任何反应。
我打开了depends.exe,发现函数是正确的:
InitializeChangeNotify
PasswordChangeNotify
PasswordFilter
错误在哪里?
感谢。
答案 0 :(得分:1)
我发现了问题!我将运行时库从多线程调试DLL(/ MDd)更改为多线程调试(/ MTd),它完美无缺! :)
- user1375970 5月5日10:38
答案 1 :(得分:0)
通知包 指定设置或更改密码时加载或调用的动态链接库(DLL)。要指定多个文件,请在每个文件名之间按Enter键,将文件名一个列在另一个上面。
高于另一个!