2012-05-05 10 views
6

Intento implementar filtro de contraseña, así que escribo un filtro de contraseña simple. Seguí el documento en MSDN y me aseguro de que las funciones se declararon correctamente. puedo compilar el VS 2010.No se puede implementar el filtro de contraseña


archivo .def:

LIBRARY myFilt 
EXPORTS 
    InitializeChangeNotify 
    PasswordFilter 
    PasswordChangeNotify 

archivo .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; 
} 

puse myFilt.dll en %windir%\system32, añadir "myFilt "a" Paquetes de notificación "en el registro, reinicie la computadora, cambie la contraseña y no pase nada.

me abrió depends.exe y vio que las funciones sean correctamente:

InitializeChangeNotify 
PasswordChangeNotify 
PasswordFilter 

¿Dónde está el error ??

Gracias.

+0

¿Realmente añadir 'myFile' a la clave de registro, no' myFilt'? Porque ese es el nombre de su DLL ... Además, ¿no olvidó llamar a 'writeToLog' en' PasswordFilter'? –

+0

Puede probar Process Monitor para ver si Windows intenta cargar su filtro y qué ocurre después. – sharptooth

+0

Sí. Agregué myFilt, no myFile XD .. Ejecuto el monitor del proceso y veo que el archivo scecli.dll está abierto ... (este dll está escrito en Paquetes de notificación (el primero)) – 1337

Respuesta

1

¡He encontrado el problema! Cambié la biblioteca de tiempo de ejecución de la DLL de depuración de subprocesos múltiples (/ MDd) a la depuración multiproceso (/ MTd) y funciona perfectamente. :)

- user1375970 5 de mayo a 10:38

0

Paquetes de notificación Especifica las bibliotecas de vínculos dinámicos (DLL) que se cargan o llamar cuando las contraseñas se establecen o modifican. Para especificar más de un archivo, enumere los nombres de archivo uno encima del otro presionando ENTER entre cada nombre de archivo.

encima del otro!

Cuestiones relacionadas