687 lines
15 KiB
C
687 lines
15 KiB
C
/*++
|
||
|
||
Copyright (c) 1998 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
DBCLASS.H
|
||
|
||
Abstract:
|
||
|
||
This module contains the PRIVATE definitions for the
|
||
code that implements the DeviceBay Filter Driver
|
||
|
||
Environment:
|
||
|
||
Kernel & user mode
|
||
|
||
Revision History:
|
||
|
||
|
||
|
||
--*/
|
||
|
||
//
|
||
// Instance specific Data for the controller
|
||
//
|
||
|
||
#define DBCLASS_EJECT_TIMEOUT 10000 //timeout in ms
|
||
//use a 10 second timeout
|
||
|
||
#define DBC_CONTEXT_SIG 0x4c434244 //'DBCL'
|
||
#define DBC_WORKITEM_SIG 0x4b574244 //'DBWK'
|
||
|
||
// HW branch registry Keys
|
||
#define IS_DEVICE_BAY_KEY L"IsDeviceBay"
|
||
#define DBC_GUID_KEY L"DBCGuid"
|
||
#define INSTALLED_KEY L"installed"
|
||
#define ACPI_HUB_KEY L"acpiHubParentPort"
|
||
|
||
// SW branch registry keys
|
||
#define RELEASE_ON_SHUTDOWN L"releaseshutdown"
|
||
|
||
|
||
// class global registry keys
|
||
// these are found in HKLM\CCS\Services\Class\dbc
|
||
#define DEBUG_LEVEL_KEY L"debuglevel"
|
||
#define DEBUG_WIN9X_KEY L"debugWin9x"
|
||
#define DEBUG_BREAK_ON L"breakon"
|
||
|
||
|
||
#ifdef DEBUG3
|
||
#define MAX_DEBUG
|
||
#endif /* DEBUG3 */
|
||
|
||
|
||
#ifndef ANY_SIZE_ARRAY
|
||
#define ANY_SIZE_ARRAY 1
|
||
#endif
|
||
|
||
typedef struct _DBC_BAY_INFORMATION {
|
||
|
||
ULONG Sig;
|
||
DBC_BAY_DESCRIPTOR BayDescriptor;
|
||
BAY_STATUS LastBayStatus;
|
||
PDEVICE_OBJECT DeviceFilterObject;
|
||
|
||
PDEVICE_OBJECT UsbHubPdo;
|
||
ULONG UsbHubPort;
|
||
|
||
} DBC_BAY_INFORMATION, *PDBC_BAY_INFORMATION;
|
||
|
||
#define MAX_DBC_1394_PORTS 16
|
||
|
||
//
|
||
// values for Flags in BUS1394_PORT_INFO
|
||
//
|
||
|
||
#define DBCLASS_PORTFLAG_DEVICE_CONNECTED 0x0000001
|
||
|
||
typedef struct _BUS1394_PORT_INFO {
|
||
|
||
USHORT NodeId; // 1394 nodeID for device on this port
|
||
USHORT BayNumber; // Bay number tied to this port
|
||
ULONG Flags;
|
||
|
||
} BUS1394_PORT_INFO , *PBUS1394_PORT_INFO;
|
||
|
||
|
||
typedef struct _DBC_CONTEXT {
|
||
|
||
ULONG Sig;
|
||
ULONG Flags;
|
||
ULONG ControllerSig;
|
||
|
||
// Top of the DB controller stack
|
||
// this is who we call when talking to
|
||
// the db controller.
|
||
// This will be the controller FDO or
|
||
// an OEM filter FDO
|
||
PDEVICE_OBJECT TopOfStack;
|
||
|
||
// the controllers FDO
|
||
PDEVICE_OBJECT ControllerFdo;
|
||
|
||
// Physical Device Object passed
|
||
// to controllers AddDevice
|
||
PDEVICE_OBJECT ControllerPdo;
|
||
|
||
// Top of PDO stack ie top of stack
|
||
// returned when controller attaches
|
||
// to the PDO passed to AddDevice
|
||
PDEVICE_OBJECT TopOfPdoStack;
|
||
|
||
struct _DBC_CONTEXT *Next;
|
||
PIRP ChangeIrp;
|
||
ULONG PendingIoCount;
|
||
DEVICE_POWER_STATE CurrentDevicePowerState;
|
||
|
||
// device object that sits on the PDO for the bus
|
||
// extender
|
||
PDEVICE_OBJECT BusFilterMdo1394;
|
||
PDEVICE_OBJECT BusFilterMdoUSB;
|
||
|
||
PDRIVER_OBJECT BusFilterDriverObject;
|
||
|
||
PDEVICE_OBJECT LinkDeviceObject;
|
||
|
||
KSEMAPHORE DrbSemaphore;
|
||
KEVENT RemoveEvent;
|
||
KEVENT PowerEvent;
|
||
NTSTATUS LastSetDXntStatus;
|
||
|
||
DBC_SUBSYSTEM_DESCRIPTOR SubsystemDescriptor;
|
||
DBC_BAY_INFORMATION BayInformation[MAX_BAY_NUMBER+1];
|
||
|
||
ULONG NumberOf1394Ports;
|
||
PBUS1394_PORT_INFO Bus1394PortInfo;
|
||
|
||
PIRP PowerIrp;
|
||
|
||
struct _DRB_CHANGE_REQUEST ChangeDrb;
|
||
|
||
// guid for the 1394c bus this controller is on
|
||
UCHAR Guid1394Bus[8];
|
||
|
||
KSPIN_LOCK FlagsSpin;
|
||
|
||
BOOLEAN Stopped;
|
||
|
||
BOOLEAN EjectRequested;
|
||
|
||
} DBC_CONTEXT, *PDBC_CONTEXT;
|
||
|
||
typedef struct _EJECT_CONTEXT {
|
||
PDBC_CONTEXT DbcContext;
|
||
USHORT Bay;
|
||
} EJECT_CONTEXT, *PEJECT_CONTEXT;
|
||
|
||
typedef struct _DBCLASS_WORKITEM {
|
||
|
||
ULONG Sig;
|
||
WORK_QUEUE_ITEM WorkQueueItem;
|
||
PDBC_CONTEXT DbcContext;
|
||
NTSTATUS IrpStatus;
|
||
struct _DBC_EJECT_TIMEOUT_CONTEXT *TimeoutContext;
|
||
|
||
} DBCLASS_WORKITEM, *PDBCLASS_WORKITEM;
|
||
|
||
typedef struct _DBCLASS_PDO_LIST {
|
||
LIST_ENTRY ListEntry;
|
||
PDEVICE_OBJECT PdoDeviceObject;
|
||
PDEVICE_OBJECT FilterDeviceObject;
|
||
} DBCLASS_PDO_LIST, *PDBCLASS_PDO_LIST;
|
||
|
||
|
||
|
||
// DBC_CONTEXT Flags values
|
||
|
||
#define DBCLASS_FLAG_STOPPING 0x00000001
|
||
#define DBCLASS_FLAG_REQ_PENDING 0x00000002
|
||
#define DBCLASS_FLAG_RELEASE_ON_SHUTDOWN 0x00000004
|
||
|
||
|
||
#define INITIALIZE_DRB_SERIALIZATION(dc) KeInitializeSemaphore(&(dc)->DrbSemaphore, 1, 1);
|
||
|
||
#define DBCLASS_BEGIN_SERIALIZED_DRB(dc) { DBCLASS_KdPrint((3, "'***WAIT DRB SEM%x\n", &(dc)->DrbSemaphore)); \
|
||
KeWaitForSingleObject(&(dc)->DrbSemaphore, \
|
||
Executive,\
|
||
KernelMode, \
|
||
FALSE, \
|
||
NULL); \
|
||
}
|
||
|
||
#define DBCLASS_END_SERIALIZED_DRB(dc) { DBCLASS_KdPrint((3, "'***RELEASE DRB SEM %x\n", &(dc)->DrbSemaphore));\
|
||
KeReleaseSemaphore(&(dc)->DrbSemaphore,\
|
||
LOW_REALTIME_PRIORITY,\
|
||
1,\
|
||
FALSE);\
|
||
}
|
||
|
||
#define NUMBER_OF_BAYS(dbc) ((dbc)->SubsystemDescriptor.bmAttributes.BayCount)
|
||
|
||
#define DBC_TAG ' cbD'
|
||
|
||
/*
|
||
Debug Macros
|
||
*/
|
||
#if DBG
|
||
|
||
#ifndef DEBUG_LOG
|
||
#define DEBUG_LOG
|
||
#endif
|
||
|
||
VOID
|
||
DBCLASS_Assert(
|
||
IN PVOID FailedAssertion,
|
||
IN PVOID FileName,
|
||
IN ULONG LineNumber,
|
||
IN PCHAR Message
|
||
);
|
||
|
||
#define DBCLASS_ASSERT(exp) \
|
||
if (!(exp)) { \
|
||
DBCLASS_Assert( #exp, __FILE__, __LINE__, NULL );\
|
||
}
|
||
|
||
|
||
#define LOGENTRY(mask, sig, info1, info2, info3)
|
||
// DBCLASS_Debug_LogEntry(mask, sig, (ULONG)info1, (ULONG)info2, (ULONG)info3)
|
||
|
||
|
||
ULONG
|
||
_cdecl
|
||
DBCLASS_KdPrintX(
|
||
ULONG l,
|
||
PCH Format,
|
||
...
|
||
);
|
||
|
||
VOID
|
||
DBCLASS_LogInit(
|
||
);
|
||
|
||
VOID
|
||
DBCLASS_Debug_LogEntry(
|
||
IN ULONG Mask,
|
||
IN ULONG Sig,
|
||
IN ULONG Info1,
|
||
IN ULONG Info2,
|
||
IN ULONG Info3
|
||
);
|
||
|
||
#define LOG_MISC 0x00000001 //debug log entries
|
||
|
||
#define DBCLASS_KdPrint(_x_) DBCLASS_KdPrintX _x_
|
||
#define TEST_TRAP() { DbgPrint( "DBCLASS: Code coverage trap %s line: %d\n", __FILE__, __LINE__);\
|
||
TRAP();}
|
||
|
||
extern ULONG DBCLASS_BreakOn;
|
||
#define BRK_ON_TRAP() \
|
||
{\
|
||
if (DBCLASS_BreakOn) {\
|
||
DbgPrint( "DBCLASS: DEBUG TEST BREAK %s line: %d\n", __FILE__, __LINE__ );\
|
||
DbgBreakPoint();\
|
||
}\
|
||
}
|
||
|
||
#define TRAP() DbgBreakPoint()
|
||
|
||
#define DEBUG_HEAP
|
||
|
||
extern ULONG DBCLASS_TotalHeapSace;
|
||
#define DBCLASS_HEAP_SIG 0x12344321
|
||
#define DBCLASS_FREE_TAG 0x11111111
|
||
|
||
#define DbcExAllocatePool(p, l) DBCLASS_GetHeap((p), (l), DBCLASS_HEAP_SIG, \
|
||
&DBCLASS_TotalHeapSace)
|
||
#define DbcExFreePool(l) DBCLASS_RetHeap((l), DBCLASS_HEAP_SIG, \
|
||
&DBCLASS_TotalHeapSace)
|
||
|
||
VOID
|
||
DBCLASS_Warning(
|
||
PVOID Context,
|
||
PUCHAR Message,
|
||
BOOLEAN DebugBreak
|
||
);
|
||
|
||
#else
|
||
// NOT DEBUG
|
||
|
||
#define LOGENTRY(mask, sig, info1, info2, info3)
|
||
#define DBCLASS_ASSERT(exp)
|
||
#define DBCLASS_KdPrint(_x_)
|
||
#define DBCLASS_KdPrintGuid(_x_, _y_)
|
||
|
||
#define TRAP()
|
||
#define TEST_TRAP()
|
||
#define BRK_ON_TRAP()
|
||
|
||
#define DbcExAllocatePool(p, l) ExAllocatePoolWithTag((p), (l), DBC_TAG)
|
||
#define DbcExFreePool(l) ExFreePool((l))
|
||
|
||
#define DBCLASS_Warning(x, y, z)
|
||
|
||
#endif
|
||
|
||
|
||
VOID
|
||
DBCLASS_Unload(
|
||
IN PDRIVER_OBJECT DriverObject
|
||
);
|
||
|
||
PDBC_CONTEXT
|
||
DBCLASS_GetDbcContext(
|
||
IN PDEVICE_OBJECT ControllerFdo
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_StopController(
|
||
IN PDBC_CONTEXT DbcContext,
|
||
IN PIRP Irp,
|
||
IN PBOOLEAN HandledByClass
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_StartController(
|
||
IN PDBC_CONTEXT DbcContext,
|
||
IN PIRP Irp,
|
||
IN PBOOLEAN HandledByClass
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_UsbhubBusFilterDispatch(
|
||
PDEVICE_OBJECT DeviceObject,
|
||
PIRP Irp,
|
||
PBOOLEAN Handled
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_SyncSubmitDrb(
|
||
IN PDBC_CONTEXT DbcContext,
|
||
IN PDEVICE_OBJECT DeviceObject,
|
||
IN PDRB Drb
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_CleanupController(
|
||
IN PDBC_CONTEXT DbcContext
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_SyncGetSubsystemDescriptor(
|
||
IN PDBC_CONTEXT DbcContext
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_CreateDeviceFilterObject(
|
||
IN PDRIVER_OBJECT DriverObject,
|
||
IN OUT PDEVICE_OBJECT *DeviceObject,
|
||
IN PDEVICE_OBJECT DevicePdo,
|
||
IN PDBC_CONTEXT DbcContext,
|
||
IN ULONG BusTypeSig
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_SyncGetBayDescriptor(
|
||
IN PDBC_CONTEXT DbcContext,
|
||
IN USHORT BayNumber,
|
||
IN PDBC_BAY_DESCRIPTOR BayDescriptor
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_SyncGetAllBayDescriptors(
|
||
IN PDBC_CONTEXT DbcContext
|
||
);
|
||
|
||
VOID
|
||
DBCLASS_ChangeIndicationWorker(
|
||
IN PVOID Context
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_SyncGetBayStatus(
|
||
IN PDBC_CONTEXT DbcContext,
|
||
IN USHORT BayNumber,
|
||
IN PBAY_STATUS BayStatus
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_SyncBayFeatureRequest(
|
||
IN PDBC_CONTEXT DbcContext,
|
||
IN USHORT Op,
|
||
IN USHORT BayNumber,
|
||
IN USHORT FeatureSelector
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_ChangeIndication(
|
||
IN PDEVICE_OBJECT PNull,
|
||
IN PIRP Irp,
|
||
IN PVOID Context
|
||
);
|
||
|
||
VOID
|
||
DBCLASS_PostChangeRequest(
|
||
IN PDBC_CONTEXT DbcContext
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_ProcessCurrentBayState(
|
||
IN PDBC_CONTEXT DbcContext,
|
||
IN BAY_STATUS BayStatus,
|
||
IN USHORT Bay,
|
||
IN PBOOLEAN PostChgangeRequest
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_1394BusFilterDispatch(
|
||
PDEVICE_OBJECT DeviceObject,
|
||
PIRP Irp,
|
||
PBOOLEAN Handled
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_PdoFilterDispatch(
|
||
PDEVICE_OBJECT DeviceObject,
|
||
PIRP Irp,
|
||
PBOOLEAN Handled
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_EjectPdo(
|
||
IN PDEVICE_OBJECT DeviceFilterObject
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_EnableDevice(
|
||
IN PDEVICE_OBJECT DeviceFilterObject
|
||
);
|
||
|
||
USHORT
|
||
DBCLASS_GetBayNumber(
|
||
IN PDEVICE_OBJECT DeviceFilterObject
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_DeferIrpCompletion(
|
||
IN PDEVICE_OBJECT DeviceObject,
|
||
IN PIRP Irp,
|
||
IN PVOID Context
|
||
);
|
||
|
||
USHORT
|
||
DBCLASS_GetBayFor1394Pdo(
|
||
PDEVICE_OBJECT BusFilterMdo,
|
||
PDBC_CONTEXT DbcContext,
|
||
PDEVICE_OBJECT Pdo1394
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_DevicePdoQCapsComplete(
|
||
IN PDEVICE_OBJECT DeviceObject,
|
||
IN PIRP Irp,
|
||
IN PVOID Context
|
||
);
|
||
|
||
PDEVICE_OBJECT
|
||
DBCLASS_FindDevicePdo(
|
||
PDEVICE_OBJECT PdoDeviceObject
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_BusFilterDispatch(
|
||
PDEVICE_OBJECT DeviceObject,
|
||
PIRP Irp,
|
||
PBOOLEAN Handled
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_GetRegistryKeyValueForPdo(
|
||
IN PDEVICE_OBJECT PhysicalDeviceObject,
|
||
IN BOOLEAN SoftwareBranch,
|
||
IN PWCHAR KeyNameString,
|
||
IN ULONG KeyNameStringLength,
|
||
IN PVOID Data,
|
||
IN ULONG DataLength
|
||
);
|
||
|
||
PDBC_CONTEXT
|
||
DBCLASS_FindController1394DevicePdo(
|
||
PDRIVER_OBJECT FilterDriverObject,
|
||
PDEVICE_OBJECT FilterMdo,
|
||
PDEVICE_OBJECT DevicePdo1394,
|
||
PUCHAR BusGuid
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_Check1394DevicePDO(
|
||
PDEVICE_OBJECT FilterDeviceObject,
|
||
PDBC_CONTEXT DbcContext,
|
||
PDEVICE_OBJECT DevicePDO
|
||
);
|
||
|
||
BOOLEAN
|
||
DBCLASS_IsHubPartOfACPI_DBC(
|
||
PDEVICE_OBJECT DeviceObject
|
||
);
|
||
|
||
USHORT
|
||
DBCLASS_GetBayForUSBPdo(
|
||
PDBC_CONTEXT DbcContext,
|
||
PDEVICE_OBJECT PdoUSB
|
||
);
|
||
|
||
|
||
#if DBG
|
||
VOID
|
||
DBCLASS_AssertBaysEmpty(
|
||
PDBC_CONTEXT DbcContext
|
||
);
|
||
#else
|
||
#define DBCLASS_AssertBaysEmpty(d)
|
||
#endif
|
||
|
||
PVOID
|
||
DBCLASS_GetHeap(
|
||
IN POOL_TYPE PoolType,
|
||
IN ULONG NumberOfBytes,
|
||
IN ULONG Signature,
|
||
IN PLONG TotalAllocatedHeapSpace
|
||
);
|
||
|
||
VOID
|
||
DBCLASS_RetHeap(
|
||
IN PVOID P,
|
||
IN ULONG Signature,
|
||
IN PLONG TotalAllocatedHeapSpace
|
||
);
|
||
|
||
#if DBG
|
||
VOID
|
||
DBCLASS_KdPrintGuid(
|
||
ULONG Level,
|
||
PUCHAR P
|
||
);
|
||
#endif
|
||
|
||
NTSTATUS
|
||
DBCLASS_1394GetBusGuid(
|
||
PDEVICE_OBJECT DeviceObject,
|
||
PUCHAR BusGuid
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_Find1394DbcLinks(
|
||
PDEVICE_OBJECT DevicePdo1394
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_EjectBay(
|
||
IN PDBC_CONTEXT DbcContext,
|
||
IN USHORT Bay
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_SetEjectTimeout(
|
||
PDEVICE_OBJECT DeviceFilterMDO
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_CancelEjectTimeout(
|
||
PDEVICE_OBJECT DeviceFilterMDO
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_SetRegistryKeyValueForPdo(
|
||
IN PDEVICE_OBJECT PhysicalDeviceObject,
|
||
IN BOOLEAN SoftwareBranch,
|
||
IN ULONG Type,
|
||
IN PWCHAR KeyNameString,
|
||
IN ULONG KeyNameStringLength,
|
||
IN PVOID Data,
|
||
IN ULONG DataLength
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_SetupUSB_DBC(
|
||
PDBC_CONTEXT DbcContext
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_GetHubDBCGuid(
|
||
PDEVICE_OBJECT DeviceObject,
|
||
PUCHAR DbcGuid
|
||
);
|
||
|
||
PDBC_CONTEXT
|
||
DBCLASS_FindControllerUSB(
|
||
PDRIVER_OBJECT FilterDriverObject,
|
||
PDEVICE_OBJECT FilterMdo,
|
||
PDEVICE_OBJECT UsbHubPdo
|
||
);
|
||
|
||
BOOLEAN
|
||
DBCLASS_IsHubPartOfUSB_DBC(
|
||
PDEVICE_OBJECT DeviceObject
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_CheckPhyLink(
|
||
PDEVICE_OBJECT DevicePdo1394
|
||
);
|
||
|
||
BOOLEAN
|
||
DBCLASS_IsLinkDeviceObject(
|
||
PDBC_CONTEXT DbcContext,
|
||
PDEVICE_OBJECT Pdo1394
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_AddDevicePDOToList(
|
||
IN PDEVICE_OBJECT FilterDeviceObject,
|
||
IN PDEVICE_OBJECT PdoDeviceObject
|
||
);
|
||
|
||
VOID
|
||
DBCLASS_RemoveDevicePDOFromList(
|
||
IN PDEVICE_OBJECT PdoDeviceObject
|
||
);
|
||
|
||
VOID
|
||
DBCLASS_Refresh1394(
|
||
VOID
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_AddBusFilterMDOToList(
|
||
PDEVICE_OBJECT BusFilterMdo
|
||
);
|
||
|
||
VOID
|
||
DBCLASS_RemoveBusFilterMDOFromList(
|
||
PDEVICE_OBJECT BusFilterMdo
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_ClassPower(
|
||
IN PDEVICE_OBJECT ControllerFdo,
|
||
IN PIRP Irp,
|
||
IN PBOOLEAN HandledByClass
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_CheckForAcpiDeviceBayHubs(
|
||
PDEVICE_OBJECT HubPdo,
|
||
ULONG AcpiDBCHubParentPort
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_GetClassGlobalDebugRegistryParameters(
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_GetConfigValue(
|
||
IN PWSTR ValueName,
|
||
IN ULONG ValueType,
|
||
IN PVOID ValueData,
|
||
IN ULONG ValueLength,
|
||
IN PVOID Context,
|
||
IN PVOID EntryContext
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_GetClassGlobalRegistryParameters(
|
||
);
|
||
|
||
NTSTATUS
|
||
DBCLASS_EjectBayComplete(
|
||
IN PDEVICE_OBJECT DeviceObject,
|
||
IN PIRP Irp,
|
||
IN PVOID Context
|
||
);
|
||
|
||
VOID
|
||
DBCLASS_RemoveControllerFromMdo(PDBC_CONTEXT DbcContext);
|
||
|
||
|