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.exe

    Wie 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


Anmelden zum Antworten