Status des Windows Defender ermitteln
-
Ich möchte ermitteln, ob der Windows Defender ein- oder ausgeschaltet ist. Dazu benutze ich die Funktion WDStatus. So sieht der Code aus:
#include <Windows.h> #include <windowsdefender.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { BOOL status; WDStatus(&status); }Beim Kompilieren treten folgende Fehler auf:
Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WDStatus@4" in Funktion "_WinMain@16". c:\Users\***\documents\visual studio 2010\Projects\DefenderTest\DefenderStatus\main.obj
Fehler 2 error LNK1120: 1 nicht aufgelöste externe Verweise. c:\users\***\documents\visual studio 2010\Projects\DefenderStatus\Debug\DefenderStatus.exeWie ließe sich das lösen bzw. welche lib-Dateien muss ich unter Abhängigkeiten eintragen, damit es funktioniert?
norbertwill
-
Da es vermultich keine Import-LIB gibt
musst Du es wohl über LoadLibrary und GetProcAddress aufrufen...
-
OK. Die Funktion LoadLibrary kann ich jetzt benutzen:
HMODULE defender; defender=LoadLibrary(L"C:\\Program Files\\Windows Defender\\MPClient.dll");Aber wie benutze ich dann die Funktion GetProcAddress, sodass ich WDStatus aufrufen kann?
norbertwill
-
Da du den MSVC verwendest, hast du auch den dependeny walker, ein Programm zu finden im Startmenü unter VS 2010->Tools->depends oder hier. Dort kannst du alle exportierten Funktionen (und mehr) einer dll abfragen.
GetProcAddress ist wie fast alles gut beschrieben.
-
Hier ist ein vollständiges Beispiel:
#include <Windows.h> #include <tchar.h> //#include <windowsdefender.h> typedef HRESULT (WINAPI *PWDStatus)(__out BOOL* pfEnabled); int _tmain() { BOOL status; TCHAR szFilename[1024]; ExpandEnvironmentStrings(_T("%ProgramFiles%\\Windows Defender\\MpClient.dll"), szFilename, (sizeof(szFilename) / sizeof(szFilename[0]))); HMODULE hMod = LoadLibrary(szFilename); if (hMod == NULL) { _tprintf(_T("Windows defender is not installed\n")); return 2; } PWDStatus pWDStatus = (PWDStatus) GetProcAddress(hMod, "WDStatus"); if (pWDStatus == NULL) { _tprintf(_T("Windows defender is not installed2\n")); FreeLibrary(hMod); return 3; } HRESULT hr = pWDStatus(&status); if FAILED(hr) { _tprintf(_T("WDStatus failed: hr: 0x%8.8X\n"), hr); FreeLibrary(hMod); return 3; } if (status == FALSE) _tprintf(_T("Windows defender is DISABLED\n")); else _tprintf(_T("Windows defender is ENABLED\n")); FreeLibrary(hMod); }
-
Danke, jetzt hat es geklappt

So funktioniert es:
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { HMODULE defender; defender=LoadLibrary(L"C:\\Program Files\\Windows Defender\\MPClient.dll"); DT funktion; funktion=(DT)GetProcAddress(defender,"WDStatus"); BOOL Status; funktion(&Status);norbertwill
-
In meinem letzten Beitrag fehlte die erste Zeile:
typedef int (WINAPI *DT)(BOOL* aktiv);und die letzte Zeile:
}norbertwill