Remove Gerätetreiber die 2.



  • Hallo,

    Hier noch mal ein augebessertes Codebeispiel.
    Der Treiber wird aber nicht entfernt. Ich habe mir nochmal die Remove Funktion angesehen und in dieses Beispiel eingebaut.

    Hat irgend jemand eine Ahnung was hier nicht korrekt ist.

    Danke

    Peter Prescher

    #include "stdafx.h"
    #include <stdio.h>
    #include <windows.h>
    #include <setupapi.h>
    #include "cfgmgr32.h"
    
    int main(int argc, char* argv[])
    {
    
        PSP_DEVICE_INTERFACE_DETAIL_DATA pspdidd;
        SP_DEVICE_INTERFACE_DATA         spdid;
        SP_DEVINFO_DATA                  spdd;
        HDEVINFO                         hDevInfo;
        DWORD                            dwIndex, dwSize, dwType;
        TCHAR                            szProperty[256];
    	  GUID ClassGUID;
    	  TCHAR ClassName[MAX_CLASS_NAME_LEN];
    	  LPTSTR INFFile = argv[1];
    	  CString strInfClassID;
    	  BOOL isInstall = FALSE;
    
        ZeroMemory(&spdid, sizeof(spdid));
        spdid.cbSize = sizeof(spdid);
    
    	//*****************************************************************************
    	// Use the INF File to extract the Class GUID.
    	if(!SetupDiGetINFClass(INFFile,&ClassGUID,ClassName,sizeof(ClassName),0))
    	{
    		printf("GetINFClass");
    		goto cleanup_DeviceInfo;
    	}
    
    	//*****************************************************************************
    	// GUID aus Inffile einlesen
    	LPOLESTR InfBuffer;
    
    	StringFromCLSID( ClassGUID, &InfBuffer );
    	strInfClassID = InfBuffer;
    	CoTaskMemFree(InfBuffer);
    
    	//*****************************************************************************
        hDevInfo = SetupDiGetClassDevs(&ClassGUID, NULL, NULL,
                                       DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
    
    	if(hDevInfo == INVALID_HANDLE_VALUE)
    	{
    		printf("SetupDiGetClassDevs nicht gefunden.\n ");
    		goto cleanup_DeviceInfo;
    
    	}
    
    	//*****************************************************************************
    
        for(dwIndex = 0; (SetupDiEnumDeviceInterfaces(hDevInfo,NULL, &ClassGUID, dwIndex,&spdid)); dwIndex++)
        {
    
    	      SP_REMOVEDEVICE_PARAMS rmdParams;
    
    		    rmdParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
            rmdParams.ClassInstallHeader.InstallFunction = DIF_REMOVE;
            rmdParams.Scope = DI_REMOVEDEVICE_GLOBAL;
            rmdParams.HwProfile = 0;
    
    		    if(!SetupDiSetClassInstallParams(hDevInfo,NULL,&rmdParams.ClassInstallHeader,sizeof(rmdParams)) ||
    										!SetupDiCallClassInstaller(DIF_REMOVE,hDevInfo,NULL)) 
    		    {
    			      printf("Driver not remove.");
    		    }
    		    else
    		    {
    			      printf("Driver remove.");
    
    		    }
    
        }
    
    cleanup_DeviceInfo:
    
        SetupDiDestroyDeviceInfoList(hDevInfo);
    
    	return 0;
    }
    


  • Musst du eigentlich das ganze Internet mit deinen Beiträgen vollspammen?



  • Hi,

    vieleicht kannste helfen? 😉


Anmelden zum Antworten