2012-05-05 24 views
6

Tôi cố gắng triển khai bộ lọc mật khẩu, vì vậy tôi viết một bộ lọc mật khẩu đơn giản. Tôi đã theo dõi tài liệu trong MSDN và đảm bảo rằng các hàm được khai báo chính xác. tôi biên dịch trong VS 2010.Không thể triển khai bộ lọc mật khẩu


tập tin .def:

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

tôi đặt myFilt.dll trong %windir%\system32, thêm "myFilt "để" Gói thông báo "trong sổ đăng ký, khởi động lại máy tính, thay đổi mật khẩu và không có gì xảy ra.

Tôi mở depends.exe và thấy rằng các chức năng là chính xác:

InitializeChangeNotify 
PasswordChangeNotify 
PasswordFilter 

Đâu là sai lầm ??

Cảm ơn.

+0

Bạn có thực sự thêm 'myFile' vào khóa sổ đăng ký, không phải' myFilt' không? Bởi vì đó là tên của DLL của bạn ... Hơn nữa, bạn không quên gọi 'writeToLog' trong' PasswordFilter'? –

+0

Bạn có thể thử Process Monitor để tìm xem Windows có cố tải bộ lọc của bạn hay không và điều gì sẽ xảy ra sau đó. – sharptooth

+0

Vâng. Tôi thêm myFilt, không myFile XD .. Tôi chạy quá trình theo dõi và thấy rằng các tập tin scecli.dll được mở .. (dll này được viết trong gói thông báo (đầu tiên)) – 1337

Trả lời

1

Tôi đã tìm thấy sự cố! Tôi đã thay đổi thư viện runtime từ Multi-threaded Debug DLL (/ MDd) thành Multi-threaded Debug (/ MTd) và nó hoạt động hoàn hảo! :)

- user1375970 05 tháng 5 tại 10:38

0

Notification Gói Chỉ định các thư viện liên kết động (DLL) mà được nạp hoặc gọi khi mật khẩu được thiết lập hoặc thay đổi. Để chỉ định nhiều hơn một tệp, hãy liệt kê tên tệp ở trên một tệp khác bằng cách nhấn ENTER giữa mỗi tên tệp.

phía trên khác!

Các vấn đề liên quan