ULONG Attempts, OutputLength;
PMOUNTMGR_TARGET_NAME Target;
PMOUNTMGR_VOLUME_PATHS Paths, Output;
+ RECONCILE_WORK_ITEM_CONTEXT ReconcileContext;
PDEVICE_INFORMATION DeviceInformation, ListDeviceInfo, FailedDevice;
Stack = IoGetCurrentIrpStackLocation(Irp);
}
/* Reconcile database */
+ ReconcileContext.DeviceExtension = DeviceExtension;
+ ReconcileContext.DeviceInformation = FailedDevice;
KeReleaseSemaphore(&DeviceExtension->DeviceLock, IO_NO_INCREMENT, 1, FALSE);
- ReconcileThisDatabaseWithMasterWorker(&DeviceExtension);
+ ReconcileThisDatabaseWithMasterWorker(&ReconcileContext);
KeWaitForSingleObject(&DeviceExtension->DeviceLock, Executive, KernelMode, FALSE, NULL);
/* Look for our device, to check it's online */
UNICODE_STRING SymbolicName; // 0x14
} ONLINE_NOTIFICATION_WORK_ITEM, *PONLINE_NOTIFICATION_WORK_ITEM; // 0x1C
+typedef struct _RECONCILE_WORK_ITEM_CONTEXT
+{
+ PDEVICE_EXTENSION DeviceExtension;
+ PDEVICE_INFORMATION DeviceInformation;
+} RECONCILE_WORK_ITEM_CONTEXT, *PRECONCILE_WORK_ITEM_CONTEXT;
+
typedef struct _RECONCILE_WORK_ITEM
{
LIST_ENTRY WorkerQueueListEntry; // 0x00
PIO_WORKITEM WorkItem; // 0x08
PWORKER_THREAD_ROUTINE WorkerRoutine; // 0x0C
PVOID Context; // 0x10
- PDEVICE_EXTENSION DeviceExtension; // 0x14
- PDEVICE_INFORMATION DeviceInformation; // 0x18
+ RECONCILE_WORK_ITEM_CONTEXT; // 0x14
} RECONCILE_WORK_ITEM, *PRECONCILE_WORK_ITEM; // 0x1C
typedef struct _MIGRATE_WORK_ITEM