Condividi tramite


Metodo ISensorDriver::OnClientDisconnect (sensorsclassextension.h)

Il metodo ISensorDriver::OnClientDisconnect notifica al driver del sensore che un'applicazione client è disconnessa.

Sintassi

HRESULT OnClientDisconnect(
  [in] IWDFFile *pClientFile,
  [in] LPWSTR   pwszSensorID
);

Parametri

[in] pClientFile

Puntatore a un'interfaccia IWDFFile che rappresenta l'oggetto file per il client disconnesso.

[in] pwszSensorID

LPWSTR che contiene l'ID del sensore da cui l'applicazione client sta disconnettendo.

Valore restituito

Se l'operazione ha esito positivo, questo metodo restituisce S_OK. In caso contrario, questo metodo restituisce uno dei codici di errore definiti in Winerror.h.

Osservazioni

L'estensione della classe del sensore chiama questo metodo nelle istanze seguenti:

  • Un'applicazione si chiude normalmente.
  • L'utente revoca l'autorizzazione per un'applicazione per accedere al dispositivo che contiene il sensore specificato.
  • Il lavoro di pulizia da una chiamata a ISensorClassExtension::CleanupFile completato.
È possibile usare questa chiamata come segnale per aggiornare gli elenchi e i conteggi dei riferimenti delle applicazioni connesse.

Per altre informazioni su come usare questo metodo, vedere Filtrare i dati.

Esempi

Il codice di esempio seguente illustra un'implementazione di ISensorDriver::OnClientDisconnect. Questa funzione usa una mappa semplice ATL, denominata Clients, per tenere traccia dei client connessi. Vedere ISensorDriver::OnClientConnect per un esempio di come i client connessi vengono aggiunti alla mappa.

La struttura ClientData è definita come segue.

// Struct to keep track of connected client status.
struct ClientData
{
    BOOL bListening;  // Client is listening to events.
    ULONG ulInterval;  // Interval requested by client.
};

La definizione della funzione segue.

HRESULT CSensorDdi:: OnClientDisconnect(
        __in IWDFFile* pClientFile,
        __in LPWSTR pwszSensorID
        )
{
    if(NULL == pClientFile ||
       NULL == pwszSensorID)
    {
        return E_POINTER;
    }

    HRESULT hr = S_OK;
    ClientData* pCD = NULL;
    BOOL bRet = FALSE;

    // Find this client in the map.
    pCD = Clients.Lookup(pClientFile);
    if(pCD == NULL)
    {
        hr = E_UNEXPECTED;
    }

    if(SUCCEEDED(hr))
    {
        // Free the client data memory.
        delete pCD;
        pCD = NULL;

        // Remove this client from the array.
        bRet = Clients.Remove(pClientFile);
        if(FALSE == bRet)
        {
            hr = E_UNEXPECTED;
        }
    }

    return hr;
}

Fabbisogno

Requisito Valore
client minimo supportato Windows 7,Disponibile in Windows 7.
server minimo supportato Nessuna supportata
piattaforma di destinazione Desktop
intestazione sensorsclassextension.h
libreria SensorsClassExtension.lib

Vedere anche

ISensorDriver

ISensorDriver::OnClientConnect