私はパスワードフィルタを実装しようとしていますので、簡単なパスワードフィルタを作成します。 MSDNの文書に従って、関数が正しく宣言されていることを確認してください。 私はVSでコンパイルし、2010年パスワードフィルタを実装できません
.defファイル:
LIBRARY myFilt
EXPORTS
InitializeChangeNotify
PasswordFilter
PasswordChangeNotify
.cppファイル:
#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;
}
私は%windir%\system32
でmyFilt.dllを入れて、追加「myFiltレジストリの "通知パッケージ"に移動し、コンピュータを再起動し、パスワードを変更しても何も起こりません。
私はDepends.exeは開かれ、機能が正しくされていることを見た:
InitializeChangeNotify
PasswordChangeNotify
PasswordFilter
どこに間違いがある??
ありがとうございました。
実際には、myFiltをレジストリキーに追加しましたか?それはDLLの名前なので...さらに、 'PasswordFilter'で' writeToLog'を呼び出すことを忘れていませんか? –
Windowsがフィルタを読み込もうとしたかどうかと、後で何が起こるかを調べるためにプロセスモニタを試すことができます。 – sharptooth
うん。私はmyFile XDではなくmyFiltを追加しました。プロセスモニタを実行して、scecli.dllファイルが開かれていることを確認してください。(このDLLは通知パッケージ(最初のもの)に書かれています) – 1337