AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi USB - Autostart dynamisch unterbinden

USB - Autostart dynamisch unterbinden

Ein Thema von Schwedenbitter · begonnen am 20. Sep 2009 · letzter Beitrag vom 27. Feb 2015
Antwort Antwort
Seite 4 von 4   « Erste     234
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#31

Re: USB - Autostart dynamisch unterbinden

  Alt 1. Mär 2010, 20:43
Zitat von Schwedenbitter:
Insgesamt bin ich aber an dem Thema immer noch interessiert. Falls also jemand eine einfach Lösung ohne Dienst etc. hat, dann bitte her damit.
Hallo Schwedenbitter, anbei Hook Template zum Abfangen und Ändern der WM_DEVICECHANGE message.
Das Teil setzt soweit unten an, dass die Windowsmessages hier Aufschlagen bevor diese an die zuständige WndProc
gesendet werden.


Verwendung:
DLL einfach mit CreateHook aufrufen.


PS. Dient als Template, habs nicht vollständig durchgetestet, Feintuning eventuell Manuelle Parametrisierung
sowie IPC noch notwendig.




Delphi-Quellcode:

library Project1;

  {$IMAGEBASE $03900000}

uses
  windows,
  messages;

Type
   PDevBroadcastHdr = ^TDevBroadcastHdr;
   TDevBroadcastHdr = Packed Record
                          dbcd_size : DWORD;
                          dbcd_devicetype : DWORD;
                          dbcd_reserved : DWORD;
                        end;

var
  hWndProcHook: HHOOK=0;

// wParam:
// [in] Specifies whether the message was sent by the current thread.
// If the message was sent by the current thread, it is nonzero;
// otherwise, it is zero.
// lParam:
// [in] Pointer to a CWPSTRUCT structure that contains details about
// the message.
//
// PCWPSTRUCT:
// lParam
// Specifies additional information about the message.
// The exact meaning depends on the message value.
// wParam
// Specifies additional information about the message.
// The exact meaning depends on the message value.
// message
// Specifies the message.
// hwnd
// Handle to the window to receive the message.

function CallWndProc(Code: integer; wParam: WPARAM; lParam: LPARAM): LResult; stdcall;
var
  pCWP: PCWPSTRUCT;
begin
  if Code >= 0 then begin
     Result := CallNextHookEx(hWndProcHook, Code, wParam, lParam);
  end else begin
     Result := CallNextHookEx(0, Code, wParam, lParam);
     EXIT;
  end;

  pCWP := pointer(lParam);

  if pCWP^.message = WM_DEVICECHANGE then begin
    case pCWP^.wParam of
    $8000 :
      if PDevBroadcastHdr(pCWP^.lParam)^.dbcd_devicetype = $00000002 then
      begin
        //-- Fenster der Hostapplication suchen und an dieses posten,
        //-- oder Host Application speichert Handle vor dem Laden der DLL in
        //-- shared memory oder Registry.
        //-- Elegant wäre hier eine IPC mit einem PIPE Client oder Socket Client

      end;
    $8004 :
      if PDevBroadcastHdr(pCWP^.lParam)^.dbcd_devicetype = $00000002 then
      begin
         //-- Ergo wie oben
      end;
    else
      pCWP.message := WM_NULL; //-- Message vernichten
    end;
  end;

