判斷usb硬件的驅動是否已安裝

應一位朋友的需要貼出一份代碼 

bool IsDeviceDisabled( DWORD dwDevID, HDEVINFO hDevInfo, DWORD &dwStatus )
{
	SP_DEVINFO_DATA DevInfoData = { sizeof( SP_DEVINFO_DATA ) };
	DWORD dwDevStatus, dwProblem;
	if ( !SetupDiEnumDeviceInfo( hDevInfo, dwDevID, &DevInfoData ) )
		return FALSE;

	//查詢設備狀態
	if ( CM_Get_DevNode_Status( &dwDevStatus, &dwProblem, DevInfoData.DevInst, 0 ) != CR_SUCCESS )
		return FALSE;

	dwStatus = dwProblem;
	return true;
}
int checkUSBDriverExist()
{
    int    nRet = 0;
    HDEVINFO hDevInfo;
    SP_DEVINFO_DATA DeviceInfoData;
    DWORD i;
    bool bRet = false;
    bool bOk = false;
    hDevInfo = SetupDiGetClassDevs( NULL,
        0, // Enumerator 
        0,
        DIGCF_PRESENT | DIGCF_ALLCLASSES );

    if ( hDevInfo == INVALID_HANDLE_VALUE )
        return ERR_CREHDEVINFO;
   
    DWORD dwStatuts = -1;
    DeviceInfoData.cbSize = sizeof( SP_DEVINFO_DATA );
    for ( i = 0; SetupDiEnumDeviceInfo( hDevInfo, i, &DeviceInfoData ); i++ )
    {
        DWORD DataT;
        LPTSTR buffer = NULL;
        DWORD buffersize = 0;

        while ( !SetupDiGetDeviceRegistryProperty(
            hDevInfo,
            &DeviceInfoData,
            SPDRP_HARDWAREID,
            &DataT,
            ( PBYTE )buffer,
            buffersize,
            &buffersize ) )
        {
            if ( GetLastError() == ERROR_INSUFFICIENT_BUFFER )
            {
                // Change the buffer size. 
                if ( buffer ) LocalFree( buffer );
                buffer = ( LPTSTR )LocalAlloc( LPTR, buffersize );
            }
            else
                break;
        }
        if ( IsDeviceDisabled( i, hDevInfo, dwStatuts ) && dwStatuts == 0 )
        {
            if ( buffer != NULL )
            {
                string strDeviceInfo( buffer );
                int npos = strDeviceInfo.find( "_" );
                
                if ( strDeviceInfo.substr( npos + 1, 4 ) == "0AAA" )
                {
                    int nValue = strDeviceInfo.rfind( "05" );
                    if ( nValue<strDeviceInfo.size() && nValue>0 )
                    {
                        cout << strDeviceInfo << endl;
                        nRet++;
                    }
                }
            }           
        }

        if ( buffer )
            LocalFree( buffer );
    }

    SetupDiDestroyDeviceInfoList( hDevInfo );

    return nRet;
}

void main()
{
    int ncheck = checkUSBDriverExist();
	if ( ncheck <= 0 )
		cout << "驅動不完整:" << ncheck << endl;
}

大致就是以上這些了,也沒細看有沒問題,但是在項目中使用着的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章