![]() |
Winlogon Notify - DLL Funktionen werden nicht aufgerufen
Hi,
ich frage mich schon lange, wie eine Winlogon Notifier DLL aufgebaut sein muss. Eingetragen werden die DLLs in der Registry, das habe ich schon rausgefunden. Als Beipsiel mal den WGA Notifier:
Code:
Wie es scheint muss die DLL die Funktionen exportieren, die mit Logon, Startup, PostShell, etc angegeben werden.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon]
"Logon"="WLEventLogon" "Logoff"="WLEventLogoff" "Startup"="WLEventStartup" "Shutdown"="WLEventShutdown" "StartScreenSaver"="WLEventStartScreenSaver" "StopScreenSaver"="WLEventStopScreenSaver" "Lock"="WLEventLock" "Unlock"="WLEventUnlock" "StartShell"="WLEventStartShell" "PostShell"="WLEventPostShell" "Disconnect"="WLEventDisconnect" "Reconnect"="WLEventReconnect" "Impersonate"=dword:00000001 "Asynchronous"=dword:00000000 "SafeMode"=dword:00000001 "MaxWait"=dword:ffffffff "DllName"=hex(2):57,00,67,00,61,00,4c,00,6f,00,67,00,6f,00,6e,00,2e,00,64,00,\ 6c,00,6c,00,00,00 "Event"=dword:00000001 Kann mit jemand den Aufbau der Funktionen erklären oder noch besser ein Tutorial zeigen, in dem die einzelnen Events beschrieben sind und auch der sonstige Aufbau der DLL beschrieben wird? Florian |
Re: Winlogon Notify - Aufbau der DLL
Hi,
was du brauchst, kannst du in der MSDN nachlesen :wink: ![]() |
Re: Winlogon Notify - Aufbau der DLL
Mh das hab ich auch schon gefunden, aber wie kann ich Beispielsweise diese Funktion in meiner DLL implementieren?
Code:
ich vermute jetzt mal:
VOID WLEventLogon (PWLX_NOTIFICATION_INFO pInfo)
{ // Print the name of the handler to debug output. // You can replace this with more useful functionality. OutputDebugString (TEXT("NOTIFY: Entering WLEventLogon.\r\n")); }
Delphi-Quellcode:
die viel bessere Frage ist, wie ich folgendes deklariere:
procedure WLEventLogon(pInfo: PWLX_NOTIFICATION_INFO); stdcall;
Code:
Da hab ich überhaupt keinen Durchblick :oops:
typedef struct _WLX_NOTIFICATION_INFO {
ULONG Size; ULONG Flags; PWSTR UserName; PWSTR Domain; PWSTR WindowStation; HANDLE hToken; HDESK hDesktop; PFNMSGECALLBACK pStatusCallback; } WLX_NOTIFICATION_INFO, *PWLX_NOTIFICATION_INFO; Florian |
Re: Winlogon Notify - Aufbau der DLL
Schau doch mal in die Jedi Win32 Native API ... da ist alles drin was du brauchst (JwaWinWlx.pas) .
|
Re: Winlogon Notify - Aufbau der DLL
Delphi-Quellcode:
Type
PFNMSGECALLBACK = Procedure (????); StdCall; //??? fehlt! WLX_NOTIFICATION_INFO = Record Size: LongWord; Flags: LongWord; UserName: PWideChar; Domain: PWideChar; WIndowStation: PWideChar; hToken: THandle; hDesktop: THandle; // ich weiss nicht ob es einen HDESK Typ gibt pStatusCallBack: PFNMSGECALLBACK; End; TWLX_NOTIFICATION_INFO = WLX_NOTIFICATION_INFO; PWLX_NOTIFICATION_INFO = ^TWLX_NOTIFICATION_INFO; |
Re: Winlogon Notify - Aufbau der DLL
Wieso fehlt ????
Delphi-Quellcode:
PFNMSGECALLBACK = function(bVerbose: BOOL; lpMessage: LPWSTR): DWORD; stdcall;
|
Re: Winlogon Notify - Aufbau der DLL
Zitat:
Und das es da nicht fehlt, sollte jedem mit ein wenig geistigen Kapazitäten klar sein, weil sie sonst schlecht eine komplette Übersetzung der Struktur liefern könnten... :wall: |
Re: Winlogon Notify - Aufbau der DLL
Zitat:
Aber warum noch einmal übersetzen, wenn das schon jemand gemacht hat ???? Zitat:
|
Re: Winlogon Notify - Aufbau der DLL
So, vielen Dank an euch beide, die Deklarationen der Typen hab ich jetzt so:
Delphi-Quellcode:
Dann sollte es jetzt doch eingentlich funktionieren, wenn ich z.B. eine DLL erstelle, die die Funktion
type
PWSTR = PWideChar; HANDLE = Longword; PFNMSGECALLBACK = function(bVerbose: BOOL; lpMessage: LPWSTR): DWORD; stdcall; _WLX_NOTIFICATION_INFO = record Size: ULONG; Flags: ULONG; UserName: PWSTR; Domain: PWSTR; WindowStation: PWSTR; hToken: HANDLE; hDesktop: HDESK; pStatusCallback: PFNMSGECALLBACK; end; WLX_NOTIFICATION_INFO = _WLX_NOTIFICATION_INFO;
Delphi-Quellcode:
exportiert, oder?
procedure WLEventLogon(pInfo: PWLX_NOTIFICATION_INFO); stdcall;
Florian |
Re: Winlogon Notify - DLL Funktionen werden nicht aufgerufen
So, ich habe jetzt die folgende DLL, die einfach nur jede 10 Sekunden eine Message anzeigen soll:
Delphi-Quellcode:
Nur leider werden keine Nachrichten angezeigt. Nach einem Neustart ist die DLL ordnungsgemäß im Winlogon Prozess geladen, aber meine Events werden nicht abgearbeitet.
library WinLogon;
uses Windows, MMSystem, dialogs; type PWSTR = PWideChar; HANDLE = Longword; PFNMSGECALLBACK = function(bVerbose: BOOL; lpMessage: LPWSTR): DWORD; stdcall; _WLX_NOTIFICATION_INFO = record Size: ULONG; Flags: ULONG; UserName: PWSTR; Domain: PWSTR; WindowStation: PWSTR; hToken: HANDLE; hDesktop: HDESK; pStatusCallback: PFNMSGECALLBACK; end; WLX_NOTIFICATION_INFO = _WLX_NOTIFICATION_INFO; PWLX_NOTIFICATION_INFO = ^WLX_NOTIFICATION_INFO; var TimerID: Longword; DelayTime: integer = 10000; Files: Textfile; procedure TimerCallback(uTimer, uMessage, dwUser, dw1, dw2: Cardinal); stdcall; begin showmessage('test'); end; procedure WLEventLogon(pInfo: PWLX_NOTIFICATION_INFO); stdcall; begin TimerID := timeSetEvent(DelayTime, 0, TimerCallback, 0, 0); end; procedure WLEventLogoff(pInfo: PWLX_NOTIFICATION_INFO); stdcall; begin timeKillEvent(TimerID); end; exports WLEventLogon, WLEventLogoff; begin end. In der Registry habe ich
Code:
zu dem Dllnamen und Impersonate und Asynchronous eingetragen.
"Logon"="WLEventLogon"
"Logoff"="WLEventLogoff" Florian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz