Funzione WSCSetApplicationCategory (ws2spi.h)
Sintassi
int WSCSetApplicationCategory(
[in] LPCWSTR Path,
[in] DWORD PathLength,
[in] LPCWSTR Extra,
[in] DWORD ExtraLength,
[in] DWORD PermittedLspCategories,
[out] DWORD *pPrevPermLspCat,
[out] LPINT lpErrno
);
Parametri
[in] Path
Puntatore a una stringa Unicode contenente il percorso di caricamento dell'immagine eseguibile per l'applicazione. Questa stringa osserva le normali regole per la risoluzione del percorso e può contenere stringhe di ambiente incorporate (ad esempio %SystemRoot%).
[in] PathLength
Lunghezza, in caratteri, del parametro Path . Questa lunghezza non include il valore NULL terminante.
[in] Extra
Puntatore a una stringa Unicode che rappresenta gli argomenti della riga di comando usati durante l'avvio dell'applicazione specificata nel parametro Path . Il parametro Extra viene usato per distinguere tra più istanze distinte di un'applicazione quando viene avviata con una riga di comando coerente. Si tratta di supportare categorie di applicazioni diverse per istanze diverse di Svchost.exe o Rundll32.exe. Se è necessario solo il parametro Path e non sono necessari argomenti della riga di comando per distinguere ulteriormente le istanze di un'applicazione, il parametro Extra deve essere impostato su NULL.
[in] ExtraLength
Lunghezza, in caratteri, del parametro Extra . Questa lunghezza non include il valore NULL terminante.
[in] PermittedLspCategories
Valore DWORD delle categorie LSP consentite per tutte le istanze di questa applicazione. L'applicazione viene identificata dalla combinazione dei valori dei parametri Path e Extra .
[out] pPrevPermLspCat
Puntatore per ricevere il set precedente di categorie LSP consentite che sono state consentite per tutte le istanze di questa applicazione. Questo parametro è facoltativo può essere NULL.
[out] lpErrno
Puntatore al codice di errore se la funzione ha esito negativo.
Valore restituito
Se non si verifica alcun errore, WSCSetApplicationCategory restituisce ERROR_SUCCESS (zero). In caso contrario, restituisce SOCKET_ERROR e viene restituito un codice di errore specifico nel parametro lpErrno .
Codice di errore | Significato |
---|---|
Uno o più argomenti non si trovano in una parte valida dello spazio degli indirizzi utente. | |
Uno o più argomenti non sono validi. | |
Si è verificato un errore non recuperabile. Questo errore viene restituito in diverse condizioni, tra cui quanto segue: l'utente non dispone dei privilegi amministrativi necessari per accedere al Registro Winsock o si è verificato un errore durante l'apertura di una voce del catalogo Winsock o una voce ID applicazione. |
Commenti
WSCSetApplicationCategory viene usato per impostare i flag di categoria LSP associati a un'istanza dell'applicazione. Le applicazioni possono determinare quali comportamenti di LSP sono accettabili nel contesto dell'applicazione. Pertanto, tramite la specifica delle categorie LSP consentite, un'applicazione può consentire solo i provider di servizi a livelli che implementano comportamenti accettabili da caricare.
Il parametro Extra è necessario quando la riga di comando viene usata per distinguere tra istanze diverse di un'applicazione o di un servizio ospitata all'interno dello stesso eseguibile. Ogni istanza può avere esigenze diverse di categorizzazione dell'applicazione. Svchost.exe e Rundll32.exe sono due esempi in cui è necessaria la riga di comando per distinguere tra istanze di processo diverse. Per SvcHost.exe, l'opzione -k <svcinstance> definisce l'istanza del processo.
Per i servizi, l'uso del nome del servizio non è sufficiente, perché winsock Catalog è globale a un determinato processo e un processo può ospitare diversi servizi.
Se la funzione WSCSetApplicationCategory viene chiamata nella stessa applicazione (lo stesso fullpath, il nome EXE e i parametri) più volte, le categorie sono ORed insieme. Ad esempio, se è stato classificato "c:\foo.exe -param" con LSP_SYSTEM e quindi chiamato la funzione WSCSetApplicationCategory con LSP_REDIRECTOR, la voce risultante per questa applicazione contiene LSP_SYSTEM | LSP_REDIRECTOR. Questo comportamento è progettato per supportare un singolo file eseguibile che ospita più applicazioni in un singolo exe (i servizi di sistema Windows svchost.exe, ad esempio).
I socket di finestra determinano l'identità di un'applicazione e recuperano le categorie LSP consentite durante la prima chiamata a WSAStartup. Questo sarà il set di categorie LSP consentite per la durata dell'istanza dell'applicazione. Le modifiche successive alle categorie LSP consentite per un'identità dell'applicazione specificata non verranno rilevate fino all'istanza successiva dell'applicazione. Le categorie LSP consentite non sono modificabili durante la durata dell'istanza dell'applicazione.
Winsock 2 supporta protocolli a livelli. Un protocollo a livelli è uno che implementa solo funzioni di comunicazione di livello superiore, mentre si basa su uno stack di trasporto sottostante per lo scambio effettivo di dati con un endpoint remoto. Un esempio di protocollo a livelli o un provider di servizi a livelli è un livello di sicurezza che aggiunge il protocollo al processo di creazione della connessione per eseguire l'autenticazione e stabilire uno schema di crittografia concordato reciprocamente. Tale protocollo di sicurezza richiede in genere i servizi di un protocollo di trasporto affidabile sottostante, ad esempio TCP o SPX. Il termine protocollo di base fa riferimento a un protocollo come TCP o SPX che è in grado di eseguire comunicazioni dati con un endpoint remoto. Il termine protocollo a livelli viene usato per descrivere un protocollo che non può essere autonomo.
Durante l'inizializzazione di LSP, il provider di servizi di rete deve fornire puntatori a una serie di funzioni SPI Winsock. Queste funzioni verranno chiamate durante l'elaborazione normale dal livello direttamente sopra il provider di servizi di rete (un altro LSP o Ws2_32.dll).
Un provider di servizi di rete che implementa un file system installabile (IFS) può scegliere in modo selettivo di fornire puntatori alle funzioni implementate da se stesso oppure passare di nuovo i puntatori forniti dal livello direttamente sotto il provider di servizi di rete. Non-IFS LSP, perché forniscono i propri handle, devono implementare tutte le funzioni WINSock SPI. Questo perché ogni SPI richiederà al provider inferiore di eseguire il mapping di tutti gli handle del socket creati all'handle socket del provider inferiore (un altro LSP o il protocollo di base).
Tuttavia, tutti i provider di servizi di rete eseguono il loro lavoro specifico eseguendo un'elaborazione aggiuntiva solo in un subset delle funzioni Winsock SPI.
È possibile definire categorie LSP in base al sottoinsieme di funzioni SPI implementa e la natura dell'elaborazione aggiuntiva eseguita per ognuna di queste funzioni.
Classificando gli indirizzi LSP, nonché classificando le applicazioni che usano socket Winsock, diventa possibile determinare in modo selettivo se un provider di servizi di rete deve essere coinvolto in un determinato processo in fase di esecuzione.
In Windows Vista e versioni successive un LSP può essere classificato in base alla modalità di interazione con le chiamate e i dati di Windows Sockets. Una categoria LSP è un gruppo identificabile di comportamenti in un subset di funzioni Winsock SPI. Ad esempio, un filtro contenuto HTTP verrà classificato come controllo dati (categoria LSP_INSPECTOR ). La categoria LSP_INSPECTOR controlla (ma non modifica) i parametri per il trasferimento dei dati delle funzioni SPI. Un'applicazione può eseguire una query per la categoria di un LSP e scegliere di non caricare il provider di servizi di rete in base alla categoria LSP e al set di categorie LSP consentite dell'applicazione.
Nella tabella seguente sono elencate le categorie in cui è possibile classificare un provider di servizi di rete.
Categoria LSP | Descrizione |
---|---|
**LSP_CRYPTO_COMPRESS** | LSP è un provider di crittografia o compressione dei dati. |
**LSP_FIREWALL** | Il provider di servizi di rete è un provider di firewall. |
**LSP_LOCAL_CACHE** | Il provider di servizi di rete è un provider di cache locale. |
**LSP_INBOUND_MODIFY** | Il provider di servizi di rete modifica i dati in ingresso. |
**LSP_INSPECTOR** | Il provider di servizi di rete controlla o filtra i dati. |
**LSP_OUTBOUND_MODIFY** | Il provider di servizi di rete modifica i dati in uscita. |
**LSP_PROXY** | Il provider di servizi di rete funge da proxy e reindirizza i pacchetti. |
**LSP_REDIRECTOR** | Il provider di servizi di rete è un reindirizzamento di rete. |
**LSP_SYSTEM** | Il provider di servizi è accettabile per l'uso nei servizi e nei processi di sistema. |
Un provider di servizi di rete può appartenere a più categorie. Ad esempio, un provider di servizi di sicurezza/firewall può appartenere sia alle categorie di controllo (LSP_INSPECTOR) sia a firewall (LSP_FIREWALL).
Se un provider di servizi di rete non dispone di un set di categorie, viene considerato come incluso nella categoria Tutti gli altri. Questa categoria LSP non verrà caricata nei processi di sistema o nei servizi, ad esempio lsass, winlogon e molti processi svchost.
La funzione WSCSetApplicationCategory può essere chiamata solo da un utente connesso come membro del gruppo Administrators. Se WSCSetApplicationCategory viene chiamato da un utente che non è membro del gruppo Administrators, la chiamata alla funzione avrà esito negativo e WSANO_RECOVERY viene restituita nel parametro lpErrno . Questa funzione può anche non riuscire a causa del controllo dell'account utente. Se un'applicazione contenente questa funzione viene eseguita da un utente connesso come membro del gruppo Administrators diverso dall'amministratore predefinito, questa chiamata avrà esito negativo a meno che l'applicazione non sia stata contrassegnata nel file manifesto con un set requestedExecutionLevel per richiedereAdministrator. Se l'applicazione in Windows Vista o Windows Server 2008 non dispone di questo file manifesto, un utente connesso come membro del gruppo Administrators diverso dall'amministratore predefinito deve quindi eseguire l'applicazione in una shell avanzata come amministratore predefinito (amministratore RunAs) affinché questa funzione abbia esito positivo.
Qualsiasi installazione di file o configurazione specifica del provider di servizi deve essere eseguita dal chiamante.
Requisiti
Client minimo supportato | Windows Vista [solo app desktop] |
Server minimo supportato | Windows Server 2008 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | ws2spi.h |
Libreria | Ws2_32.lib |
DLL | Ws2_32.dll |
Vedi anche
Categorizzazione di provider e applicazioni di servizi a più livelli