attributo system_handle

L'attributo [system_handle] specifica un tipo di handle definito dal sistema che rappresenta l'accesso a un oggetto di sistema.

[system_handle(system-handle-type[,optional-access-mask])]

Parametri

system-handle-type

Specifica una delle opzioni del tipo di handle di sistema.

Le opzioni valide sono:

facoltativo-access-mask

Facoltativamente, richiede diritti di accesso specifici applicati all'handle duplicato. Per impostazione predefinita, quando non viene specificato, l'handle verrà duplicato con lo stesso accesso.

Per specificare un livello di accesso diverso, utilizzare diritti di accesso specifici dell'oggetto corrispondenti all'oggetto di sistema sottostante selezionato.

Altre informazioni sulla propagazione dei diritti di accesso durante la duplicazione sono disponibili nella documentazione di DuplicateHandle .

I collegamenti agli elenchi dei diritti di accesso per ogni tipo di oggetto sono disponibili nel riferimento DuplicateHandle e nelle intestazioni Vedere anche le intestazioni di ogni sh_* parametro.

Commenti

Per usare questo attributo, il -target flag deve essere impostato su NT100 (o versione successiva) durante l'esecuzione di midl.exe.

Gli handle di sistema sono handle definiti dal sistema operativo per fornire l'accesso a una risorsa di sistema. Per dichiarare l'attributo, è necessario specificare il tipo specifico dell'oggetto sottostante l'handle.

Per un handle contrassegnato [in]da , l'handle verrà duplicato nella routine remota e rimane valido per la durata di tale procedura. Al ritorno dalla procedura remota, l'handle duplicato viene liberato. Per mantenere l'accesso all'oggetto sottostante, l'applicazione remota deve duplicare l'handle nel proprio spazio indirizzi.

Al contrario, per un handle contrassegnato [out]da , quando una routine remota restituisce un handle da una chiamata, la routine remota perderà la proprietà. Per mantenere l'accesso all'oggetto sottostante, la routine remota deve duplicare l'handle e restituire il duplicato. L'handle restituito diventa quindi di proprietà del chiamante che assume la responsabilità di chiuderla quando l'accesso all'oggetto di sistema sottostante non è più necessario.

Poiché si tratta di un meccanismo per l'inoltro dell'accesso a un oggetto di sistema, questo attributo è applicabile solo alle chiamate tra le routine nello stesso computer.

I parametri di creazione e accesso assegnati all'oggetto sottostante dietro l'handle di sistema durante la creazione determinano se è possibile eseguirne correttamente il marshalling nel contesto della routine remota.

Una matrice di system_handle può essere passata o fuori con la sintassi disponibile nella documentazione dell'attributo size_is .

Esempio

Negli esempi seguenti sono disponibili diversi usi di system_handle. Per un esempio completo, vedere l'esempio SystemHandlePassing .

interface MyInterface : IUnknown                         
{         
    HRESULT Proc1([in, system_handle(sh_file)] HANDLE writeThisFile);

    HRESULT Proc2([in, system_handle(sh_pipe, FILE_GENERIC_READ)] HANDLE readThisPipe);

    HRESULT Proc3([out, system_handle(sh_composition)] HANDLE* visual);

    HRESULT Proc4([in] DWORD cEvents, [out, system_handle(sh_event), size_is(cEvents)] HANDLE* pWatchAllTheseEvents);
}

Requisiti

   
Client minimo supportato aggiornamento dell'anniversario di Windows 10 (versione 1607, build 14393)
Server minimo supportato Windows Server 2016 (build 14393)

Vedi anche

Opzione /target

Binding e handle

Handle e oggetti

File IDL (Interface Definition)

DuplicateHandle

Descrittori di sicurezza