예제 #1
0
PEVENT_CONTEXT
AllocateEventContext(
	__in PDEVICE_EXTENSION	DeviceExtension,
	__in PIRP				Irp,
	__in ULONG				EventContextLength,
	__in PDokanCCB			Ccb
	)
{
	ULONG driverContextLength;
	PDRIVER_EVENT_CONTEXT driverEventContext;
	PEVENT_CONTEXT eventContext;

	driverContextLength = EventContextLength - sizeof(EVENT_CONTEXT) + sizeof(DRIVER_EVENT_CONTEXT);
	driverEventContext = ExAllocatePool(driverContextLength);

	if (driverEventContext == NULL)
		return NULL;

	RtlZeroMemory(driverEventContext, driverContextLength);
	InitializeListHead(&driverEventContext->ListEntry);
	eventContext = &driverEventContext->EventContext;
	eventContext->Length = EventContextLength;

	SetCommonEventContext(DeviceExtension, eventContext, Irp, Ccb);
	eventContext->SerialNumber = InterlockedIncrement(&DeviceExtension->SerialNumber);

	return eventContext;
}
예제 #2
0
PEVENT_CONTEXT
AllocateEventContext(__in PDokanDCB Dcb, __in PIRP Irp,
                     __in ULONG EventContextLength, __in_opt PDokanCCB Ccb) {
  PEVENT_CONTEXT eventContext;
  eventContext = AllocateEventContextRaw(EventContextLength);
  if (eventContext == NULL) {
    return NULL;
  }
  SetCommonEventContext(Dcb, eventContext, Irp, Ccb);
  eventContext->SerialNumber = InterlockedIncrement((LONG *)&Dcb->SerialNumber);

  return eventContext;
}