https://git.reactos.org/?p=reactos.git;a=commitdiff;h=42cb5353b8ce9c85c04615...
commit 42cb5353b8ce9c85c04615beca9bab6245454153 Author: Eric Kohl eric.kohl@reactos.org AuthorDate: Sun Oct 15 00:06:22 2017 +0200
[STORORT] Allocate the miniport device extension and use it the calls to HwFindAdapter and HwInitialize. CORE-13866 --- drivers/storage/port/storport/fdo.c | 11 ++++++++--- drivers/storage/port/storport/miniport.c | 32 +++++++++++++++++++++++++++++--- drivers/storage/port/storport/precomp.h | 14 +++++++++++--- 3 files changed, 48 insertions(+), 9 deletions(-)
diff --git a/drivers/storage/port/storport/fdo.c b/drivers/storage/port/storport/fdo.c index be6b693694..6338c48d12 100644 --- a/drivers/storage/port/storport/fdo.c +++ b/drivers/storage/port/storport/fdo.c @@ -38,9 +38,14 @@ PortFdoStartMiniport( return STATUS_NO_SUCH_DEVICE;
/* Initialize the miniport */ - MiniportInitialize(&DeviceExtension->Miniport, - DeviceExtension, - InitData); + Status = MiniportInitialize(&DeviceExtension->Miniport, + DeviceExtension, + InitData); + if (!NT_SUCCESS(Status)) + { + DPRINT1("MiniportInitialize() failed (Status 0x%08lx)\n", Status); + return Status; + }
/* Call the miniports FindAdapter function */ Status = MiniportFindAdapter(&DeviceExtension->Miniport); diff --git a/drivers/storage/port/storport/miniport.c b/drivers/storage/port/storport/miniport.c index 8e1346fe8b..4e0b37e182 100644 --- a/drivers/storage/port/storport/miniport.c +++ b/drivers/storage/port/storport/miniport.c @@ -15,14 +15,38 @@
/* FUNCTIONS ******************************************************************/
-VOID +NTSTATUS MiniportInitialize( _In_ PMINIPORT Miniport, _In_ PFDO_DEVICE_EXTENSION DeviceExtension, _In_ PHW_INITIALIZATION_DATA InitData) { + PMINIPORT_DEVICE_EXTENSION MiniportExtension; + ULONG Size; + + DPRINT1("MiniportInitialize(%p %p %p)\n", + Miniport, DeviceExtension, InitData); + Miniport->DeviceExtension = DeviceExtension; Miniport->InitData = InitData; + + /* Calculate the miniport device extension size */ + Size = sizeof(MINIPORT_DEVICE_EXTENSION) + + Miniport->InitData->DeviceExtensionSize; + + /* Allocate and initialize the miniport device extension */ + MiniportExtension = ExAllocatePoolWithTag(NonPagedPool, + Size, + TAG_MINIPORT_DATA); + if (MiniportExtension == NULL) + return STATUS_NO_MEMORY; + + RtlZeroMemory(MiniportExtension, Size); + + MiniportExtension->Miniport = Miniport; + Miniport->MiniportExtension = MiniportExtension; + + return STATUS_SUCCESS; }
@@ -36,7 +60,8 @@ MiniportFindAdapter(
DPRINT1("MiniportFindAdapter(%p)\n", Miniport);
- Result = Miniport->InitData->HwFindAdapter(NULL, + /* Call the miniport HwFindAdapter routine */ + Result = Miniport->InitData->HwFindAdapter(&Miniport->MiniportExtension->HwDeviceExtension, NULL, NULL, NULL, @@ -84,7 +109,8 @@ MiniportHwInitialize(
DPRINT1("MiniportHwInitialize(%p)\n", Miniport);
- Status = Miniport->InitData->HwInitialize(NULL); + /* Call the miniport HwInitialize routine */ + Status = Miniport->InitData->HwInitialize(&Miniport->MiniportExtension->HwDeviceExtension); DPRINT1("HwInitialize() returned 0x%08lx\n", Status);
return Status; diff --git a/drivers/storage/port/storport/precomp.h b/drivers/storage/port/storport/precomp.h index fc1224e851..350ca6854d 100644 --- a/drivers/storage/port/storport/precomp.h +++ b/drivers/storage/port/storport/precomp.h @@ -23,8 +23,9 @@ #include <wdmguid.h>
/* Memory Tags */ -#define TAG_GLOBAL_DATA 'DGtS' -#define TAG_INIT_DATA 'DItS' +#define TAG_GLOBAL_DATA 'DGtS' +#define TAG_INIT_DATA 'DItS' +#define TAG_MINIPORT_DATA 'DMtS'
typedef enum { @@ -61,10 +62,17 @@ typedef struct _DRIVER_OBJECT_EXTENSION LIST_ENTRY InitDataListHead; } DRIVER_OBJECT_EXTENSION, *PDRIVER_OBJECT_EXTENSION;
+typedef struct _MINIPORT_DEVICE_EXTENSION +{ + struct _MINIPORT *Miniport; + UCHAR HwDeviceExtension[0]; +} MINIPORT_DEVICE_EXTENSION, *PMINIPORT_DEVICE_EXTENSION; + typedef struct _MINIPORT { struct _FDO_DEVICE_EXTENSION *DeviceExtension; PHW_INITIALIZATION_DATA InitData; + PMINIPORT_DEVICE_EXTENSION MiniportExtension; } MINIPORT, *PMINIPORT;
typedef struct _FDO_DEVICE_EXTENSION @@ -107,7 +115,7 @@ PortFdoPnp(
/* miniport.c */
-VOID +NTSTATUS MiniportInitialize( _In_ PMINIPORT Miniport, _In_ PFDO_DEVICE_EXTENSION DeviceExtension,