Извините, эта тема здесь уже поднималась, но я так и не нашел разрешения своей проблемы:
По рекомендациям 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 ее не загружает, по-видимому(((
В чем может быть ошибка?
Спасибо
Здравствуйте, 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" <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