AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Winlogon Notify - DLL Funktionen werden nicht aufgerufen
Thema durchsuchen
Ansicht
Themen-Optionen

Winlogon Notify - DLL Funktionen werden nicht aufgerufen

Ein Thema von Zacherl · begonnen am 17. Nov 2006 · letzter Beitrag vom 17. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Winlogon Notify - DLL Funktionen werden nicht aufgerufen

  Alt 17. Nov 2006, 18:34
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:
[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
Wie es scheint muss die DLL die Funktionen exportieren, die mit Logon, Startup, PostShell, etc angegeben werden.

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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: Winlogon Notify - Aufbau der DLL

  Alt 17. Nov 2006, 18:43
Hi,

was du brauchst, kannst du in der MSDN nachlesen

Creating a Winlogon Notification Package
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Winlogon Notify - Aufbau der DLL

  Alt 17. Nov 2006, 18:49
Mh das hab ich auch schon gefunden, aber wie kann ich Beispielsweise diese Funktion in meiner DLL implementieren?

Code:
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"));
}
ich vermute jetzt mal:

procedure WLEventLogon(pInfo: PWLX_NOTIFICATION_INFO); stdcall; die viel bessere Frage ist, wie ich folgendes deklariere:

Code:
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;
Da hab ich überhaupt keinen Durchblick

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: Winlogon Notify - Aufbau der DLL

  Alt 17. Nov 2006, 18:53
Schau doch mal in die Jedi Win32 Native API ... da ist alles drin was du brauchst (JwaWinWlx.pas) .
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Winlogon Notify - Aufbau der DLL

  Alt 17. Nov 2006, 18:54
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;
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#6

Re: Winlogon Notify - Aufbau der DLL

  Alt 17. Nov 2006, 18:57
Wieso fehlt ????

 PFNMSGECALLBACK = function(bVerbose: BOOL; lpMessage: LPWSTR): DWORD; stdcall;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Winlogon Notify - Aufbau der DLL

  Alt 17. Nov 2006, 19:05
Zitat von ACE-ppc:
Wieso fehlt ????
Und wo bitte ist diese Deklaration in dem Code Ausschnitt von Florian Bernd? Ich habe in der Zeit wo du einfach nur verlinkst die Struktur mit eigenem Grips übersetzt und die oben genannte Funktion konnte ich nicht übersetzen, da mir deren Deklaration fehlt. Ich habe rein gar nix auf deine verlinkte Unit bezogen.

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...
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#8

Re: Winlogon Notify - Aufbau der DLL

  Alt 17. Nov 2006, 19:13
Zitat von Muetze1:

Und wo bitte ist diese Deklaration in dem Code Ausschnitt von Florian Bernd? Ich habe in der Zeit wo du einfach nur verlinkst die Struktur mit eigenem Grips übersetzt und die oben genannte Funktion konnte ich nicht übersetzen, da mir deren Deklaration fehlt. Ich habe rein gar nix auf deine verlinkte Unit bezogen.
Das war für mich nicht ganz so ersichtlich !
Aber warum noch einmal übersetzen, wenn das schon jemand gemacht hat ????


Zitat von Muetze1:
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...
Ich denke ... selbst jemand mit wenig geistigen Kapazitäten kann das auch normal äußern !
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

Re: Winlogon Notify - Aufbau der DLL

  Alt 17. Nov 2006, 19:37
So, vielen Dank an euch beide, die Deklarationen der Typen hab ich jetzt so:

Delphi-Quellcode:
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;
Dann sollte es jetzt doch eingentlich funktionieren, wenn ich z.B. eine DLL erstelle, die die Funktion

procedure WLEventLogon(pInfo: PWLX_NOTIFICATION_INFO); stdcall; exportiert, oder?

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

Re: Winlogon Notify - DLL Funktionen werden nicht aufgerufen

  Alt 17. Nov 2006, 21:31
So, ich habe jetzt die folgende DLL, die einfach nur jede 10 Sekunden eine Message anzeigen soll:

Delphi-Quellcode:
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.
Nur leider werden keine Nachrichten angezeigt. Nach einem Neustart ist die DLL ordnungsgemäß im Winlogon Prozess geladen, aber meine Events werden nicht abgearbeitet.

In der Registry habe ich

Code:
"Logon"="WLEventLogon"
"Logoff"="WLEventLogoff"
zu dem Dllnamen und Impersonate und Asynchronous eingetragen.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz