/* Mapping for Callback Object */
GENERIC_MAPPING ExpCallbackMapping =
{
- CALLBACK_READ,
- CALLBACK_WRITE,
- CALLBACK_EXECUTE,
+ STANDARD_RIGHTS_READ,
+ STANDARD_RIGHTS_WRITE | CALLBACK_MODIFY_STATE,
+ STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE,
CALLBACK_ALL_ACCESS
};
/* Allocate a callback */
CallbackBlock = ExAllocatePoolWithTag(PagedPool,
sizeof(EX_CALLBACK_ROUTINE_BLOCK),
- 'CbRb');
+ TAG_CALLBACK_ROUTINE_BLOCK);
if (CallbackBlock)
{
/* Initialize it */
ExFreeCallBack(IN PEX_CALLBACK_ROUTINE_BLOCK CallbackBlock)
{
/* Just free it from memory */
- ExFreePool(CallbackBlock);
+ ExFreePoolWithTag(CallbackBlock, TAG_CALLBACK_ROUTINE_BLOCK);
}
VOID
EX_FAST_REF OldValue;
ULONG_PTR Count;
PEX_CALLBACK_ROUTINE_BLOCK CallbackBlock;
-
+
/* Acquire a reference */
OldValue = ExAcquireFastReference(&CallBack->RoutineBlock);
Count = ExGetCountFastReference(OldValue);
ASSERT(FALSE);
return NULL;
}
-
+
/* Get the callback block */
CallbackBlock = ExGetObjectFastReference(OldValue);
-
+
/* Check if this is the last reference */
if (Count == 1)
{
{
EX_FAST_REF OldValue;
PEX_CALLBACK_ROUTINE_BLOCK CallbackBlock;
- ULONG_PTR Count;
+ ULONG Count;
/* Check that we have a new block */
if (NewBlock)
return FALSE;
}
}
-
+
/* Do the swap */
OldValue = ExCompareSwapFastReference(&CallBack->RoutineBlock,
NewBlock,
0,
ExCallbackObjectType,
KernelMode,
- (PVOID)&Callback,
+ (PVOID *)&Callback,
NULL);
/* Close the Handle, since we now have the pointer */
}
/* Everything went fine, so return a pointer to the Object */
- if (NT_SUCCESS(Status)) *CallbackObject = Callback;
+ if (NT_SUCCESS(Status))
+ {
+ *CallbackObject = Callback;
+ }
return Status;
}
/* Allocate memory for the structure */
CallbackRegistration = ExAllocatePoolWithTag(NonPagedPool,
sizeof(CALLBACK_REGISTRATION),
- CALLBACK_TAG);
+ TAG_CALLBACK_REGISTRATION);
if (!CallbackRegistration)
{
/* Dereference and fail */
KeReleaseSpinLock(&CallbackObject->Lock, OldIrql);
/* Free the registration */
- ExFreePool(CallbackRegistration);
+ ExFreePoolWithTag(CallbackRegistration, TAG_CALLBACK_REGISTRATION);
CallbackRegistration = NULL;
/* Dereference the object */
KeReleaseSpinLock(&CallbackObject->Lock, OldIrql);
/* Delete this registration */
- ExFreePool(CallbackRegistration);
+ ExFreePoolWithTag(CallbackRegistration, TAG_CALLBACK_REGISTRATION);
/* Remove the reference */
ObDereferenceObject(CallbackObject);