\r
extern bus_filter_t g_bus_filters[MAX_BUS_FILTERS];\r
extern ULONG g_bfi_InstanceCount;\r
-extern FAST_MUTEX g_ControlMutex; // serializes InstanceCount & g_bus_filters\r
+extern KEVENT g_ControlEvent; // serializes InstanceCount & g_bus_filters\r
\r
extern bus_filter_t *alloc_bfi( IN DRIVER_OBJECT *, OUT int * );\r
extern int free_bfi( IN bus_filter_t *p_bfi );\r
extern bus_filter_t *get_set_bfi_by_ca_guid( IN net64_t ca_guid );\r
extern char *get_obj_state_str(cl_state_t state);\r
\r
+inline VOID lock_control_event() {\r
+ KeWaitForSingleObject(&g_ControlEvent, Executive, KernelMode , FALSE, NULL);\r
+}\r
+\r
+inline VOID unlock_control_event() {\r
+ KeSetEvent(&g_ControlEvent, 0, FALSE);\r
+}\r
+\r
#endif /* !defined _BUS_DRIVER_H_ */\r
static UNICODE_STRING al_ifc_name;\r
static UNICODE_STRING ci_ifc_name;\r
\r
-FAST_MUTEX g_ControlMutex;\r
+KEVENT g_ControlEvent;\r
ULONG g_bfi_InstanceCount;\r
bus_filter_t g_bus_filters[MAX_BUS_FILTERS];\r
\r
return status;\r
}\r
\r
- ExAcquireFastMutexUnsafe(&g_ControlMutex);\r
+ lock_control_event();\r
if ( !gh_al ) {\r
/* Initialize AL */\r
ib_status = al_initialize();\r
al_cleanup();\r
BUS_TRACE_EXIT( BUS_DBG_ERROR, ("al_initialize returned %s.\n",\r
ib_get_err_str(ib_status)) );\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
+ unlock_control_event();\r
return STATUS_UNSUCCESSFUL;\r
}\r
AL_init_here = TRUE;\r
}\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
+ unlock_control_event();\r
\r
/* Initialize the port manager. */\r
ib_status = create_port_mgr( p_ext->bus_filter, &p_ext->p_port_mgr );\r
\r
CL_ASSERT((obj_type == BFI_PORT_MGR_OBJ) || (obj_type == BFI_IOU_MGR_OBJ));\r
\r
- ExAcquireFastMutexUnsafe(&g_ControlMutex);\r
+ lock_control_event();\r
\r
for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++) {\r
\r
}\r
}\r
}\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
+ unlock_control_event();\r
\r
BUS_PRINT( BUS_DBG_PNP,\r
("%s() cl_obj %p type %s_MGR_OBJ --> bfi[%d] %p\n",\r
return matched;\r
}\r
\r
- ExAcquireFastMutexUnsafe(&g_ControlMutex);\r
+ lock_control_event();\r
\r
for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++)\r
{\r
break;\r
}\r
}\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
+ unlock_control_event();\r
\r
#if DBG\r
if ( !matched )\r
*/\r
if ( !matched )\r
{\r
- ExAcquireFastMutexUnsafe(&g_ControlMutex);\r
+ lock_control_event();\r
\r
for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++)\r
{\r
break;\r
}\r
}\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
+ unlock_control_event();\r
}\r
\r
BUS_PRINT( BUS_DBG_PNP,\r
* IoCreateDeviceSecure & IoCreateSymbolicLink must be called at\r
* PASSIVE_LEVEL.\r
*/\r
- ExAcquireFastMutexUnsafe(&g_ControlMutex);\r
+ lock_control_event();\r
\r
// find 1st unused bfi slot.\r
for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++)\r
break;\r
}\r
}\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
+ unlock_control_event();\r
\r
#if DBG\r
RtlStringCbPrintfA ( p_bfi->whoami,\r
{\r
int remaining;\r
\r
- ExAcquireFastMutexUnsafe(&g_ControlMutex);\r
+ lock_control_event();\r
p_bfi->p_bus_ext = NULL;\r
p_bfi->ca_guid = 0ULL;\r
remaining = --g_bfi_InstanceCount; // one less bfi in-use\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
-\r
+ unlock_control_event();\r
+ \r
return remaining;\r
}\r
\r
{\r
int ic;\r
\r
- ExAcquireFastMutexUnsafe(&g_ControlMutex);\r
+ lock_control_event();\r
ic = g_bfi_InstanceCount;\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
-\r
+ unlock_control_event();\r
+ \r
return ic;\r
}\r
\r
*/\r
if ( !bus_globals.h_pnp_port )\r
{\r
- ExAcquireFastMutexUnsafe(&g_ControlMutex);\r
+ lock_control_event();\r
if ( !bus_globals.h_pnp_port ) {\r
bus_globals.h_pnp_port = (ib_pnp_handle_t)1; /* block others */\r
need_pnp_reg = TRUE;\r
}\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
+ unlock_control_event();\r
\r
if ( need_pnp_reg )\r
{\r
if ( !p_bfi->p_bus_ext )\r
continue;\r
GO = FALSE;\r
- ExAcquireFastMutexUnsafe(&g_ControlMutex);\r
+ lock_control_event();\r
if ( p_bfi->ca_guid && p_bfi->p_port_mgr )\r
GO = TRUE;\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
+ unlock_control_event();\r
if ( GO == FALSE )\r
continue;\r
status = _port_mgr_pkey_rem( pkeys, p_bfi->p_port_mgr );\r
if ( !p_bfi->p_bus_ext )\r
continue;\r
GO = FALSE;\r
- ExAcquireFastMutexUnsafe(&g_ControlMutex);\r
+ lock_control_event();\r
if ( p_bfi->ca_guid && p_bfi->p_port_mgr )\r
GO = TRUE;\r
- ExReleaseFastMutexUnsafe(&g_ControlMutex);\r
+ unlock_control_event();\r
if ( GO == FALSE )\r
continue;\r
status = _port_mgr_pkey_add( pkeys, p_bfi, p_bfi->p_port_mgr );\r