AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Keyhook und Vista...

Ein Thema von moshhc · begonnen am 23. Jan 2008 · letzter Beitrag vom 23. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2   
moshhc

Registriert seit: 2. Jan 2008
10 Beiträge
 
Delphi 7 Enterprise
 
#1

Keyhook und Vista...

  Alt 23. Jan 2008, 00:30
Hallo Leute...

Kleines Problem..

Folgendes.. Ich habe einen Keyhook den ich systemweit setzte (funktionierte unter XP wunderbar) warte auf ein bestimmtes wort, was irgendwo eingeben werden kann (z.B.: unter Ausführen) dann kommt das Fenster in den Vordergrund.. Soweit verstanden? jetzt kommt mein GELIEBTES VISTA!!!
Ich starte die Exe datei im "normalen" Modus... also nix Admin.. alles Funktioniert!!! Jetzt kommt es!! Wenn ich die exe ALS ADMIN STARTE, dann kann ich nur die Keys abfangen die ich innerhalb meines Fensters schreibe... NICHT SYSTEMWEIT...

Hier der quellcode der dll.. ich denke denn werdet ihr schon mal gesehen haben...

Delphi-Quellcode:
library HookLib;



uses
  Windows,
  Messages,
  SysUtils;

type
  PHookRec = ^THookRec;
  THookRec = record
    AppHnd: Integer;
    MemoHnd: Integer;
  end;

var
  Hooked: Boolean;
  hKeyHook, hMemo, hMemFile, hApp: HWND;
  PHookRec1: PHookRec;

function KeyHookFunc(Code, VirtualKey, KeyStroke: Integer): LRESULT; stdcall;
var
  KeyState1: TKeyBoardState;
  AryChar: array[0..1] of Char;
  Count: Integer;
begin
  Result := 0;
  if Code = HC_NOREMOVE then Exit;
  Result := CallNextHookEx(hKeyHook, Code, VirtualKey, KeyStroke);
  if Code < 0 then
    Exit;

  if Code = HC_ACTION then
  begin
    if ((KeyStroke and (1 shl 30)) <> 0) then
      if not IsWindow(hMemo) then
      begin
        hMemFile := OpenFileMapping(FILE_MAP_WRITE, False, 'Global7v9k');
        PHookRec1 := MapViewOfFile(hMemFile, FILE_MAP_WRITE, 0, 0, 0);
        if PHookRec1 <> nil then
        begin
          hMemo := PHookRec1.MemoHnd;
          hApp := PHookRec1.AppHnd;
        end;
      end;
    if ((KeyStroke and (1 shl 30)) <> 0) then
    begin
      GetKeyboardState(KeyState1);
      Count := ToAscii(VirtualKey, KeyStroke, KeyState1, AryChar, 0);
      if Count = 1 then
      begin
        SendMessage(hMemo, WM_CHAR, Ord(AryChar[0]), 0);
        PostMessage(hApp, WM_USER + 1678, Ord(AryChar[0]), 0);
      end;
    end;
  end;
end;


function StartHook(MemoHandle, AppHandle: HWND): Byte; export;
begin
  Result := 0;
  if Hooked then
  begin
    Result := 1;
    Exit;
  end;
  if not IsWindow(MemoHandle) then
  begin
    Result := 4;
    Exit;
  end;
  hKeyHook := SetWindowsHookEx(WH_KEYBOARD, KeyHookFunc, hInstance, 0);
  if hKeyHook > 0 then
  begin
    hMemFile := CreateFileMapping($FFFFFFFF, // $FFFFFFFF gets a page memory file
      nil, // no security attributes
      PAGE_READWRITE, // read/write access
      0, // size: high 32-bits
      SizeOf(THookRec), // size: low 32-bits
      //SizeOf(Integer),
      'Global7v9k'); // name of map object
    PHookRec1 := MapViewOfFile(hMemFile, FILE_MAP_WRITE, 0, 0, 0);
    hMemo := MemoHandle;
    PHookRec1.MemoHnd := MemoHandle;
    hApp := AppHandle;
    PHookRec1.AppHnd := AppHandle;
    {set the Memo and App handles to the mapped file}
    Hooked := True;
  end
  else
    Result := 2;
end;

function StopHook: Boolean; export;
begin
  if PHookRec1 <> nil then
  begin
    UnmapViewOfFile(PHookRec1);
    CloseHandle(hMemFile);
    PHookRec1 := nil;
  end;
  if Hooked then
    Result := UnhookWindowsHookEx(hKeyHook)
  else
    Result := True;
  Hooked := False;
end;

procedure EntryProc(dwReason: DWORD);
begin
  if (dwReason = Dll_Process_Detach) then
  begin
    if PHookRec1 <> nil then
    begin
      UnmapViewOfFile(PHookRec1);
      CloseHandle(hMemFile);
    end;
    UnhookWindowsHookEx(hKeyHook);
  end;
end;

exports
  StartHook,
  StopHook;

begin
  PHookRec1 := nil;
  Hooked := False;
  hKeyHook := 0;
  hMemo := 0;
  DLLProc := @EntryProc;
  EntryProc(Dll_Process_Attach);
end.
Danke euch schonmal im Voraus..

Euer Moshi
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Keyhook und Vista...

  Alt 23. Jan 2008, 06:11
