[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 typedef struct _ONLINE_NOTIFICATION_WORK_ITEM
{ {
WORK_QUEUE_ITEM; // 0x00 WORK_QUEUE_ITEM WorkItem; // 0x00
PDEVICE_EXTENSION DeviceExtension; // 0x10 PDEVICE_EXTENSION DeviceExtension; // 0x10
UNICODE_STRING SymbolicName; // 0x14 UNICODE_STRING SymbolicName; // 0x14
} ONLINE_NOTIFICATION_WORK_ITEM, *PONLINE_NOTIFICATION_WORK_ITEM; // 0x1C } 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 */ /* Queue a new one for execution */
Head = RemoveHeadList(&(DeviceExtension->OnlineNotificationListHead)); 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); KeReleaseSpinLock(&(DeviceExtension->WorkerLock), OldIrql);
NewWorkItem->List.Blink = NULL; NewWorkItem->WorkItem.List.Blink = NULL;
NewWorkItem->List.Flink = NULL; NewWorkItem->WorkItem.List.Flink = NULL;
ExQueueWorkItem((PWORK_QUEUE_ITEM)NewWorkItem, DelayedWorkQueue); ExQueueWorkItem(&NewWorkItem->WorkItem, DelayedWorkQueue);
} }
else else
{ {
@ -155,10 +155,8 @@ PostOnlineNotification(IN PDEVICE_EXTENSION DeviceExtension,
return; return;
} }
WorkItem->List.Flink = NULL; ExInitializeWorkItem(&WorkItem->WorkItem, SendOnlineNotificationWorker, WorkItem);
WorkItem->DeviceExtension = DeviceExtension; WorkItem->DeviceExtension = DeviceExtension;
WorkItem->WorkerRoutine = SendOnlineNotificationWorker;
WorkItem->Parameter = WorkItem;
WorkItem->SymbolicName.Length = SymbolicName->Length; WorkItem->SymbolicName.Length = SymbolicName->Length;
WorkItem->SymbolicName.MaximumLength = SymbolicName->Length + sizeof(WCHAR); WorkItem->SymbolicName.MaximumLength = SymbolicName->Length + sizeof(WCHAR);
WorkItem->SymbolicName.Buffer = AllocatePool(WorkItem->SymbolicName.MaximumLength); WorkItem->SymbolicName.Buffer = AllocatePool(WorkItem->SymbolicName.MaximumLength);
@ -179,12 +177,12 @@ PostOnlineNotification(IN PDEVICE_EXTENSION DeviceExtension,
{ {
/* Queue that one for execution */ /* Queue that one for execution */
DeviceExtension->OnlineNotificationWorkerActive = 1; DeviceExtension->OnlineNotificationWorkerActive = 1;
ExQueueWorkItem((PWORK_QUEUE_ITEM)WorkItem, DelayedWorkQueue); ExQueueWorkItem(&WorkItem->WorkItem, DelayedWorkQueue);
} }
else else
{ {
/* Otherwise, just put it in the queue list */ /* Otherwise, just put it in the queue list */
InsertTailList(&(DeviceExtension->OnlineNotificationListHead), &(WorkItem->List)); InsertTailList(&(DeviceExtension->OnlineNotificationListHead), &(WorkItem->WorkItem.List));
} }
KeReleaseSpinLock(&(DeviceExtension->WorkerLock), OldIrql); KeReleaseSpinLock(&(DeviceExtension->WorkerLock), OldIrql);

View file

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

View file

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