Delen via


Ondersteuning voor opsommingsopdrachten (WpdBasicHardwareDriverSample)

Het voorbeeldstuurprogramma ondersteunt drie opsommingsopdrachten. Deze opdrachten worden in eerste instantie verwerkt door de methode WpdObjectEnumerator::D ispatchMessage methode die op zijn beurt een bijbehorende opdrachthandler aanroept. De methode DispatchMessage en de afzonderlijke handlers vindt u allemaal in het bestand WpdObjectEnum.cpp.

De informatie in de volgende tabel toont elk van de ondersteunde eigenschapsopdrachten, samen met de namen van de handlers die DispatchMessage aanroept wanneer een bepaalde opdracht wordt verwerkt. Deze opdrachten worden uitgegeven wanneer een toepassing een van de verschillende methoden aanroept in de IPortableDeviceContent of de IEnumPortableDeviceObjectIDs interfaces.

Bevelen beheerder Beschrijving
WPD_COMMAND_OBJECT_ENUMERATION_START_FIND OnStartFind Hiermee maakt u een nieuwe opsommingscontext en slaat u deze op in de contextkaart van de client.
WPD_OPDRACHT_OBJECT_ENUMERATIE_VOLGENDE_VINDEN OnFindNext Retourneert een object-id voor het aangevraagde object.
WPD_COMMAND_OBJECT_ENUMERATION_END_FIND OnEndFind Voert de benodigde opschoning uit aan het einde van een opsomming.

Voor de voorbeeld driver blijft de code intact voor de WPD_COMMAND_OBJECT_ENUMERATION_FIND_NEXT en WPD_COMMAND_OBJECT_ENUMERATION_END_FIND verwerkers. Echter, een deel van de code is aangepast voor de WPD_COMMAND_OBJECT_ENUMERATION_START_FIND-handler.

WPD_COMMAND_OBJECT_ENUMERATION_START_FIND

Het stuurprogramma roept de WpdObjectEnumerator::OnStartFind handler aan als reactie op de opdracht WPD_COMMAND_OBJECT_ENUMERATION_START_FIND. De handler maakt, initialiseert en voegt een nieuwe opsommingscontext toe aan de clientcontextmap. Voor het voorbeeldstuurprogramma is de helperfunctie InitializeEnumerationContext die vanuit de OnStartFind handler wordt aangeroepen, gewijzigd.

De wijzigingen in zowel de helperfunctie OnStartFind als de InitializeEnumerationContext helperfunctie bevatten het verwijderen van ondersteuning voor objecten die niet meer werden ondersteund (de opslag-, map- en bestandsobjecten) en het toevoegen van ondersteuning voor het sensorobject. Hier volgt de code voor de helperfunctie InitalizeEnumerationContext:

VOID WpdObjectEnumerator::InitializeEnumerationContext(
    WpdObjectEnumeratorContext* pEnumeratorContext,
    CAtlStringW                 strParentObjectID)
{
    if (pEnumeratorContext == NULL)
    {
        return;
    }

    // Initialize the enumeration context with the parent object identifier
    pEnumeratorContext->m_strParentObjectID = strParentObjectID;

    // Our sample driver has a very simple object structure where we know
    // how many children are under each parent.
    // The enumeration context is initialized below with this information.
    if (strParentObjectID.CompareNoCase(L"") == 0)
    {
        // Clients passing an 'empty' string for the parent are asking for the
        // 'DEVICE' object.  We should return 1 child in this case.
        pEnumeratorContext->m_TotalChildren = 1;
    }
    else if (strParentObjectID.CompareNoCase(WPD_DEVICE_OBJECT_ID) == 0)
    {
        // The device object contains 1 child (the sensor object).
        pEnumeratorContext->m_TotalChildren = 1;
    }
    // If the sensor objects have children, add them here...
    else 
    {
        // The sensor object contains 0 children.
        pEnumeratorContext->m_TotalChildren = 0;
    }
}

De WpdBasicHardwareDriverSample-

De WPD-Stuurprogramma Voorbeelden