Método ITabletContextP::UseNamedSharedMemoryCommunications
Configura la comunicación de memoria compartida para el contexto de la tableta.
Sintaxis
HRESULT UseNamedSharedMemoryCommunications(
[in] DWORD pid,
[in] LPCSTR pszCallerSid,
[in] LPCSTR pszCallerIntegritySid,
[out] DWORD *pdwEventMoreDataId,
[out] DWORD *pdwEventClientReadyId,
[out] DWORD *pdwMutexAccessId,
[out] DWORD *pdwFileMappingId
);
Parámetros
-
pid [in]
-
Identificador de proceso del cliente que accede a la memoria compartida.
-
pszCallerSid [in]
-
Identificador de seguridad del autor de la llamada de la función.
-
pszCallerIntegritySid [in]
-
Identificador de seguridad que puede comprobar la integridad de la función de llamada.
-
pdwEventMoreDataId [out]
-
Entero utilizado para construir el nombre de un evento. El evento indica si hay más datos.
-
pdwEventClientReadyId [out]
-
Entero utilizado para construir el nombre de un evento. El evento indica que el cliente está listo para recibir datos. El evento se señala después de procesar nuevos datos.
-
pdwMutexAccessId [out]
-
Puntero al identificador de acceso de la memoria compartida.
-
pdwFileMappingId [out]
-
Entero que identifica la memoria compartida.
Valor devuelto
Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error HRESULT .
Comentarios
El método UseNamedSharedMemoryCommunications forma parte del protocolo de memoria compartida del PC tablet. Un cliente sin privilegios elevados pasa un identificador de seguridad (SID) y un identificador de seguridad de nivel de integridad (IL-SID) para que el servicio Tablet pueda usar listas de control de acceso (ACL) para acceder a los objetos de memoria compartida. Si el cliente tiene privilegios elevados, debe usar UseSharedMemoryCommunications, que es la API a la que se llama si el servicio ya tiene un privilegio elevado.
La estructura SHAREDMEMORY_HEADER almacena el encabezado de memoria compartida.
La estructura SHAREDMEMORY_HEADER se convierte a partir de los datos a los que hace referencia la asignación de archivos. Los datos de paquetes sin procesar siguen el SHAREDMEMORY_HEADER. Los datos de paquetes sin procesar se pueden leer de la memoria compartida cuando se genera el evento al que hace referencia pdwEventClientReadyId .
En la lista siguiente se describe la secuencia de eventos para acceder y usar la memoria compartida.
- El cliente genera el evento clientReady.
- El cliente espera el evento moreData.
- El cliente adquiere la exclusión mutua.
- El cliente lee los datos de paquetes de la sección de memoria compartida que sigue al encabezado . Los números de serie aparecen en la memoria compartida después de los datos del paquete.
- El cliente controla los datos en función del valor de dwEvent.
- El cliente escribe -1 (0xFFFFFFFF) en dwEvent.
- El cliente libera la exclusión mutua.
- El cliente genera el evento clientReady.
Los nombres de evento se crean mediante el formato de la salida de este método. Las definiciones siguientes se pueden usar junto con sprintf o su equivalente para crear los nombres de evento.
#define WISPTIS_SM_MORE_DATA_EVENT_NAME _T("wisptis-1-%d-%u")
#define WISPTIS_SM_CLIENT_DONE_EVENT_NAME _T("wisptis-2-%d-%u")
#define WISPTIS_SM_SECTION_NAME _T("wisptis-3-%d-%u")
#define WISPTIS_SM_THREAD_EVENT_NAME _T("wisptis-4-%u")
En cada definición, la sección %d se reemplaza por el identificador de proceso y la sección %u se reemplaza por el entero devuelto en pdwEventMoreDataId o pdwEventClientReadyId.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible |
Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible |
No se admite ninguno |
Biblioteca |
|