/* 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 */
- ExFreePoolWithTag(CallbackBlock, CALLBACK_TAG);
+ 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)
{
MAX_FAST_REFS + 1))
{
/* This should never happen */
- ASSERTMSG("Callback block is already undergoing rundown", FALSE);
+ ASSERTMSG("Callback block is already undergoing rundown\n", FALSE);
return FALSE;
}
}
/* It failed, check if we had a block */
if (NewBlock)
{
- /* We did, remove the refernces that we had added */
+ /* We did, remove the references that we had added */
ExfReleaseRundownProtectionEx(&NewBlock->RundownProtect,
MAX_FAST_REFS + 1);
}
* @implemented
*
* Opens or creates a Callback Object. Creates only if Create is true.
- * Allows multiple Callback Functions to be registred only if
+ * Allows multiple Callback Functions to be registered only if
* AllowMultipleCallbacks is true.
* See: http://www.osronline.com/ddkx/kmarch/k102_967m.htm
* http://www.osronline.com/article.cfm?id=24
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 */
- ExFreePoolWithTag(CallbackRegistration, CALLBACK_TAG);
+ ExFreePoolWithTag(CallbackRegistration, TAG_CALLBACK_REGISTRATION);
CallbackRegistration = NULL;
/* Dereference the object */
KeReleaseSpinLock(&CallbackObject->Lock, OldIrql);
/* Delete this registration */
- ExFreePoolWithTag(CallbackRegistration, CALLBACK_TAG);
+ ExFreePoolWithTag(CallbackRegistration, TAG_CALLBACK_REGISTRATION);
/* Remove the reference */
ObDereferenceObject(CallbackObject);