Accéder au pointeur opaque dans une destination
L’exemple de code suivant montre comment accéder au pointeur opaque dans une destination.
// Opaque Info Blob Defn
typedef struct _OPAQUE_INFO
{
ULONG Info1;
ULONG Info2;
}
OPAQUE_INFO, *POPAQUE_INFO;
PVOID OpaqueInfoSlotPointer; // Pointer to the opaque pointer slot
PVOID OpaqueInfoSlotInfo; // Information in the opaque pointer slot
POPAQUE_INFO OpaqueInfoPtr; // Pointer to opaque information
DWORD Status;
// Lock the destination in exclusive mode to sync opaque pointer access
// If you know that you will only be reading the opaque pointer
// and not modifying it, then you can use a shared lock
Status = RtmLockDestination(RtmRegHandle, DestHandle, TRUE, TRUE);
if (Status != NO_ERROR)
{
return Status;
}
// You can get a pointer to your opaque pointer slot,
// assuming that you have reserved one during registration.
Status = RtmGetOpaqueInformationPointer(RtmRegHandle,
DestHandle,
&OpaqueInfoSlotPointer);
if (Status == NO_ERROR)
{
OpaqueInfoSlotInfo = * (PVOID *) OpaqueInfoSlotPointer;
if (OpaqueInfoSlotInfo == NULL)
{
// No information set yet - create private information BLOB (if required)
OpaqueInfoPtr = (POPAQUE_INFO) malloc(OpaqueInfoSize);
if (OpaqueInfoPtr)
{
// Set certain information in the opaque information BLOB
OpaqueInfoPtr->Info1 = 1;
OpaqueInfoPtr->Info2 = 2;
* (PVOID *) OpaqueInfoSlotPointer = OpaqueInfoPtr;
}
else
{
// Already exists; do something with the opaque information
OpaqueInfoPtr = (POPAQUE_INFO) OpaqueInfoSlotInfo;
// Set certain information in the opaque information BLOB
OpaqueInfoPtr->Info1 = 3;
OpaqueInfoPtr->Info2 = 4;
}
}
}
// Unlock destination from exclusive mode that we locked earlier
Status = RtmLockDestination(RtmRegHandle, DestHandle, TRUE, FALSE);
ASSERT(Status == NO_ERROR);
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour