[DRIVERS][NTOSKRNL]

Don't use PWORK_QUEUE_ITEM casts in ExQueueWorkItem calls, but use the explicit underlaying work queue item object instead.

svn path=/trunk/; revision=71330
This commit is contained in:
Hermès Bélusca-Maïto 2016-05-15 00:16:31 +00:00
parent fb35282eb3
commit a8924f81c4
4 changed files with 12 additions and 14 deletions

View file

@ -112,7 +112,7 @@ typedef struct _DEVICE_INFORMATION_ENTRY
typedef struct _ONLINE_NOTIFICATION_WORK_ITEM
{
WORK_QUEUE_ITEM; // 0x00
WORK_QUEUE_ITEM WorkItem; // 0x00
PDEVICE_EXTENSION DeviceExtension; // 0x10
UNICODE_STRING SymbolicName; // 0x14
} ONLINE_NOTIFICATION_WORK_ITEM, *PONLINE_NOTIFICATION_WORK_ITEM; // 0x1C

View file

@ -119,11 +119,11 @@ SendOnlineNotificationWorker(IN PVOID Parameter)
{
/* Queue a new one for execution */
Head = RemoveHeadList(&(DeviceExtension->OnlineNotificationListHead));
NewWorkItem = CONTAINING_RECORD(Head, ONLINE_NOTIFICATION_WORK_ITEM, List);
NewWorkItem = CONTAINING_RECORD(Head, ONLINE_NOTIFICATION_WORK_ITEM, WorkItem.List);
KeReleaseSpinLock(&(DeviceExtension->WorkerLock), OldIrql);
NewWorkItem->List.Blink = NULL;
NewWorkItem->List.Flink = NULL;
ExQueueWorkItem((PWORK_QUEUE_ITEM)NewWorkItem, DelayedWorkQueue);
NewWorkItem->WorkItem.List.Blink = NULL;
NewWorkItem->WorkItem.List.Flink = NULL;
ExQueueWorkItem(&NewWorkItem->WorkItem, DelayedWorkQueue);
}
else
{
@ -155,10 +155,8 @@ PostOnlineNotification(IN PDEVICE_EXTENSION DeviceExtension,
return;
}
WorkItem->List.Flink = NULL;
ExInitializeWorkItem(&WorkItem->WorkItem, SendOnlineNotificationWorker, WorkItem);
WorkItem->DeviceExtension = DeviceExtension;
WorkItem->WorkerRoutine = SendOnlineNotificationWorker;
WorkItem->Parameter = WorkItem;
WorkItem->SymbolicName.Length = SymbolicName->Length;
WorkItem->SymbolicName.MaximumLength = SymbolicName->Length + sizeof(WCHAR);
WorkItem->SymbolicName.Buffer = AllocatePool(WorkItem->SymbolicName.MaximumLength);
@ -179,12 +177,12 @@ PostOnlineNotification(IN PDEVICE_EXTENSION DeviceExtension,
{
/* Queue that one for execution */
DeviceExtension->OnlineNotificationWorkerActive = 1;
ExQueueWorkItem((PWORK_QUEUE_ITEM)WorkItem, DelayedWorkQueue);
ExQueueWorkItem(&WorkItem->WorkItem, DelayedWorkQueue);
}
else
{
/* Otherwise, just put it in the queue list */
InsertTailList(&(DeviceExtension->OnlineNotificationListHead), &(WorkItem->List));
InsertTailList(&(DeviceExtension->OnlineNotificationListHead), &(WorkItem->WorkItem.List));
}
KeReleaseSpinLock(&(DeviceExtension->WorkerLock), OldIrql);

View file

@ -108,11 +108,11 @@ CcScheduleReadAhead(IN PFILE_OBJECT FileObject,
WorkItem->FileOffset = *FileOffset;
WorkItem->Length = Length;
ExInitializeWorkItem(((PWORK_QUEUE_ITEM)WorkItem),
ExInitializeWorkItem(&WorkItem->WorkItem,
(PWORKER_THREAD_ROUTINE)CcpReadAhead,
WorkItem);
ExQueueWorkItem((PWORK_QUEUE_ITEM)WorkItem, DelayedWorkQueue);
ExQueueWorkItem(&WorkItem->WorkItem, DelayedWorkQueue);
DPRINT("Done\n");
}

View file

@ -273,7 +273,7 @@ CcpDereferenceCache(ULONG Start,
WorkItem->ReleaseFromLazyWrite = Bcb->Map->Callbacks.ReleaseFromLazyWrite;
WorkItem->LazyContext = Bcb->Map->LazyContext;
ExInitializeWorkItem(((PWORK_QUEUE_ITEM)WorkItem),
ExInitializeWorkItem(&WorkItem->WorkItem,
(PWORKER_THREAD_ROUTINE)CcpUnmapCache,
WorkItem);
@ -287,7 +287,7 @@ CcpDereferenceCache(ULONG Start,
RemoveEntryList(&Bcb->ThisFileList);
CcpUnlock();
ExQueueWorkItem((PWORK_QUEUE_ITEM)WorkItem, DelayedWorkQueue);
ExQueueWorkItem(&WorkItem->WorkItem, DelayedWorkQueue);
CcpLock();
}
DPRINT("Done\n");