(**
  case pCWP.message of
    WM_NULL              : wprocTranslator(pCWP.message,'WM_NULL');
    WM_CREATE            : wprocTranslator(pCWP.message,'WM_CREATE') ;
    WM_DESTROY          : wprocTranslator(pCWP.message,'WM_DESTROY') ;
    WM_MOVE              : wprocTranslator(pCWP.message,'WM_MOVE') ;
    WM_SIZE              : wprocTranslator(pCWP.message,'WM_SIZE') ;
    WM_ACTIVATE          : wprocTranslator(pCWP.message,'WM_ACTIVATE') ;
    WM_SETFOCUS          : wprocTranslator(pCWP.message,'WM_SETFOCUS') ;
    WM_KILLFOCUS        : wprocTranslator(pCWP.message,'WM_KILLFOCUS') ;
    WM_ENABLE            : wprocTranslator(pCWP.message,'WM_ENABLE') ;
    WM_SETREDRAW        : wprocTranslator(pCWP.message,'WM_SETREDRAW') ;
    WM_SETTEXT          : wprocTranslator(pCWP.message,'WM_SETTEXT') ;
    WM_GETTEXT          : wprocTranslator(pCWP.message,'WM_GETTEXT') ;
    WM_GETTEXTLENGTH    : wprocTranslator(pCWP.message,'WM_GETTEXTLENGTH') ;
    WM_PAINT            : wprocTranslator(pCWP.message,'WM_PAINT') ;
    WM_CLOSE            : wprocTranslator(pCWP.message,'WM_CLOSE') ;
    WM_QUERYENDSESSION  : wprocTranslator(pCWP.message,'WM_QUERYENDSESSION') ;
    WM_QUIT              : wprocTranslator(pCWP.message,'WM_QUIT') ;
    WM_QUERYOPEN        : wprocTranslator(pCWP.message,'WM_QUERYOPEN') ;
    WM_ERASEBKGND        : wprocTranslator(pCWP.message,'WM_ERASEBKGND') ;
    WM_SYSCOLORCHANGE    : wprocTranslator(pCWP.message,'WM_SYSCOLORCHANGE') ;
    WM_ENDSESSION        : wprocTranslator(pCWP.message,'WM_ENDSESSION') ;
    WM_SYSTEMERROR      : wprocTranslator(pCWP.message,'WM_SYSTEMERROR') ;
    WM_SHOWWINDOW        : wprocTranslator(pCWP.message,'WM_SHOWWINDOW') ;
    WM_CTLCOLOR          : wprocTranslator(pCWP.message,'WM_CTLCOLOR') ;
    WM_WININICHANGE      : wprocTranslator(pCWP.message,'WM_WININICHANGE') ;
    WM_DEVMODECHANGE    : wprocTranslator(pCWP.message,'WM_DEVMODECHANGE') ;
    WM_ACTIVATEAPP      : wprocTranslator(pCWP.message,'WM_ACTIVATEAPP') ;
    WM_FONTCHANGE        : wprocTranslator(pCWP.message,'WM_FONTCHANGE') ;
    WM_TIMECHANGE        : wprocTranslator(pCWP.message,'WM_TIMECHANGE') ;
    WM_CANCELMODE        : wprocTranslator(pCWP.message,'WM_CANCELMODE') ;
    WM_SETCURSOR        : wprocTranslator(pCWP.message,'WM_SETCURSOR') ;
    WM_MOUSEACTIVATE    : wprocTranslator(pCWP.message,'WM_MOUSEACTIVATE') ;
    WM_CHILDACTIVATE    : wprocTranslator(pCWP.message,'WM_CHILDACTIVATE') ;
    WM_QUEUESYNC        : wprocTranslator(pCWP.message,'WM_QUEUESYNC') ;
    WM_GETMINMAXINFO    : wprocTranslator(pCWP.message,'WM_GETMINMAXINFO') ;
    WM_PAINTICON        : wprocTranslator(pCWP.message,'WM_PAINTICON') ;
    WM_ICONERASEBKGND    : wprocTranslator(pCWP.message,'WM_ICONERASEBKGND') ;
    WM_NEXTDLGCTL        : wprocTranslator(pCWP.message,'WM_NEXTDLGCTL') ;
    WM_SPOOLERSTATUS    : wprocTranslator(pCWP.message,'WM_SPOOLERSTATUS') ;
    WM_DRAWITEM          : wprocTranslator(pCWP.message,'WM_DRAWITEM') ;
    WM_MEASUREITEM      : wprocTranslator(pCWP.message,'WM_MEASUREITEM') ;
    WM_DELETEITEM        : wprocTranslator(pCWP.message,'WM_DELETEITEM') ;
    WM_VKEYTOITEM        : wprocTranslator(pCWP.message,'WM_VKEYTOITEM') ;
    WM_CHARTOITEM        : wprocTranslator(pCWP.message,'WM_CHARTOITEM') ;
    WM_SETFONT          : wprocTranslator(pCWP.message,'WM_SETFONT') ;
    WM_GETFONT          : wprocTranslator(pCWP.message,'WM_GETFONT') ;
    WM_SETHOTKEY        : wprocTranslator(pCWP.message,'WM_SETHOTKEY') ;
    WM_GETHOTKEY        : wprocTranslator(pCWP.message,'WM_GETHOTKEY') ;
    WM_QUERYDRAGICON    : wprocTranslator(pCWP.message,'WM_QUERYDRAGICON') ;
    WM_COMPAREITEM      : wprocTranslator(pCWP.message,'WM_COMPAREITEM') ;
    WM_GETOBJECT        : wprocTranslator(pCWP.message,'WM_GETOBJECT') ;
    WM_COMPACTING        : wprocTranslator(pCWP.message,'WM_COMPACTING') ;
    WM_COMMNOTIFY        : wprocTranslator(pCWP.message,'WM_COMMNOTIFY') ;
    WM_WINDOWPOSCHANGING  : wprocTranslator(pCWP.message,'WM_WINDOWPOSCHANGING') ;
    WM_WINDOWPOSCHANGED  : wprocTranslator(pCWP.message,'WM_WINDOWPOSCHANGED') ;
    WM_POWER            : wprocTranslator(pCWP.message,'WM_POWER') ;
    WM_COPYDATA          : wprocTranslator(pCWP.message,'WM_COPYDATA') ;
    WM_CANCELJOURNAL    : wprocTranslator(pCWP.message,'WM_CANCELJOURNAL') ;
    WM_NOTIFY            : wprocTranslator(pCWP.message,'WM_NOTIFY') ;
    WM_INPUTLANGCHANGEREQUEST  : wprocTranslator(pCWP.message,'WM_INPUTLANGCHANGEREQUEST') ;
    WM_INPUTLANGCHANGE  : wprocTranslator(pCWP.message,'WM_INPUTLANGCHANGE') ;
    WM_TCARD            : wprocTranslator(pCWP.message,'WM_TCARD') ;
    WM_HELP              : wprocTranslator(pCWP.message,'WM_HELP') ;
    WM_USERCHANGED      : wprocTranslator(pCWP.message,'WM_USERCHANGED') ;
    WM_NOTIFYFORMAT      : wprocTranslator(pCWP.message,'WM_NOTIFYFORMAT') ;
    WM_CONTEXTMENU      : wprocTranslator(pCWP.message,'WM_CONTEXTMENU') ;
    WM_STYLECHANGING    : wprocTranslator(pCWP.message,'WM_STYLECHANGING') ;
    WM_STYLECHANGED      : wprocTranslator(pCWP.message,'WM_STYLECHANGED') ;
    WM_DISPLAYCHANGE    : wprocTranslator(pCWP.message,'WM_DISPLAYCHANGE') ;
    WM_GETICON          : wprocTranslator(pCWP.message,'WM_GETICON') ;
    WM_SETICON          : wprocTranslator(pCWP.message,'WM_SETICON') ;
    WM_NCCREATE          : wprocTranslator(pCWP.message,'WM_NCCREATE') ;
    WM_NCDESTROY        : wprocTranslator(pCWP.message,'WM_NCDESTROY') ;
    WM_NCCALCSIZE        : wprocTranslator(pCWP.message,'WM_NCCALCSIZE') ;
    WM_NCHITTEST        : wprocTranslator(pCWP.message,'WM_NCHITTEST') ;
    WM_NCPAINT          : wprocTranslator(pCWP.message,'WM_NCPAINT') ;
    WM_NCACTIVATE        : wprocTranslator(pCWP.message,'WM_NCACTIVATE') ;
    WM_GETDLGCODE        : wprocTranslator(pCWP.message,'WM_GETDLGCODE') ;
    WM_NCMOUSEMOVE      : wprocTranslator(pCWP.message,'WM_NCMOUSEMOVE') ;
    WM_NCLBUTTONDOWN    : wprocTranslator(pCWP.message,'WM_NCLBUTTONDOWN') ;
    WM_NCLBUTTONUP      : wprocTranslator(pCWP.message,'WM_NCLBUTTONUP') ;
    WM_NCLBUTTONDBLCLK  : wprocTranslator(pCWP.message,'WM_NCLBUTTONDBLCLK') ;
    WM_NCRBUTTONDOWN    : wprocTranslator(pCWP.message,'WM_NCRBUTTONDOWN') ;
    WM_NCRBUTTONUP      : wprocTranslator(pCWP.message,'WM_NCRBUTTONUP') ;
    WM_NCRBUTTONDBLCLK  : wprocTranslator(pCWP.message,'WM_NCRBUTTONDBLCLK') ;
    WM_NCMBUTTONDOWN    : wprocTranslator(pCWP.message,'WM_NCMBUTTONDOWN') ;
    WM_NCMBUTTONUP      : wprocTranslator(pCWP.message,'WM_NCMBUTTONUP') ;
    WM_NCMBUTTONDBLCLK  : wprocTranslator(pCWP.message,'WM_NCMBUTTONDBLCLK') ;
    WM_KEYFIRST          : wprocTranslator(pCWP.message,'WM_KEYFIRST') ;
    WM_KEYUP            : wprocTranslator(pCWP.message,'WM_KEYUP') ;
    WM_CHAR              : wprocTranslator(pCWP.message,'WM_CHAR') ;
    WM_DEADCHAR          : wprocTranslator(pCWP.message,'WM_DEADCHAR') ;
    WM_SYSKEYDOWN        : wprocTranslator(pCWP.message,'WM_SYSKEYDOWN') ;
    WM_SYSKEYUP          : wprocTranslator(pCWP.message,'WM_SYSKEYUP') ;
    WM_SYSCHAR          : wprocTranslator(pCWP.message,'WM_SYSCHAR') ;
    WM_SYSDEADCHAR      : wprocTranslator(pCWP.message,'WM_SYSDEADCHAR') ;
    WM_KEYLAST          : wprocTranslator(pCWP.message,'WM_KEYLAST') ;
    WM_INITDIALOG        : wprocTranslator(pCWP.message,'WM_INITDIALOG') ;
    WM_COMMAND          :
    begin
      if HiWord(wParam) = BN_CLICKED then begin
        GetWindowText(pCWP^.lParam,szWndText,sizeof(szWndText));
        wprocTranslator(pCWP^.message,'BN_CLICKED: ' + szWndText);
      end;
    end;
    WM_SYSCOMMAND        : wprocTranslator(pCWP.message,'WM_SYSCOMMAND') ;
    WM_TIMER            : wprocTranslator(pCWP.message,'WM_TIMER') ;
    WM_HSCROLL          : wprocTranslator(pCWP.message,'WM_HSCROLL') ;
    WM_VSCROLL          : wprocTranslator(pCWP.message,'WM_VSCROLL') ;
    WM_INITMENU          : wprocTranslator(pCWP.message,'WM_INITMENU') ;
    WM_INITMENUPOPUP    : wprocTranslator(pCWP.message,'WM_INITMENUPOPUP');
    WM_MENUSELECT        : wprocTranslator(pCWP.message,'WM_MENUSELECT') ;
    WM_MENUCHAR          : wprocTranslator(pCWP.message,'WM_MENUCHAR') ;
    WM_ENTERIDLE        : wprocTranslator(pCWP.message,'WM_ENTERIDLE') ;
    WM_MENURBUTTONUP    : wprocTranslator(pCWP.message,'WM_MENURBUTTONUP') ;
    WM_MENUDRAG          : wprocTranslator(pCWP.message,'WM_MENUDRAG') ;
    WM_MENUGETOBJECT    : wprocTranslator(pCWP.message,'WM_MENUGETOBJECT') ;
    WM_UNINITMENUPOPUP  : wprocTranslator(pCWP.message,'WM_UNINITMENUPOPUP') ;
    WM_MENUCOMMAND      : wprocTranslator(pCWP.message,'WM_MENUCOMMAND') ;
    WM_CTLCOLORMSGBOX    : wprocTranslator(pCWP.message,'WM_CTLCOLORMSGBOX') ;
    WM_CTLCOLOREDIT      : wprocTranslator(pCWP.message,'WM_CTLCOLOREDIT') ;
    WM_CTLCOLORLISTBOX  : wprocTranslator(pCWP.message,'WM_CTLCOLORLISTBOX') ;
    WM_CTLCOLORBTN      : wprocTranslator(pCWP.message,'WM_CTLCOLORBTN') ;
    WM_CTLCOLORDLG      : wprocTranslator(pCWP.message,'WM_CTLCOLORDLG') ;
    WM_CTLCOLORSCROLLBAR : wprocTranslator(pCWP.message,'WM_CTLCOLORSCROLLBAR') ;
    WM_CTLCOLORSTATIC    : wprocTranslator(pCWP.message,'WM_CTLCOLORSTATIC') ;
    WM_MOUSEFIRST        : wprocTranslator(pCWP.message,'WM_MOUSEFIRST') ;
    WM_LBUTTONDOWN      : wprocTranslator(pCWP.message,'WM_LBUTTONDOWN') ;
    WM_LBUTTONUP        : wprocTranslator(pCWP.message,'WM_LBUTTONUP') ;
    WM_LBUTTONDBLCLK    : wprocTranslator(pCWP.message,'WM_LBUTTONDBLCLK') ;
    WM_RBUTTONDOWN      : wprocTranslator(pCWP.message,'WM_RBUTTONDOWN') ;
    WM_RBUTTONUP        : wprocTranslator(pCWP.message,'WM_RBUTTONUP') ;
    WM_RBUTTONDBLCLK    : wprocTranslator(pCWP.message,'WM_RBUTTONDBLCLK') ;
    WM_MBUTTONDOWN      : wprocTranslator(pCWP.message,'WM_MBUTTONDOWN') ;
    WM_MBUTTONUP        : wprocTranslator(pCWP.message,'WM_MBUTTONUP') ;
    WM_MBUTTONDBLCLK    : wprocTranslator(pCWP.message,'WM_MBUTTONDBLCLK') ;
    WM_MOUSEWHEEL        : wprocTranslator(pCWP.message,'WM_MOUSEWHEEL') ;
    WM_PARENTNOTIFY      : wprocTranslator(pCWP.message,'WM_PARENTNOTIFY') ;
    WM_ENTERMENULOOP    : wprocTranslator(pCWP.message,'WM_ENTERMENULOOP') ;
    WM_EXITMENULOOP      : wprocTranslator(pCWP.message,'WM_EXITMENULOOP') ;
    WM_NEXTMENU          : wprocTranslator(pCWP.message,'WM_NEXTMENU') ;
    WM_SIZING            : wprocTranslator(pCWP.message,'WM_SIZING') ;
    WM_CAPTURECHANGED    : wprocTranslator(pCWP.message,'WM_CAPTURECHANGED') ;
    WM_MOVING            : wprocTranslator(pCWP.message,'WM_MOVING') ;
    WM_POWERBROADCAST    : wprocTranslator(pCWP.message,'WM_POWERBROADCAST') ;
    WM_DEVICECHANGE      : wprocTranslator(pCWP.message,'WM_DEVICECHANGE') ;
    WM_IME_STARTCOMPOSITION : wprocTranslator(pCWP.message,'WM_IME_STARTCOMPOSITION') ;
    WM_IME_ENDCOMPOSITION  : wprocTranslator(pCWP.message,'WM_IME_ENDCOMPOSITION') ;
    WM_IME_COMPOSITION      : wprocTranslator(pCWP.message,'WM_IME_COMPOSITION') ;
    WM_IME_SETCONTEXT      : wprocTranslator(pCWP.message,'WM_IME_SETCONTEXT') ;
    WM_IME_NOTIFY          : wprocTranslator(pCWP.message,'WM_IME_NOTIFY') ;
    WM_IME_CONTROL          : wprocTranslator(pCWP.message,'WM_IME_CONTROL') ;
    WM_IME_COMPOSITIONFULL  : wprocTranslator(pCWP.message,'WM_IME_COMPOSITIONFULL') ;
    WM_IME_SELECT          : wprocTranslator(pCWP.message,'WM_IME_SELECT') ;
    WM_IME_CHAR            : wprocTranslator(pCWP.message,'WM_IME_CHAR') ;
    WM_IME_REQUEST          : wprocTranslator(pCWP.message,'WM_IME_REQUEST') ;
    WM_IME_KEYDOWN          : wprocTranslator(pCWP.message,'WM_IME_KEYDOWN') ;
    WM_IME_KEYUP            : wprocTranslator(pCWP.message,'WM_IME_KEYUP') ;
    WM_MDICREATE        : wprocTranslator(pCWP.message,'WM_MDICREATE') ;
    WM_MDIDESTROY        : wprocTranslator(pCWP.message,'WM_MDIDESTROY') ;
    WM_MDIACTIVATE      : wprocTranslator(pCWP.message,'WM_MDIACTIVATE') ;
    WM_MDIRESTORE        : wprocTranslator(pCWP.message,'WM_MDIRESTORE') ;
    WM_MDINEXT          : wprocTranslator(pCWP.message,'WM_MDINEXT') ;
    WM_MDIMAXIMIZE      : wprocTranslator(pCWP.message,'WM_MDIMAXIMIZE') ;
    WM_MDITILE          : wprocTranslator(pCWP.message,'WM_MDITILE') ;
    WM_MDICASCADE        : wprocTranslator(pCWP.message,'WM_MDICASCADE') ;
    WM_MDIICONARRANGE    : wprocTranslator(pCWP.message,'WM_MDIICONARRANGE') ;
    WM_MDIGETACTIVE      : wprocTranslator(pCWP.message,'WM_MDIGETACTIVE') ;
    WM_MDISETMENU        : wprocTranslator(pCWP.message,'WM_MDISETMENU') ;
    WM_ENTERSIZEMOVE    : wprocTranslator(pCWP.message,'WM_ENTERSIZEMOVE') ;
    WM_EXITSIZEMOVE      : wprocTranslator(pCWP.message,'WM_EXITSIZEMOVE') ;
    WM_DROPFILES        : wprocTranslator(pCWP.message,'WM_DROPFILES') ;
    WM_MDIREFRESHMENU    : wprocTranslator(pCWP.message,'WM_MDIREFRESHMENU') ;
    WM_MOUSEHOVER        : wprocTranslator(pCWP.message,'WM_MOUSEHOVER') ;
    WM_MOUSELEAVE        : wprocTranslator(pCWP.message,'WM_MOUSELEAVE') ;
    WM_CUT              : wprocTranslator(pCWP.message,'WM_CUT') ;
    WM_COPY              : wprocTranslator(pCWP.message,'WM_COPY') ;
    WM_PASTE            : wprocTranslator(pCWP.message,'WM_PASTE') ;
    WM_CLEAR            : wprocTranslator(pCWP.message,'WM_CLEAR') ;
    WM_UNDO              : wprocTranslator(pCWP.message,'WM_UNDO') ;
    WM_RENDERFORMAT      : wprocTranslator(pCWP.message,'WM_RENDERFORMAT') ;
    WM_RENDERALLFORMATS  : wprocTranslator(pCWP.message,'WM_RENDERALLFORMATS') ;
    WM_DESTROYCLIPBOARD  : wprocTranslator(pCWP.message,'WM_DESTROYCLIPBOARD') ;
    WM_DRAWCLIPBOARD    : wprocTranslator(pCWP.message,'WM_DRAWCLIPBOARD') ;
    WM_PAINTCLIPBOARD    : wprocTranslator(pCWP.message,'WM_PAINTCLIPBOARD') ;
    WM_VSCROLLCLIPBOARD  : wprocTranslator(pCWP.message,'WM_VSCROLLCLIPBOARD') ;
    WM_SIZECLIPBOARD    : wprocTranslator(pCWP.message,'WM_SIZECLIPBOARD') ;
    WM_ASKCBFORMATNAME  : wprocTranslator(pCWP.message,'WM_ASKCBFORMATNAME') ;
    WM_CHANGECBCHAIN    : wprocTranslator(pCWP.message,'WM_CHANGECBCHAIN') ;
    WM_HSCROLLCLIPBOARD  : wprocTranslator(pCWP.message,'WM_HSCROLLCLIPBOARD') ;
    WM_QUERYNEWPALETTE  : wprocTranslator(pCWP.message,'WM_QUERYNEWPALETTE') ;
    WM_PALETTEISCHANGING : wprocTranslator(pCWP.message,'WM_PALETTEISCHANGING') ;
    WM_PALETTECHANGED    : wprocTranslator(pCWP.message,'WM_PALETTECHANGED') ;
    WM_HOTKEY            : wprocTranslator(pCWP.message,'WM_HOTKEY') ;
    WM_PRINT            : wprocTranslator(pCWP.message,'WM_PRINT') ;
    WM_PRINTCLIENT      : wprocTranslator(pCWP.message,'WM_PRINTCLIENT') ;
    WM_HANDHELDFIRST    : wprocTranslator(pCWP.message,'WM_HANDHELDFIRST') ;
    WM_HANDHELDLAST      : wprocTranslator(pCWP.message,'WM_HANDHELDLAST') ;
    WM_PENWINFIRST      : wprocTranslator(pCWP.message,'WM_PENWINFIRST') ;
    WM_PENWINLAST        : wprocTranslator(pCWP.message,'WM_PENWINLAST') ;
    WM_COALESCE_FIRST    : wprocTranslator(pCWP.message,'WM_COALESCE_FIRST') ;
    WM_COALESCE_LAST    : wprocTranslator(pCWP.message,'WM_COALESCE_LAST') ;
    WM_DDE_FIRST        : wprocTranslator(pCWP.message,'WM_DDE_FIRST') ;
    WM_DDE_TERMINATE    : wprocTranslator(pCWP.message,'WM_DDE_TERMINATE') ;
    WM_DDE_ADVISE        : wprocTranslator(pCWP.message,'WM_DDE_ADVISE') ;
    WM_DDE_UNADVISE      : wprocTranslator(pCWP.message,'WM_DDE_UNADVISE') ;
    WM_DDE_ACK          : wprocTranslator(pCWP.message,'WM_DDE_ACK') ;
    WM_DDE_DATA          : wprocTranslator(pCWP.message,'WM_DDE_DATA') ;
    WM_DDE_REQUEST      : wprocTranslator(pCWP.message,'WM_DDE_REQUEST') ;
    WM_DDE_POKE          : wprocTranslator(pCWP.message,'WM_DDE_POKE') ;
    WM_DDE_EXECUTE      : wprocTranslator(pCWP.message,'WM_DDE_EXECUTE') ;
    WM_APP              : wprocTranslator(pCWP.message,'WM_APP') ;
    WM_USER              : wprocTranslator(pCWP.message,'WM_USER') ;
  end;
  **)

