Dll verwenden Visual Studio?

1 Antwort

Visual Studio ist einen IDE...

Wie man Funktionen externer Bibliotheken einbindet hängt vor allem von der verwendeten Programmiersprache ab. VS unterstütz davon zahlreiche...

zb. C++: https://docs.microsoft.com/de-de/cpp/build/importing-function-calls-using-declspec-dllimport?view=msvc-170 , https://tbhaxor.com/loading-dlls-using-cpp-in-windows/

Für C# fällt das ganze unter die Rubrik "nicht verwalteter Code" und Plattformaufruf (P/Invoke)

Die Vorgehensweise ähnelt sich bei den meisten Programmiersprachen, welche das Einbinden externer Funktionen gestatten.

Bei unbekannten (nicht dokumentierten Funktionen) in irgendwelchen Dlls lassen sich (sofern keine Debuginfos vorhanden sind) Typ und Art der Parameter nur per Dissasembler ermitteln.

Für die gängigen Windows API DLLs findest du für C++ die Dokunmentation unter https://docs.microsoft.com/en-us/windows/win32/api/ .

...dies lässt sich auch weitgehend auf C#/Powershell portieren (siehe Plattformaufrufe) . eine weitere "Sammlung" zu Plattformfunktionen unter C# : https://www.pinvoke.net/

kleine Demo in Powershell (gleiches Prozetere wie in C#, nur ohne Compiler):

  #definieren der Funktionsheader
$NtFunctions = @(
    '[DllImport("ntdll.dll", SetLastError = true)]  public static extern void NtSuspendProcess(IntPtr processHandle);'
    '[DllImport("ntdll.dll", SetLastError = true)]  public static extern void NtResumeProcess(IntPtr processHandle);'
)
$NtDll = Add-Type -me $NtFunctions -Name Ntdll -pass 

  #starte zur Demo den Windowseditor
$ProcInfo= Start-Process notepad -pass |select -first 1
sleep 1

Write-Host Suspending Process $ProcInfo.Name -fo red
$NtDll::NtSuspendProcess($ProcInfo.Handle) #Prozess komplett anhalten
Write-Host ...to Resume $ProcInfo.Name:
pause

$NtDll::NtResumeProcess($ProcInfo.Handle) #Prozess wieder fortsetzen
Write-Host Process $ProcInfo.Name should be alive again now -fo green
pause
 .dll eines Treibers

...selbst wenn Du obiges einigermaßen lösen kannst, dürften Hardwarenahe Treiberfunktionen zu Problemen ganz anderer Art führen...

Moderne Betriebssysteme sorgen dafür, das man nicht ohne weiteres in den "Eingeweiden" herumwühlt und beliebig auf Hardware zugreifen kann: https://en.wikipedia.org/wiki/Protection_ring

Das bedeutet, man benötigt ggf die nötigen Rechte um direkt auf Treiberfunktionen zuzugreifen.

Nur weil man irgendwo einen Funktionsnamen DependencyWalker herausgefischt hat, bedeutet das noch lange nicht, das man auch darauf zugreifen darf... Zudem sollte man sehr genau wissen was man tut, also arbeite die Dokumentationen Deiner verwendeten Programmiersprache genau durch und übe das Vorgehen an bekannten garantiert harmlosen externen Funktionen!