,想写一个一键卸载网卡驱动的程序,憋了很长时间,还是搞不定…

求助,想写一个一键卸载网卡驱动的程序,憋了很长时间,还是搞不定……
如题,写一个一键卸载网卡驱动的程序,请大神指正一下



    BOOL bResult = FALSE;
    GUID hidGuid;
    memcpy(&hidGuid, &GUID_NET, sizeof(GUID));

    HDEVINFO hNetAdapterDevInfo = INVALID_HANDLE_VALUE;
    hNetAdapterDevInfo = ::SetupDiGetClassDevs(&hidGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);

    SP_DEVINFO_DATA sddPCIDeviceInfoData = { sizeof(SP_DEVINFO_DATA) };
    SP_DEVICE_INTERFACE_DATA sidPCIInterfaceDeviceData = { sizeof(SP_DEVICE_INTERFACE_DATA) };
    LPOLESTR lpostrGUID;

    for (int i = 0; SetupDiEnumDeviceInterfaces(hNetAdapterDevInfo, 0, &hidGuid, i, &sidPCIInterfaceDeviceData); i++)  
    {
        ULONG ulRequiredLength = 0;
        bResult = ::SetupDiGetDeviceInterfaceDetailW(hNetAdapterDevInfo, &sidPCIInterfaceDeviceData,NULL,0,&ulRequiredLength,NULL);

        PSP_DEVICE_INTERFACE_DETAIL_DATA_W pspDeviceInterfaceDetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA_W*)malloc(ulRequiredLength);
        pspDeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W);
        bResult = ::SetupDiGetDeviceInterfaceDetailW(hNetAdapterDevInfo, &sidPCIInterfaceDeviceData, pspDeviceInterfaceDetailData,
            ulRequiredLength, NULL, &sddPCIDeviceInfoData);

        LPWSTR lpwDevicePath(pspDeviceInterfaceDetailData->DevicePath);
        if ( wcsstr(lpwDevicePath, DEVICE_TYPENAME_PCI) || wcsstr(lpwDevicePath, DEVICE_TYPENAME_PCI_SMALL) )
        {
            bResult = ::SetupDiDeleteDeviceInterfaceData(hNetAdapterDevInfo, &sidPCIInterfaceDeviceData);

            bResult = ::SetupDiDeleteDeviceInterfaceRegKey(hNetAdapterDevInfo, &sidPCIInterfaceDeviceData, 0);  //这里bResult返回0,我查了错误码,是87(ERROR_INVALID_PARAMETER),不明白为什么参数会错误

            bResult = SetupDiEnumDeviceInfo(hNetAdapterDevInfo, i, &sddPCIDeviceInfoData);
            if (bResult)
            {
                LPOLESTR  olestrGUID;
                StringFromCLSID(sddPCIDeviceInfoData.ClassGuid, &olestrGUID);
                CoTaskMemFree(olestrGUID);

                bResult = ChangeDeviceState(hNetAdapterDevInfo, sddPCIDeviceInfoData, DICS_STOP);  //就是停止服务
                bResult = SetupDiDeleteDeviceInfo(hNetAdapterDevInfo, &sddPCIDeviceInfoData); //正常返回1
                bResult = SetupDiDeleteDevRegKey(hNetAdapterDevInfo, &sddPCIDeviceInfoData, DICS_FLAG_GLOBAL, 0xFFFFFFFF, DIREG_BOTH );  //返回0,错误码87(ERROR_INVALID_PARAMETER)
               
                bResult = SetupDiCallClassInstaller(DIF_REMOVE, hNetAdapterDevInfo, &sddPCIDeviceInfoData);  //结果错误,得到错误码是3758096949,为什么会是这样
            }
        }
    }


我始终搞不清楚为什么会这样,我哪里写错了

------解决方案--------------------
这个是由于DLL版本不对的问题,比如你跑的机器是64位的就要把程序编译成64位的,如果你跑的机器是32位的,就要编译成32位的,你不能32位的程序调64位的库