mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
687 lines
14 KiB
687 lines
14 KiB
/*++
|
|
|
|
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);
|
|
|
|
|