Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot implement password filter

I try to implement password filter, so I write a simple password filter. I followed the document in the MSDN, and make sure that the functions are declared correctly. I compile in VS 2010.


.def file:

LIBRARY myFilt
EXPORTS
   InitializeChangeNotify
   PasswordFilter
   PasswordChangeNotify

.cpp file:

#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;
}

I put myFilt.dll in %windir%\system32, add "myFilt" to "Notification Packages" in the registry, restart the computer, change the password, and nothing happens.

I opened depends.exe and saw that the functions are correctly:

InitializeChangeNotify
PasswordChangeNotify
PasswordFilter

Where is the mistake??

Thanks.

like image 380
1337 Avatar asked May 05 '12 09:05

1337


People also ask

What is password filtering?

Password filters are used to enforce password policy. Filters validate new passwords and indicate whether the new password conforms to the implemented password policy.

What is DLL in Active Directory?

dll is a dynamic link library, either custom-written or provided as a part of a commercial solution, that allows filtering specific passwords from use in an organization's Active Directory environment.


1 Answers

I found the problem! I changed the runtime library from Multi-threaded Debug DLL (/MDd) to Multi-threaded Debug (/MTd) and it works perfect! :)

– user1375970 May 5 at 10:38

like image 110
Bill the Lizard Avatar answered Oct 03 '22 00:10

Bill the Lizard