Méthode ITabletContextP::UseNamedSharedMemoryCommunications
Configure la communication en mémoire partagée pour le contexte de la tablette.
Syntaxe
HRESULT UseNamedSharedMemoryCommunications(
[in] DWORD pid,
[in] LPCSTR pszCallerSid,
[in] LPCSTR pszCallerIntegritySid,
[out] DWORD *pdwEventMoreDataId,
[out] DWORD *pdwEventClientReadyId,
[out] DWORD *pdwMutexAccessId,
[out] DWORD *pdwFileMappingId
);
Paramètres
-
pid [in]
-
ID de processus du client qui accède à la mémoire partagée.
-
pszCallerSid [in]
-
Identificateur de sécurité de l’appelant de fonction.
-
pszCallerIntegritySid [in]
-
Identificateur de sécurité qui peut vérifier l’intégrité de la fonction appelante.
-
pdwEventMoreDataId [out]
-
Entier utilisé pour construire le nom d’un événement. L’événement indique s’il y a plus de données.
-
pdwEventClientReadyId [out]
-
Entier utilisé pour construire le nom d’un événement. L’événement indique que le client est prêt à recevoir des données. L’événement est signalé après le traitement de nouvelles données.
-
pdwMutexAccessId [out]
-
Pointeur vers l’identificateur d’accès de la mémoire partagée.
-
pdwFileMappingId [out]
-
Entier qui identifie la mémoire partagée.
Valeur retournée
Si cette méthode réussit, elle retourne S_OK. Sinon, il retourne un code d’erreur HRESULT .
Notes
La méthode UseNamedSharedMemoryCommunications fait partie du protocole de mémoire partagée Tablet PC. Un client sans privilèges élevés transmet un identificateur de sécurité (SID) et un identificateur de sécurité de niveau d’intégrité (IL-SID) afin que le service Tablet puisse utiliser des listes de contrôle d’accès (ACL) pour accéder aux objets de mémoire partagée. Si le client dispose de privilèges élevés, il doit utiliser UseSharedMemoryCommunications, qui est l’API appelée si le service dispose déjà d’un privilège élevé.
La structure SHAREDMEMORY_HEADER stocke l’en-tête de mémoire partagée.
La structure SHAREDMEMORY_HEADER est castée à partir des données référencées par le mappage de fichiers. Les données de paquet brutes suivent la SHAREDMEMORY_HEADER. Les données de paquet brutes peuvent être lues sur la mémoire partagée lorsque l’événement référencé par pdwEventClientReadyId est déclenché.
La liste suivante décrit la séquence d’événements pour l’accès et l’utilisation de la mémoire partagée.
- Le client déclenche l’événement clientReady.
- Le client attend l’événement moreData.
- Le client acquiert le mutex.
- Le client lit les données de paquet à partir de la section de mémoire partagée qui suit l’en-tête. Les numéros de série apparaissent dans la mémoire partagée après les données du paquet.
- Le client gère les données en fonction de la valeur de dwEvent.
- Le client écrit -1 (0xFFFFFFFF) dans dwEvent.
- Le client libère le mutex.
- Le client déclenche l’événement clientReady.
Les noms d’événements sont créés en mettant en forme la sortie de cette méthode. Les définitions suivantes peuvent être utilisées conjointement avec sprintf ou son équivalent pour créer les noms d’événements.
#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")
Dans chaque définition, la section %d est remplacée par l’ID de processus, et la section %u est remplacée par l’entier retourné dans pdwEventMoreDataId ou pdwEventClientReadyId.
Spécifications
Condition requise | Valeur |
---|---|
Client minimal pris en charge |
Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge |
Aucun pris en charge |
Bibliothèque |
|