Concetti di Common Explorer
Lo spazio dei nomi shell organizza il file system e altri oggetti gestiti dalla shell in una singola gerarchia strutturata ad albero. Concettualmente, è una versione più ampia e più inclusiva del file system.
- Introduzione
-
Identificazione degli oggetti dello spazio dei nomi
- ID elemento
- Elenchi di ID elemento
- PIDLs
- L'allocazione delle PIDLs
Introduzione
Una delle principali responsabilità della shell è la gestione e l'accesso all'ampia gamma di oggetti che costituiscono il sistema. I più numerosi e familiari di questi oggetti sono le cartelle e i file che risiedono nelle unità disco del computer. Tuttavia, la Shell gestisce anche un certo numero di oggetti non di file system, o oggetti virtuali. Alcuni esempi includono:
- Stampanti di rete
- Altri computer in rete
- Applicazioni del Pannello di controllo
- Cestino
Alcuni oggetti virtuali non comportano affatto l'archiviazione fisica. L'oggetto stampante, ad esempio, contiene una raccolta di collegamenti alle stampanti in rete. Altri oggetti virtuali, ad esempio il Cestino, possono contenere dati archiviati in un'unità disco, ma devono essere gestiti in modo diverso rispetto ai normali file. Ad esempio, un oggetto virtuale può essere usato per rappresentare i dati archiviati in un database. In termini di spazio dei nomi, i vari elementi del database possono essere visualizzati in Esplora risorse come oggetti separati, anche se sono tutti archiviati in un singolo file su disco.
Gli oggetti virtuali possono anche trovarsi in computer remoti. Ad esempio, per facilitare il roaming, i file di documento di un utente potrebbero essere archiviati in un server. Per concedere agli utenti l'accesso ai propri file da più PC desktop, la cartella Documenti personali sul PC desktop attualmente in uso punterà al server, non al disco rigido del PC desktop. Il percorso includerà un'unità di rete mappata o un nome di percorso UNC.
Analogamente al file system, lo spazio dei nomi include due tipi di oggetto di base: cartelle e file. Gli oggetti Folder sono i nodi dell'albero; sono contenitori per oggetti file e altre cartelle. Gli oggetti file sono le foglie dell'albero; sono file di disco normali o oggetti virtuali, ad esempio i collegamenti della stampante. Le cartelle che non fanno parte del file system vengono talvolta definite cartelle virtuali .
Come le cartelle del file system, la raccolta di cartelle virtuali varia in genere dal sistema al sistema. Esistono tre classi di cartelle virtuali:
- Cartelle virtuali standard, ad esempio il Cestino, disponibili in tutti i sistemi.
- Cartelle virtuali facoltative con nomi e funzionalità standard, ma potrebbero non essere presenti in tutti i sistemi.
- Le cartelle non standard installate dall'utente.
A differenza delle cartelle del file system, gli utenti non possono creare nuove cartelle virtuali. Possono installare solo quelli creati da sviluppatori non Microsoft. Il numero di cartelle virtuali è quindi in genere molto inferiore al numero di cartelle del file system. Per informazioni su come implementare le cartelle virtuali, vedere estensioni dello spazio dei nomi .
È possibile visualizzare una rappresentazione visiva del modo in cui lo spazio dei nomi è strutturato nella barra di Explorer di Esplora risorse. Ad esempio, lo screenshot seguente di Esplora file mostra uno spazio dei nomi relativamente semplice.
La radice ultima della gerarchia dello spazio dei nomi è il desktop. Immediatamente sotto la radice sono presenti diverse cartelle virtuali, ad esempio Il mio computer e il Cestino.
I file system delle varie unità disco possono essere visualizzati come sottoinsiemi di una gerarchia più ampia di spazi dei nomi. Le radici di questi file system sono sottocartelle della cartella My Computer. Il mio computer include anche le radici di tutte le unità di rete mappate. Altri nodi nell'albero, ad esempio Documenti personali, sono cartelle virtuali.
Identificazione degli oggetti dello spazio dei nomi
Prima di poter usare un oggetto spazio dei nomi, è necessario avere un modo per identificarlo. Un oggetto nel file system potrebbe avere un nome, ad esempio MyFile.htm. Poiché potrebbero essere presenti altri file con tale nome altrove nel sistema, l'identificazione univoca di un file o di una cartella richiede un percorso completo, ad esempio "C:\MyDocs\MyFile.htm". Questo percorso è fondamentalmente un elenco ordinato di tutte le cartelle in un percorso dalla radice del file system, C:\, che termina con il file.
Nel contesto dello spazio dei nomi, i percorsi sono ancora abbastanza utili per identificare gli oggetti che si trovano nella parte del file system dello spazio dei nomi. Tuttavia, non possono essere usati per gli oggetti virtuali. La shell offre invece un mezzo alternativo di identificazione che può essere usato con qualsiasi oggetto dello spazio dei nomi.
ID elemento
All'interno di una cartella, ogni oggetto ha un ID elemento , che è l'equivalente funzionale di un nome di file o cartella. L'ID dell'elemento è effettivamente una struttura SHITEMID.
typedef struct _SHITEMID {
USHORT cb;
BYTE abID[1];
} SHITEMID, * LPSHITEMID;
Il membro abID è l'identificatore dell'oggetto. La lunghezza di abID non è definita e il relativo valore è determinato dalla cartella che contiene l'oggetto . Poiché non esiste una definizione standard per il modo in cui valori di abID vengono assegnati dalle cartelle, sono significativi solo per l'oggetto cartella associato. Le applicazioni devono semplicemente considerarle come un token che identifica un oggetto in una determinata cartella. Poiché la lunghezza di abID varia, il membro cb contiene la dimensione in byte della strutturaSHITEMID.
Poiché gli ID elemento non sono utili per scopi di visualizzazione, la cartella che contiene l'oggetto assegna normalmente un nome visualizzato. Questo è il nome utilizzato da Esplora File quando visualizza il contenuto di una cartella. Per altre informazioni sulla gestione dei nomi visualizzati, vedere Recupero di informazioni da una cartella.
Elenchi ID degli elementi
L'ID dell'elemento viene usato raramente da solo. In genere, fa parte di un elenco di ID elemento, che serve allo stesso scopo di un percorso del file system. Tuttavia, anziché la stringa di caratteri utilizzata per i percorsi, un elenco di ID elemento è una struttura ITEMIDLIST. Questa struttura è una sequenza ordinata di uno o più ID degli elementi, terminata da un valore NULL di due byte . Ogni ID elemento nell'elenco ID elemento corrisponde a un oggetto del namespace. L'ordine definisce un percorso nello spazio dei nomi, molto simile a un percorso del file system.
Nella figura seguente viene illustrata una rappresentazione schematica della struttura ITEMIDLIST che corrisponde a C:\MyDocs\MyFile.htm. Il nome visualizzato di ogni ID elemento è mostrato sopra di esso. Le larghezze variabili dei membri abID sono arbitrarie; illustrano il fatto che le dimensioni di questo membro possono variare.
pidl
PIDLs
Per l'API Shell, gli oggetti dello spazio dei nomi vengono in genere identificati da un puntatore a una struttura ITEMIDLIST o a un elenco di identificatori di elemento (PIDL). Per praticità, il termine PIDL in genere farà riferimento in questa documentazione alla struttura stessa anziché al puntatore.
Il PIDL illustrato nella figura precedente viene definito completo o assoluto, PIDL. Un FILE PIDL completo inizia dal desktop e contiene gli ID elemento di tutte le cartelle intermedie nel percorso. Termina con l'ID dell'elemento dell'oggetto, seguito da un NULLa due byte di terminazione. Un FILE PIDL completo è simile a un percorso completo e identifica in modo univoco l'oggetto nello spazio dei nomi shell.
I PIDL completi vengono usati raramente. Molte funzioni e metodi prevedono un PIDL relativo. La radice di un PIDL relativo è una cartella, non il desktop. Come per i percorsi relativi, la serie di ID elemento che costituiscono la struttura definiscono un percorso nello spazio dei nomi tra due oggetti. Anche se non identificano in modo univoco l'oggetto, di solito sono più piccoli di un PIDL completo e sufficienti per molti scopi.
I PIDL relativi più comunemente usati, PIDLs a livello singolo, sono relativi alla cartella padre dell'oggetto. Contengono solo l'ID elemento dell'oggetto e un NULL. I PIDL multilivello vengono usati anche per molti scopi. Contengono due o più ID elemento e in genere definiscono un percorso da una cartella padre a un oggetto tramite una serie di una o più sottocartelle. Si noti che un PIDL a singolo livello possa ancora essere un PIDL completamente qualificato. In particolare, gli oggetti desktop sono elementi figlio del desktop, quindi i relativi PIDL completi contengono solo un ID elemento.
Come illustrato in Ottenere l'ID di una cartella, l'API shell offre diversi modi per recuperare il PIDL di un oggetto. Dopo averlo creato, è in genere sufficiente usarlo per identificare l'oggetto quando si chiamano altre funzioni e metodi dell'API shell. In questo contesto, il contenuto interno di un PIDL è opaco e irrilevante. Ai fini di questa discussione, considerare i PIDL come token che rappresentano oggetti dello spazio dei nomi specifici e concentrarsi su come usarli per le attività comuni.
Allocazione di PIDLs
Anche se i PIDL hanno una certa somiglianza con i percorsi, l'uso di tali percorsi richiede un approccio leggermente diverso. La differenza principale consiste nel modo in cui allocare e deallocare la memoria per loro.
Analogamente alla stringa usata per un percorso, la memoria deve essere allocata per un FILE PIDL. Se un'applicazione crea un PIDL, deve allocare memoria sufficiente per la struttura ITEMIDLIST. Per la maggior parte dei casi descritti qui, la Shell crea il PIDL e gestisce l'allocazione di memoria. Indipendentemente da cosa ha allocato il PIDL, l'applicazione è in genere responsabile della deallocazione del PIDL quando non è più necessario.
Usare la funzioneCoTaskMemAlloc per allocare il PIDL e la funzioneCoTaskMemFreeper deallocarla.