存取目的地中的不透明指標
下列範例程式碼示範如何存取目的地中的不透明指標。
// 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);
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應