2012-05-05 23 views
6

私はパスワードフィルタを実装しようとしていますので、簡単なパスワードフィルタを作成します。 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 

どこに間違いがある??

ありがとうございました。

+0

実際には、myFiltをレジストリキーに追加しましたか?それはDLLの名前なので...さらに、 'PasswordFilter'で' writeToLog'を呼び出すことを忘れていませんか? –

+0

Windowsがフィルタを読み込もうとしたかどうかと、後で何が起こるかを調べるためにプロセスモニタを試すことができます。 – sharptooth

+0

うん。私はmyFile XDではなくmyFiltを追加しました。プロセスモニタを実行して、scecli.dllファイルが開かれていることを確認してください。(このDLLは通知パッケージ(最初のもの)に書かれています) – 1337

答えて

1

問題が見つかりました。ランタイムライブラリをMulti-threaded Debug DLL(/ MDd)からMulti-threaded Debug(/ MTd)に変更しました。 :)

- user1375970 5月5日は10時38の

0

通知パッケージで はロードまたはパスワードが設定または変更されたときに呼び出され、ダイナミックリンクライブラリ(DLL)を指定します。複数のファイルを指定するには、各ファイル名の間にEnterキーを押してファイル名を上下に並べます。

もう1つ上の!