end;


function CreateHook: integer; stdcall;
begin
  hWndProcHook := SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, hInstance, 0);
  result := hWndProcHook;
end;

function DeleteHook: integer; stdcall;
begin
  result := Ord(UnhookWindowsHookEx(hWndProcHook));
end;

function StartUp:integer; stdcall;
begin
  result:=0;
end;

procedure DLLEntryPoint(dwReason: DWORD);
begin
  case dwReason of
    DLL_PROCESS_ATTACH: ; //-- IPC init
    DLL_PROCESS_DETACH: ; //-- IPC release
  end;
end;

exports
  CreateHook,
  DeleteHook;

begin
  IsMultithread := true;
  DisableThreadLibraryCalls(hInstance);
  DllProc := @DLLEntryPoint;
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#32

AW: USB - Autostart dynamisch unterbinden

  Alt 23. Feb 2015, 14:19
Hallo,

ich wollte dieses etwas "angestaubte" Thema noch einmal aufgreifen, da ich zurzeit eine Lösung suche. Nach dem Durcharbeiten des gesamten Threads habe ich verschiedene Sources und Varianten probiert, die aber allesamt nicht zu Erfolg führten.

Der letzte Post scheint sehr vielversprechend zu sein, allerdings benötige ich eine Lösung ohne DLL, also direkt in die Sources eines Formulares eingebettet. Das Problem ist, dass es bei einigen USB-Sticks jedes mal und ohne Probleme funktioniert, Autostart zu unterbinden. Allerdings habe ich hier einige Sticks, bei denen das nur beim ersten Anstecken funktioniert, wenn ich den Stick entferne und nach 5 Sekunden erneut anstecke, wird Autostart ausgelöst. Und das obwohl das Mainform permanent im Vordergrund ist und die Applikation über vollständige Admin-Rechte verfügt. Betriebssystem ist Windows 7 SP1 32 Bit. Woran könnte das liegen?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

  PDevBroadcastHdr = ^TDevBroadcastHdr;
  TDevBroadcastHdr = Packed Record
                       dbcd_size : DWORD;
                       dbcd_devicetype : DWORD;
                       dbcd_reserved : DWORD;
                     end;

