mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 01:42:30 +00:00
[STORPORT] Initialize a miniport object and call the miniport HwFindAdapter and HwInitialize routines.
CORE-13866
This commit is contained in:
parent
da5b61f32f
commit
8dea67f8ba
|
@ -3,6 +3,7 @@ spec2def(storport.sys storport.spec ADD_IMPORTLIB)
|
||||||
|
|
||||||
list(APPEND SOURCE
|
list(APPEND SOURCE
|
||||||
fdo.c
|
fdo.c
|
||||||
|
miniport.c
|
||||||
misc.c
|
misc.c
|
||||||
pdo.c
|
pdo.c
|
||||||
storport.c
|
storport.c
|
||||||
|
@ -11,6 +12,7 @@ list(APPEND SOURCE
|
||||||
|
|
||||||
add_library(storport SHARED
|
add_library(storport SHARED
|
||||||
${SOURCE}
|
${SOURCE}
|
||||||
|
guid.c
|
||||||
storport.rc
|
storport.rc
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/storport.def)
|
${CMAKE_CURRENT_BINARY_DIR}/storport.def)
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,53 @@
|
||||||
|
|
||||||
/* FUNCTIONS ******************************************************************/
|
/* FUNCTIONS ******************************************************************/
|
||||||
|
|
||||||
|
static
|
||||||
|
NTSTATUS
|
||||||
|
PortFdoStartMiniport(
|
||||||
|
_In_ PFDO_DEVICE_EXTENSION DeviceExtension)
|
||||||
|
{
|
||||||
|
PHW_INITIALIZATION_DATA InitData;
|
||||||
|
INTERFACE_TYPE InterfaceType;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
DPRINT1("PortFdoStartDevice(%p)\n", DeviceExtension);
|
||||||
|
|
||||||
|
/* Get the interface type of the lower device */
|
||||||
|
InterfaceType = GetBusInterface(DeviceExtension->LowerDevice);
|
||||||
|
if (InterfaceType == InterfaceTypeUndefined)
|
||||||
|
return STATUS_NO_SUCH_DEVICE;
|
||||||
|
|
||||||
|
/* Get the driver init data for the given interface type */
|
||||||
|
InitData = PortGetDriverInitData(DeviceExtension->DriverExtension,
|
||||||
|
InterfaceType);
|
||||||
|
if (InitData == NULL)
|
||||||
|
return STATUS_NO_SUCH_DEVICE;
|
||||||
|
|
||||||
|
/* Initialize the miniport */
|
||||||
|
MiniportInitialize(&DeviceExtension->Miniport,
|
||||||
|
DeviceExtension,
|
||||||
|
InitData);
|
||||||
|
|
||||||
|
/* Call the miniports FindAdapter function */
|
||||||
|
Status = MiniportFindAdapter(&DeviceExtension->Miniport);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("MiniportFindAdapter() failed (Status 0x%08lx)\n", Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Call the miniports HwInitialize function */
|
||||||
|
Status = MiniportHwInitialize(&DeviceExtension->Miniport);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("MiniportHwInitialize() failed (Status 0x%08lx)\n", Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -22,12 +69,36 @@ PortFdoStartDevice(
|
||||||
_In_ PFDO_DEVICE_EXTENSION DeviceExtension,
|
_In_ PFDO_DEVICE_EXTENSION DeviceExtension,
|
||||||
_In_ PIRP Irp)
|
_In_ PIRP Irp)
|
||||||
{
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT1("PortFdoStartDevice(%p %p)\n",
|
DPRINT1("PortFdoStartDevice(%p %p)\n",
|
||||||
DeviceExtension, Irp);
|
DeviceExtension, Irp);
|
||||||
|
|
||||||
ASSERT(DeviceExtension->ExtensionType == FdoExtension);
|
ASSERT(DeviceExtension->ExtensionType == FdoExtension);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
/* Start the lower device if the FDO is in 'stopped' state */
|
||||||
|
if (DeviceExtension->PnpState == dsStopped)
|
||||||
|
{
|
||||||
|
Status = ForwardIrpAndWait(DeviceExtension->LowerDevice, Irp);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("ForwardIrpAndWait() failed (Status 0x%08lx)\n", Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Change to the 'started' state */
|
||||||
|
DeviceExtension->PnpState = dsStarted;
|
||||||
|
|
||||||
|
/* Start the miniport (FindAdapter & Initialize) */
|
||||||
|
Status = PortFdoStartMiniport(DeviceExtension);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("FdoStartMiniport() failed (Status 0x%08lx)\n", Status);
|
||||||
|
DeviceExtension->PnpState = dsStopped;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,12 +143,7 @@ PortFdoPnp(
|
||||||
{
|
{
|
||||||
case IRP_MN_START_DEVICE: /* 0x00 */
|
case IRP_MN_START_DEVICE: /* 0x00 */
|
||||||
DPRINT1("IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
|
DPRINT1("IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
|
||||||
/* Call lower driver */
|
Status = PortFdoStartDevice(DeviceExtension, Irp);
|
||||||
Status = ForwardIrpAndWait(DeviceExtension->LowerDevice, Irp);
|
|
||||||
if (NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
Status = PortFdoStartDevice(DeviceExtension, Irp);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IRP_MN_QUERY_REMOVE_DEVICE: /* 0x01 */
|
case IRP_MN_QUERY_REMOVE_DEVICE: /* 0x01 */
|
||||||
|
|
11
drivers/storage/port/storport/guid.c
Normal file
11
drivers/storage/port/storport/guid.c
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
/* DO NOT USE THE PRECOMPILED HEADER FOR THIS FILE! */
|
||||||
|
|
||||||
|
#include <ntdef.h>
|
||||||
|
#include <initguid.h>
|
||||||
|
#include <ioevent.h>
|
||||||
|
#include <wdmguid.h>
|
||||||
|
|
||||||
|
#define DEVICE_TYPE ULONG
|
||||||
|
#include <ntddstor.h>
|
||||||
|
|
||||||
|
/* NO CODE HERE, THIS IS JUST REQUIRED FOR THE GUID DEFINITIONS */
|
93
drivers/storage/port/storport/miniport.c
Normal file
93
drivers/storage/port/storport/miniport.c
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Storport Driver
|
||||||
|
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
||||||
|
* PURPOSE: Miniport interface code
|
||||||
|
* COPYRIGHT: Copyright 2017 Eric Kohl (eric.kohl@reactos.org)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* INCLUDES *******************************************************************/
|
||||||
|
|
||||||
|
#include "precomp.h"
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* FUNCTIONS ******************************************************************/
|
||||||
|
|
||||||
|
VOID
|
||||||
|
MiniportInitialize(
|
||||||
|
_In_ PMINIPORT Miniport,
|
||||||
|
_In_ PFDO_DEVICE_EXTENSION DeviceExtension,
|
||||||
|
_In_ PHW_INITIALIZATION_DATA InitData)
|
||||||
|
{
|
||||||
|
Miniport->DeviceExtension = DeviceExtension;
|
||||||
|
Miniport->InitData = InitData;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
MiniportFindAdapter(
|
||||||
|
_In_ PMINIPORT Miniport)
|
||||||
|
{
|
||||||
|
BOOLEAN Reserved = FALSE;
|
||||||
|
ULONG Result;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
DPRINT1("MiniportFindAdapter(%p)\n", Miniport);
|
||||||
|
|
||||||
|
Result = Miniport->InitData->HwFindAdapter(NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&Reserved);
|
||||||
|
DPRINT1("HwFindAdapter() returned %lu\n", Result);
|
||||||
|
|
||||||
|
switch (Result)
|
||||||
|
{
|
||||||
|
case SP_RETURN_NOT_FOUND:
|
||||||
|
DPRINT1("SP_RETURN_NOT_FOUND\n");
|
||||||
|
Status = STATUS_NOT_FOUND;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SP_RETURN_FOUND:
|
||||||
|
DPRINT1("SP_RETURN_FOUND\n");
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SP_RETURN_ERROR:
|
||||||
|
DPRINT1("SP_RETURN_ERROR\n");
|
||||||
|
Status = STATUS_ADAPTER_HARDWARE_ERROR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SP_RETURN_BAD_CONFIG:
|
||||||
|
DPRINT1("SP_RETURN_BAD_CONFIG\n");
|
||||||
|
Status = STATUS_DEVICE_CONFIGURATION_ERROR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
DPRINT1("Unknown result: %lu\n", Result);
|
||||||
|
Status = STATUS_INTERNAL_ERROR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
MiniportHwInitialize(
|
||||||
|
_In_ PMINIPORT Miniport)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
DPRINT1("MiniportHwInitialize(%p)\n", Miniport);
|
||||||
|
|
||||||
|
Status = Miniport->InitData->HwInitialize(NULL);
|
||||||
|
DPRINT1("HwInitialize() returned 0x%08lx\n", Status);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EOF */
|
|
@ -68,4 +68,31 @@ ForwardIrpAndForget(
|
||||||
return IoCallDriver(LowerDevice, Irp);
|
return IoCallDriver(LowerDevice, Irp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INTERFACE_TYPE
|
||||||
|
GetBusInterface(
|
||||||
|
PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
GUID Guid;
|
||||||
|
ULONG Length;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
Status = IoGetDeviceProperty(DeviceObject,
|
||||||
|
DevicePropertyBusTypeGuid,
|
||||||
|
sizeof(Guid),
|
||||||
|
&Guid,
|
||||||
|
&Length);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
return InterfaceTypeUndefined;
|
||||||
|
|
||||||
|
if (RtlCompareMemory(&Guid, &GUID_BUS_TYPE_PCMCIA, sizeof(GUID)) == sizeof(GUID))
|
||||||
|
return PCMCIABus;
|
||||||
|
else if (RtlCompareMemory(&Guid, &GUID_BUS_TYPE_PCI, sizeof(GUID)) == sizeof(GUID))
|
||||||
|
return PCIBus;
|
||||||
|
else if (RtlCompareMemory(&Guid, &GUID_BUS_TYPE_ISAPNP, sizeof(GUID)) == sizeof(GUID))
|
||||||
|
return PNPISABus;
|
||||||
|
|
||||||
|
return InterfaceTypeUndefined;
|
||||||
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <wdm.h>
|
#include <wdm.h>
|
||||||
#include <ntddk.h>
|
#include <ntddk.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <memory.h>
|
||||||
|
|
||||||
/* Declare STORPORT_API functions as exports rather than imports */
|
/* Declare STORPORT_API functions as exports rather than imports */
|
||||||
#define _STORPORT_
|
#define _STORPORT_
|
||||||
|
@ -19,6 +20,11 @@
|
||||||
#include <ntddscsi.h>
|
#include <ntddscsi.h>
|
||||||
#include <ntdddisk.h>
|
#include <ntdddisk.h>
|
||||||
#include <mountdev.h>
|
#include <mountdev.h>
|
||||||
|
#include <wdmguid.h>
|
||||||
|
|
||||||
|
/* Memory Tags */
|
||||||
|
#define TAG_GLOBAL_DATA 'DGtS'
|
||||||
|
#define TAG_INIT_DATA 'DItS'
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
@ -37,18 +43,30 @@ typedef enum
|
||||||
PdoExtension
|
PdoExtension
|
||||||
} EXTENSION_TYPE;
|
} EXTENSION_TYPE;
|
||||||
|
|
||||||
|
typedef struct _DRIVER_INIT_DATA
|
||||||
|
{
|
||||||
|
LIST_ENTRY Entry;
|
||||||
|
HW_INITIALIZATION_DATA HwInitData;
|
||||||
|
} DRIVER_INIT_DATA, *PDRIVER_INIT_DATA;
|
||||||
|
|
||||||
typedef struct _DRIVER_OBJECT_EXTENSION
|
typedef struct _DRIVER_OBJECT_EXTENSION
|
||||||
{
|
{
|
||||||
EXTENSION_TYPE ExtensionType;
|
EXTENSION_TYPE ExtensionType;
|
||||||
|
|
||||||
PDRIVER_OBJECT DriverObject;
|
PDRIVER_OBJECT DriverObject;
|
||||||
|
|
||||||
KSPIN_LOCK AdapterListLock;
|
KSPIN_LOCK AdapterListLock;
|
||||||
LIST_ENTRY AdapterListHead;
|
LIST_ENTRY AdapterListHead;
|
||||||
ULONG AdapterCount;
|
ULONG AdapterCount;
|
||||||
|
|
||||||
|
LIST_ENTRY InitDataListHead;
|
||||||
} DRIVER_OBJECT_EXTENSION, *PDRIVER_OBJECT_EXTENSION;
|
} DRIVER_OBJECT_EXTENSION, *PDRIVER_OBJECT_EXTENSION;
|
||||||
|
|
||||||
|
typedef struct _MINIPORT
|
||||||
|
{
|
||||||
|
struct _FDO_DEVICE_EXTENSION *DeviceExtension;
|
||||||
|
PHW_INITIALIZATION_DATA InitData;
|
||||||
|
} MINIPORT, *PMINIPORT;
|
||||||
|
|
||||||
typedef struct _FDO_DEVICE_EXTENSION
|
typedef struct _FDO_DEVICE_EXTENSION
|
||||||
{
|
{
|
||||||
EXTENSION_TYPE ExtensionType;
|
EXTENSION_TYPE ExtensionType;
|
||||||
|
@ -57,9 +75,13 @@ typedef struct _FDO_DEVICE_EXTENSION
|
||||||
PDEVICE_OBJECT LowerDevice;
|
PDEVICE_OBJECT LowerDevice;
|
||||||
PDEVICE_OBJECT PhysicalDevice;
|
PDEVICE_OBJECT PhysicalDevice;
|
||||||
|
|
||||||
DEVICE_STATE PnpState;
|
PDRIVER_OBJECT_EXTENSION DriverExtension;
|
||||||
|
|
||||||
|
DEVICE_STATE PnpState;
|
||||||
LIST_ENTRY AdapterListEntry;
|
LIST_ENTRY AdapterListEntry;
|
||||||
|
|
||||||
|
MINIPORT Miniport;
|
||||||
|
|
||||||
} FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
|
} FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,6 +105,23 @@ PortFdoPnp(
|
||||||
_In_ PIRP Irp);
|
_In_ PIRP Irp);
|
||||||
|
|
||||||
|
|
||||||
|
/* miniport.c */
|
||||||
|
|
||||||
|
VOID
|
||||||
|
MiniportInitialize(
|
||||||
|
_In_ PMINIPORT Miniport,
|
||||||
|
_In_ PFDO_DEVICE_EXTENSION DeviceExtension,
|
||||||
|
_In_ PHW_INITIALIZATION_DATA HwInitializationData);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
MiniportFindAdapter(
|
||||||
|
_In_ PMINIPORT Miniport);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
MiniportHwInitialize(
|
||||||
|
_In_ PMINIPORT Miniport);
|
||||||
|
|
||||||
|
|
||||||
/* misc.c */
|
/* misc.c */
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -96,6 +135,9 @@ ForwardIrpAndForget(
|
||||||
_In_ PDEVICE_OBJECT LowerDevice,
|
_In_ PDEVICE_OBJECT LowerDevice,
|
||||||
_In_ PIRP Irp);
|
_In_ PIRP Irp);
|
||||||
|
|
||||||
|
INTERFACE_TYPE
|
||||||
|
GetBusInterface(
|
||||||
|
PDEVICE_OBJECT DeviceObject);
|
||||||
|
|
||||||
/* pdo.c */
|
/* pdo.c */
|
||||||
|
|
||||||
|
@ -108,6 +150,11 @@ PortPdoPnp(
|
||||||
|
|
||||||
/* storport.c */
|
/* storport.c */
|
||||||
|
|
||||||
|
PHW_INITIALIZATION_DATA
|
||||||
|
PortGetDriverInitData(
|
||||||
|
PDRIVER_OBJECT_EXTENSION DriverExtension,
|
||||||
|
INTERFACE_TYPE InterfaceType);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
DriverEntry(
|
DriverEntry(
|
||||||
|
|
|
@ -20,6 +20,86 @@ ULONG PortNumber = 0;
|
||||||
|
|
||||||
/* FUNCTIONS ******************************************************************/
|
/* FUNCTIONS ******************************************************************/
|
||||||
|
|
||||||
|
static
|
||||||
|
NTSTATUS
|
||||||
|
PortAddDriverInitData(
|
||||||
|
PDRIVER_OBJECT_EXTENSION DriverExtension,
|
||||||
|
PHW_INITIALIZATION_DATA HwInitializationData)
|
||||||
|
{
|
||||||
|
PDRIVER_INIT_DATA InitData;
|
||||||
|
|
||||||
|
DPRINT1("PortAddDriverInitData()\n");
|
||||||
|
|
||||||
|
InitData = ExAllocatePoolWithTag(NonPagedPool,
|
||||||
|
sizeof(DRIVER_INIT_DATA),
|
||||||
|
TAG_INIT_DATA);
|
||||||
|
if (InitData == NULL)
|
||||||
|
return STATUS_NO_MEMORY;
|
||||||
|
|
||||||
|
RtlCopyMemory(&InitData->HwInitData,
|
||||||
|
HwInitializationData,
|
||||||
|
sizeof(HW_INITIALIZATION_DATA));
|
||||||
|
|
||||||
|
InsertHeadList(&DriverExtension->InitDataListHead,
|
||||||
|
&InitData->Entry);
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
PortDeleteDriverInitData(
|
||||||
|
PDRIVER_OBJECT_EXTENSION DriverExtension)
|
||||||
|
{
|
||||||
|
PDRIVER_INIT_DATA InitData;
|
||||||
|
PLIST_ENTRY ListEntry;
|
||||||
|
|
||||||
|
DPRINT1("PortDeleteDriverInitData()\n");
|
||||||
|
|
||||||
|
ListEntry = DriverExtension->InitDataListHead.Flink;
|
||||||
|
while (ListEntry != &DriverExtension->InitDataListHead)
|
||||||
|
{
|
||||||
|
InitData = CONTAINING_RECORD(ListEntry,
|
||||||
|
DRIVER_INIT_DATA,
|
||||||
|
Entry);
|
||||||
|
|
||||||
|
RemoveEntryList(&InitData->Entry);
|
||||||
|
|
||||||
|
ExFreePoolWithTag(InitData,
|
||||||
|
TAG_INIT_DATA);
|
||||||
|
|
||||||
|
ListEntry = DriverExtension->InitDataListHead.Flink;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PHW_INITIALIZATION_DATA
|
||||||
|
PortGetDriverInitData(
|
||||||
|
PDRIVER_OBJECT_EXTENSION DriverExtension,
|
||||||
|
INTERFACE_TYPE InterfaceType)
|
||||||
|
{
|
||||||
|
PDRIVER_INIT_DATA InitData;
|
||||||
|
PLIST_ENTRY ListEntry;
|
||||||
|
|
||||||
|
DPRINT1("PortGetDriverInitData()\n");
|
||||||
|
|
||||||
|
ListEntry = DriverExtension->InitDataListHead.Flink;
|
||||||
|
while (ListEntry != &DriverExtension->InitDataListHead)
|
||||||
|
{
|
||||||
|
InitData = CONTAINING_RECORD(ListEntry,
|
||||||
|
DRIVER_INIT_DATA,
|
||||||
|
Entry);
|
||||||
|
if (InitData->HwInitData.AdapterInterfaceType == InterfaceType)
|
||||||
|
return &InitData->HwInitData;
|
||||||
|
|
||||||
|
ListEntry = ListEntry->Flink;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -96,6 +176,8 @@ PortAddDevice(
|
||||||
(PVOID)DriverEntry);
|
(PVOID)DriverEntry);
|
||||||
ASSERT(DriverObjectExtension->ExtensionType == DriverExtension);
|
ASSERT(DriverObjectExtension->ExtensionType == DriverExtension);
|
||||||
|
|
||||||
|
DeviceExtension->DriverExtension = DriverObjectExtension;
|
||||||
|
|
||||||
KeAcquireInStackQueuedSpinLock(&DriverObjectExtension->AdapterListLock,
|
KeAcquireInStackQueuedSpinLock(&DriverObjectExtension->AdapterListLock,
|
||||||
&LockHandle);
|
&LockHandle);
|
||||||
|
|
||||||
|
@ -120,8 +202,17 @@ NTAPI
|
||||||
PortUnload(
|
PortUnload(
|
||||||
_In_ PDRIVER_OBJECT DriverObject)
|
_In_ PDRIVER_OBJECT DriverObject)
|
||||||
{
|
{
|
||||||
|
PDRIVER_OBJECT_EXTENSION DriverExtension;
|
||||||
|
|
||||||
DPRINT1("PortUnload(%p)\n",
|
DPRINT1("PortUnload(%p)\n",
|
||||||
DriverObject);
|
DriverObject);
|
||||||
|
|
||||||
|
DriverExtension = IoGetDriverObjectExtension(DriverObject,
|
||||||
|
(PVOID)DriverEntry);
|
||||||
|
if (DriverExtension != NULL)
|
||||||
|
{
|
||||||
|
PortDeleteDriverInitData(DriverExtension);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -138,7 +229,7 @@ PortDispatchCreate(
|
||||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||||
Irp->IoStatus.Information = FILE_OPENED;
|
Irp->IoStatus.Information = FILE_OPENED;
|
||||||
|
|
||||||
IoCompleteRequest( Irp, IO_NO_INCREMENT );
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -690,6 +781,7 @@ StorPortInitialize(
|
||||||
InitializeListHead(&DriverObjectExtension->AdapterListHead);
|
InitializeListHead(&DriverObjectExtension->AdapterListHead);
|
||||||
KeInitializeSpinLock(&DriverObjectExtension->AdapterListLock);
|
KeInitializeSpinLock(&DriverObjectExtension->AdapterListLock);
|
||||||
|
|
||||||
|
InitializeListHead(&DriverObjectExtension->InitDataListHead);
|
||||||
|
|
||||||
/* Set handlers */
|
/* Set handlers */
|
||||||
DriverObject->DriverExtension->AddDevice = PortAddDevice;
|
DriverObject->DriverExtension->AddDevice = PortAddDevice;
|
||||||
|
@ -704,6 +796,10 @@ StorPortInitialize(
|
||||||
DriverObject->MajorFunction[IRP_MJ_PNP] = PortDispatchPnp;
|
DriverObject->MajorFunction[IRP_MJ_PNP] = PortDispatchPnp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Add the initialzation data to the driver extension */
|
||||||
|
Status = PortAddDriverInitData(DriverObjectExtension,
|
||||||
|
HwInitializationData);
|
||||||
|
|
||||||
DPRINT1("StorPortInitialize() done (Status 0x%08lx)\n", Status);
|
DPRINT1("StorPortInitialize() done (Status 0x%08lx)\n", Status);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
#define REACTOS_STR_FILE_DESCRIPTION "Storport Driver"
|
#define REACTOS_STR_FILE_DESCRIPTION "Storport Driver"
|
||||||
#define REACTOS_STR_INTERNAL_NAME "storport"
|
#define REACTOS_STR_INTERNAL_NAME "storport"
|
||||||
#define REACTOS_STR_ORIGINAL_FILENAME "storport.sys"
|
#define REACTOS_STR_ORIGINAL_FILENAME "storport.sys"
|
||||||
#include <reactos/version.rc>
|
#include <reactos/version.rc>
|
||||||
|
|
Loading…
Reference in a new issue