Winlogon Notification DLL
От: Sphinks Россия  
Дата: 05.06.03 06:02
Оценка:
Извините, эта тема здесь уже поднималась, но я так и не нашел разрешения своей проблемы:

По рекомендациям MSDN написал библиотеку:


#include <windows.h>
#include <SysUtils.hpp>
#include "Winwlx.h"

#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{


    switch (fwdreason)
    {
        case DLL_PROCESS_ATTACH:
            {
             //Disable DLL_THREAD_ATTACH & DLL_THREAD_DETACH
             //notification calls. This is a performance optimization
             //for multi-threaded applications that do not need
             //thread-level notifications of attachment or detachment.
            DisableThreadLibraryCalls (hinstDLL);
            }
            break;
    }

    return TRUE;
}

extern "C" VOID __declspec(dllexport) WLEventLock(PWLX_NOTIFICATION_INFO pInfo)
{ int fHandle;
 FileCreate("C:\\Logons.txt");
 FileWrite(fHandle,IntToStr(Now()).c_str(),StrLen(IntToStr(Now()).c_str()));
 FileWrite(fHandle,"\n",StrLen("\n"));
 FileWrite(fHandle,"User logoff : ",StrLen("User logoff : "));
 AnsiString buf;
 buf =pInfo->UserName;
 FileWrite(fHandle,buf.c_str(),StrLen(buf.c_str()));
 FileWrite(fHandle,"\n",StrLen("\n"));
 FileClose(fHandle);
}

(реализация — Borland CBuilder 6)
так вот, если цеплятьс як этой DLL из какой нибудь проги, то все нормально, а Winlogon ее не загружает, по-видимому(((
В чем может быть ошибка?

Спасибо
Re: Winlogon Notification DLL
От: Alex Fedotov США  
Дата: 05.06.03 13:53
Оценка:
Здравствуйте, Sphinks, Вы писали:

S>

S>#include <windows.h>
S>#include <SysUtils.hpp>
S>#include "Winwlx.h"

S>#pragma argsused
S>BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
S>{


S>    switch (fwdreason)
S>    {
S>        case DLL_PROCESS_ATTACH:
S>            {
S>             //Disable DLL_THREAD_ATTACH & DLL_THREAD_DETACH
S>             //notification calls. This is a performance optimization
S>             //for multi-threaded applications that do not need
S>             //thread-level notifications of attachment or detachment.
S>            DisableThreadLibraryCalls (hinstDLL);
S>            }
S>            break;
S>    }

S>    return TRUE;
S>
S>extern "C" VOID __declspec(dllexport) WLEventLock(PWLX_NOTIFICATION_INFO pInfo)
S>{ int fHandle;
S> FileCreate("C:\\Logons.txt");
S> FileWrite(fHandle,IntToStr(Now()).c_str(),StrLen(IntToStr(Now()).c_str()));
S> FileWrite(fHandle,"\n",StrLen("\n"));
S> FileWrite(fHandle,"User logoff : ",StrLen("User logoff : "));
S> AnsiString buf;
S> buf =pInfo->UserName;
S> FileWrite(fHandle,buf.c_str(),StrLen(buf.c_str()));
S> FileWrite(fHandle,"\n",StrLen("\n"));
S> FileClose(fHandle);
S>}
S>

S>(реализация — Borland CBuilder 6)
S>так вот, если цеплятьс як этой DLL из какой нибудь проги, то все нормально, а Winlogon ее не загружает, по-видимому(((
S>В чем может быть ошибка?

А как ты ее регистрируешь? Я, конечно, не знаю тонкостей Builder, но на первый взгляд здесь две проблемы:

1) отсутствует __stdcall, то есть должно быть

extern "C" VOID __declspec(dllexport) __stdcall WLEventLock(...);

2) имя, под которым экспортируется функция, а именно _WLEventLock@4, не совпадает с тем, которое ты регистрируешь для WinLogon.
-- Alex Fedotov
Re[2]: Winlogon Notification DLL
От: Sphinks Россия  
Дата: 06.06.03 03:57
Оценка:
"Alex Fedotov" <forum@rsdn.ru> сообщилв новостях следующее: news:288255@news.rsdn.ru...
>>А как ты ее регистрируешь? Я, конечно, не знаю тонкостей Builder, но на первый >>взгляд здесь две проблемы:

>>1) отсутствует __stdcall, то есть должно быть


>>extern "C" VOID __declspec(dllexport) __stdcall WLEventLock(...);


>>2) имя, под которым экспортируется функция, а именно _WLEventLock@4, не >>совпадает с тем, которое ты регистрируешь для WinLogon.


Спасибо, но вроде уже пошло.
Если интересно, осталось так:
1) Не знаю, критично ли это, но я оставил только
#include <windows.h>
#include <Winwlx.h>
думаю, что не критично, но...
2) DLL должна лежать в system32, а не в system
3) Заголовок функции:
extern "C" __declspec(dllexport)
WLEventLock(PWLX_NOTIFICATION_INFO pInfo)
из Билдера в этом случае она экспортируется так: _WLEventLock
Не знаю, что из этого решило проблему, точно не 3-е, так как до этого DLL даже не грузилась (в DllMain был лог в реестр), т.е. ей было все равно, какие у нее там функции.
Posted via RSDN NNTP Server 1.5
Re[3]: Winlogon Notification DLL
От: Аноним  
Дата: 07.06.03 05:31
Оценка:
Eshe odin variant:
runtime libebray moget putat'tsya ispol'zovat' funkcii dostupa k pol'szovatel'sckoi sredu, kototroi na moment zagruzki winlogon ne sushestvuet. Ya takuyu problemu lechil vukiduvaniem vsekh ssulok na runtime lib.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.