var hWndProcHook: HHOOK=0;
    Form1: TForm1;

implementation

{$R *.dfm}

function CallWndProc(Code: integer; wParam: WPARAM; lParam: LPARAM): LResult; stdcall;
var pCWP: PCWPSTRUCT;
begin
  if Code >= 0 then
  begin
    Result := CallNextHookEx(hWndProcHook, Code, wParam, lParam);
  end else
  begin
    Result := CallNextHookEx(0, Code, wParam, lParam);
    EXIT;
  end;

  pCWP := pointer(lParam);

  if pCWP^.message = WM_DEVICECHANGE then
  begin
    case pCWP^.wParam of
     $8000 :
       if PDevBroadcastHdr(pCWP^.lParam)^.dbcd_devicetype = $00000002 then
       begin
         //-- Fenster der Hostapplication suchen und an dieses posten,
         //-- oder Host Application speichert Handle vor dem Laden der DLL in
         //-- shared memory oder Registry.
         //-- Elegant wäre hier eine IPC mit einem PIPE Client oder Socket Client
       end;
     $8004 :
       if PDevBroadcastHdr(pCWP^.lParam)^.dbcd_devicetype = $00000002 then
       begin
         //-- Ergo wie oben
       end;
     else
       pCWP.message := WM_NULL; //-- Message vernichten
    end;
  end;
end;

function CreateHook: integer; stdcall;
begin
  hWndProcHook := SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, hInstance, 0);
  result := hWndProcHook;
end;

function DeleteHook: integer; stdcall;
begin
  result := Ord(UnhookWindowsHookEx(hWndProcHook));
end;

function StartUp:integer; stdcall;
begin
  result:=0;
end;

procedure DLLEntryPoint(dwReason: DWORD);
begin
  case dwReason of
    DLL_PROCESS_ATTACH: ; //-- IPC init
    DLL_PROCESS_DETACH: ; //-- IPC release
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var HookResult : integer;
begin
  IsMultithread := true;
  DisableThreadLibraryCalls(hInstance);
  DllProc := @DLLEntryPoint;
  DLLEntryPoint(DLL_PROCESS_ATTACH);

  HookResult:=CreateHook;
end;

end.
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#33

AW: USB - Autostart dynamisch unterbinden

  Alt 27. Feb 2015, 15:04
Hmm, hat das jemand austesten können? Funktioniert die Unterdrückung des USB-Autostarts?
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
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 22: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