대상의 불투명 포인터에 액세스
다음 샘플 코드는 대상의 불투명 포인터에 액세스하는 방법을 보여줍니다.
// 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 문제를 단계적으로 폐지하고 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은다음에 대한 사용자 의견 제출 및 보기