Compartir a través de


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.

  1. El cliente genera el evento clientReady.
  2. El cliente espera el evento moreData.
  3. El cliente adquiere la exclusión mutua.
  4. 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.
  5. El cliente controla los datos en función del valor de dwEvent.
  6. El cliente escribe -1 (0xFFFFFFFF) en dwEvent.
  7. El cliente libera la exclusión mutua.
  8. 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
Wisptis.exe

Consulte también

UseSharedMemoryCommunications

ITabletContextP