Zitat von moshhc:
Ich starte die Exe datei im "normalen" Modus... also nix Admin.. alles Funktioniert!!! Jetzt kommt es!! Wenn ich die exe ALS ADMIN STARTE, dann kann ich nur die Keys abfangen die ich innerhalb meines Fensters schreibe... NICHT SYSTEMWEIT..
"As Designed" um eine beliebte Angriffsfläche von nicht Priviligierten (z.B. IE) auf Systemprogramme (wie Firewall) nicht zu ermöglichen ist z.B. auch DDE (z.B. Drag&Drop von Dateien aus dem Windows Explorer auf das Editfenster einer als Admin laufenden Anwendung nicht möglich).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
moshhc

Registriert seit: 2. Jan 2008
10 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Keyhook und Vista...

  Alt 23. Jan 2008, 12:05
Jetzt mal im ernst, wenn es doch umgekehrt nicht funktionieren würde, dann wäre das ja logisch, aber als Admin ausgeführte exe nicht - das eröffnet doch viren und anderen zeugs doch tür und tor, wenn ich mit einer normal ausgeführten exe systemweit die Tastatur auslesen kann und als Admin-exe nicht!!!

Habe sogar der dll, die ich nutze, ein vista manifest gegeben.. aber PUSTEKUCHEN...

  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Keyhook und Vista...

  Alt 23. Jan 2008, 12:17
Melde dich mal als Admin an und probiere es dann noch mal.

Aber das ist schon richtig. Du kannst unter Vista nicht mehr auf Prozesse zugreifen, die in einem anderen Benutzerkontext laufen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Keyhook und Vista...

  Alt 23. Jan 2008, 12:18
Zitat von moshhc:
Jetzt mal im ernst, wenn es doch umgekehrt nicht funktionieren würde, dann wäre das ja logisch, aber als Admin ausgeführte exe nicht - das eröffnet doch viren und anderen zeugs doch tür und tor, wenn ich mit einer normal ausgeführten exe systemweit die Tastatur auslesen kann und als Admin-exe nicht!!!
Kannst du mit dem Hook mit normalen Rechten eine als Admin gestartete App hooken?

Aber es könnte auch sein das dieser Teil der Abschottung der Eingabe (primär wegen DRM) wieder aus Vista wegen "Wir schaffen es nicht bis 2010 und den Code kann keiner verstehen" gestrichen wurde
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
moshhc

Registriert seit: 2. Jan 2008
10 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Keyhook und Vista...

  Alt 23. Jan 2008, 12:30
Ich bin als admin user angemeldet... Also nochmal..

Ich klick zwei mal auf meine EXE... Dann klapt es mit dem Hook systemweit..
Ich klicke rechts auf die EXE sage "Als Administrator starten" und siehe da nix mehr systemweit...

Das problem an der ganzen sache ist ja, das mein Programm als Adminausgeführt laufen muss.. sonst kann es gewisse einträge in der Registry und dateizugriffe nicht machen..
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Keyhook und Vista...

  Alt 23. Jan 2008, 12:43
Zitat von moshhc:
Ich bin als admin user angemeldet... Also nochmal..

Ich klick zwei mal auf meine EXE... Dann klapt es mit dem Hook systemweit..
Ich klicke rechts auf die EXE sage "Als Administrator starten" und siehe da nix mehr systemweit...
Das kann ich mir so erklären:
Wenn Du als Admin angemeldet bist, kannst Du auf das ganze System zugreifen. Ist ja klar.
Als Benutzer angemeldet und das Programm mit "Run as Admin" ausgeführt, ist das anderst.
Dann gibt es zwei getrennte Benutzerkontexte. Und der "Run as Admin"-Prozess kann eben nur auf seinen gekapselten Kontext zugreifen. Also nicht systemweit.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
moshhc

Registriert seit: 2. Jan 2008
10 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Keyhook und Vista...

  Alt 23. Jan 2008, 12:59
Das klingt ja schonmal logisch.. nur leider ist der User voll-Admin, also ist das ja wiederum unlogisch oder muss ich da bei vista noch irgendwas lustiges beachten.. Mittlerweile habe ich keine lust mehr, für Vista was zu entwickeln... das ist ja wie mit nem Trabi übern Acker fahren...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Keyhook und Vista...

  Alt 23. Jan 2008, 13:29
Zitat von moshhc:
Das klingt ja schonmal logisch.. nur leider ist der User voll-Admin, also ist das ja wiederum unlogisch oder muss ich da bei vista noch irgendwas lustiges beachten..
Ja. Prozesse werden auch beim Admin mit aktiven UAC standardmäßig ohne Adminrechte gestartet. Erst wenn man den entsprechenden UAC-Dialog bestätigt bekommt der Prozess beim Start Adminrechte.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Keyhook und Vista...

  Alt 23. Jan 2008, 13:30
Zitat von moshhc:
Das klingt ja schonmal logisch.. nur leider ist der User voll-Admin, also ist das ja wiederum unlogisch oder muss ich da bei vista noch irgendwas lustiges beachten..
Das ist doch egal.
Es existieren durch das "Run as" zwei Benutzerkontexte.
Und keiner der beiden Kontexte kann auf den anderen zugreifen.

Zitat von moshhc:
Mittlerweile habe ich keine lust mehr, für Vista was zu entwickeln... das ist ja wie mit nem Trabi übern Acker fahren...
/offtopic
Ist eher, als ob man mit einem aktuellen übertechnologosierten Auto einen HotWeel-Start hinlegen möchte. Das geht auch nicht, weil die Elektronik das Durchdrehen der Räder verhindert. Man kann auch nicht auf einer verschneiten Strasse eine Schlitterfahrt machen wegen der Elektronik.
Das bringt die Modernisierung halt so mit sich.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:35 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