Uso di oggetti Framework generali
L'oggetto framework generale è l'oggetto framework da cui derivano tutti gli altri tipi di oggetti framework.
Analogamente ad altri oggetti framework, gli oggetti generali supportano un conteggio dei riferimenti, uno spazio di contesto, funzioni di callback di eliminazione e un oggetto padre, come descritto in Introduction to Framework Objects.
I driver possono creare e usare oggetti framework generali. Se il driver chiama WdfObjectCreare per creare oggetti generali, il driver può:
Creare uno o più spazi di contesto per ogni oggetto generale.
È possibile usare lo spazio del contesto dell'oggetto per archiviare informazioni sulle risorse di sistema da associare all'oggetto generale.
Per altre informazioni sullo spazio del contesto, vedere Framework Object Context Space.
Assegna un oggetto padre all'oggetto generale.
L'oggetto generale verrà eliminato quando l'oggetto padre viene eliminato. Ad esempio, se il driver specifica un oggetto dispositivo framework come oggetto padre di uno dei relativi oggetti generali, il framework eliminerà l'oggetto generale quando elimina l'oggetto dispositivo.
I driver specificano l'oggetto padre di un oggetto impostando il membro ParentObject della struttura WDF_OBJECT_ATTRIBUTES dell'oggetto.
Fornire funzioni di callback di eliminazione.
Il driver può fornire funzioni EvtCleanupCallback e EvtDestroyCallback, che possono deallocare le risorse di sistema allocate dal driver al momento della creazione dell'oggetto generale. Ad esempio, se il driver chiama ExAllocatePool quando crea un oggetto generale, la funzione di pulizia o di distruzione del callback può chiamare ExFreePool.
L'uso di oggetti generali può essere un modo pratico per gestire le risorse allocate dal driver. Ad esempio, un driver di livello superiore potrebbe richiedere più allocazioni di memoria per elaborare una richiesta di I/O ricevuta, se il driver invia la richiesta a più dispositivi o suddivide la richiesta in più dispositivi più piccoli. Il driver può creare uno o più oggetti generali figlio della richiesta di I/O ricevuta e archiviare informazioni sulle allocazioni di memoria nello spazio di contesto degli oggetti generali.