<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.3243" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial size=2>Bugzilla 1367: If N cards are installed on a
machine, a disabling of the first one will<BR>prevent the work of all
applications with the rest cards.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Explanation:<BR> IBBUS driver creates
only first instance of IBAL with a name. All the rest<BR>are unnamed. After
removing the first card, the named instance is gone and<BR>applications, which
are binding to IBAL by name, can't find it and can't work.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Solution: The fix creates IBBUS Control Device of
"<A href="file://\\DosDevices\\Global\\ibal">\\DosDevices\\Global\\ibal</A>"
name from IBBUS Driver Entry.<BR>All other devices are created
unnamed.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN
class=464114013-05042009></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Index:
bus/kernel/bus_driver.c<BR>===================================================================<BR>---
bus/kernel/bus_driver.c (revision 2076)<BR>+++
bus/kernel/bus_driver.c (working copy)<BR>@@ -60,6 +60,7
@@<BR> <BR> <BR> char node_desc[IB_NODE_DESCRIPTION_SIZE];<BR>+PDEVICE_OBJECT g_ControlDeviceObject=NULL;<BR> <BR> bus_globals_t bus_globals
= {<BR> BUS_DBG_ERROR,<BR>@@ -981,6 +982,11
@@<BR> <BR> RtlInitUnicodeString( &dos_name, L"<A
href="file://\\DosDevices\\Global\\ibal">\\DosDevices\\Global\\ibal</A>"
);<BR> IoDeleteSymbolicLink( &dos_name );<BR>+ if
(g_ControlDeviceObject)<BR>+ {<BR>+ IoDeleteDevice(g_ControlDeviceObject);<BR>+ g_ControlDeviceObject
= NULL; <BR>+ }<BR> cur_conf =
bus_globals.p_pkey_conf;<BR> while(cur_conf)<BR> {<BR>@@
-1055,7 +1061,46 @@<BR> g_bfi_InstanceCount =
0;<BR> memset( __out_bcount(sizeof(g_bus_filters))
(void*)g_bus_filters, 0,<BR> sizeof(g_bus_filters)
);<BR>+ <BR>+ {<BR>+ UNICODE_STRING dev_name,
dos_name;<BR>+ bus_fdo_ext_t *p_ext=NULL;<BR> <BR>+ RtlInitUnicodeString(
&dev_name, AL_DEVICE_NAME );<BR>+ RtlInitUnicodeString(
&dos_name, L"<A
href="file://\\DosDevices\\Global\\ibal">\\DosDevices\\Global\\ibal</A>"
);<BR>+<BR>+ status = IoCreateDevice( p_driver_obj,
sizeof(bus_fdo_ext_t),<BR>+ &dev_name,
FILE_DEVICE_BUS_EXTENDER,<BR>+ FILE_DEVICE_SECURE_OPEN, FALSE,
&g_ControlDeviceObject );<BR>+ if( !NT_SUCCESS(status)
)<BR>+ {<BR>+ g_ControlDeviceObject =
NULL;<BR>+ BUS_PRINT( BUS_DBG_ERROR,
<BR>+ ("Failed to create ControlDeviceObject, status
%x.\n",status) );<BR>+ }<BR>+ else
{<BR>+ IoDeleteSymbolicLink( &dos_name
);<BR>+ status = IoCreateSymbolicLink( &dos_name,
&dev_name );<BR>+ if( !NT_SUCCESS(status)
)<BR>+ {<BR>+ IoDeleteDevice(
g_ControlDeviceObject );<BR>+ g_ControlDeviceObject =
NULL;<BR>+ BUS_PRINT(
BUS_DBG_ERROR,<BR>+ ("Failed to create symlink for
dos name.\n") );<BR>+ }<BR>+ else
{<BR>+ BUS_PRINT(
BUS_DBG_ERROR,<BR>+ ("SUCCEEDED to create symlink
for ControlDeviceObject.\n")
);<BR>+ <BR>+ p_ext =
g_ControlDeviceObject->DeviceExtension;<BR>+ RtlZeroMemory(p_ext,
sizeof *p_ext);<BR>+ cl_init_pnp_po_ext(
g_ControlDeviceObject, NULL, <BR>+ NULL,
bus_globals.dbg_lvl, NULL, NULL
);<BR>+ IoInitializeRemoveLock(
&p_ext->cl_ext.stop_lock, 'dtci', 0, 1000
);<BR>+ }<BR>+ }<BR>+ }<BR>+ <BR> BUS_EXIT(
BUS_DBG_DRV );<BR> return STATUS_SUCCESS;<BR> }<BR>Index:
bus/kernel/bus_pnp.c<BR>===================================================================<BR>---
bus/kernel/bus_pnp.c (revision 2077)<BR>+++
bus/kernel/bus_pnp.c (working copy)<BR>@@ -60,6 +60,7
@@<BR> bus_filter_t g_bus_filters[MAX_BUS_FILTERS];<BR> <BR> extern
ib_al_handle_t gh_al; // NULL if AL needs init.<BR>+extern
PDEVICE_OBJECT g_ControlDeviceObject;<BR> <BR> <BR> static
NTSTATUS<BR>@@ -197,7 +198,7 @@<BR> /* Create the FDO device object
to attach to the stack. */<BR> <BR> /* if 1st Bus Filter
Instance, then create device names for user ioctl */<BR>- if ( ic == 1
)<BR>+ if ( ic == 1 &&
!g_ControlDeviceObject)<BR> {<BR> RtlInitUnicodeString(
&dev_name, AL_DEVICE_NAME );<BR> RtlInitUnicodeString(
&dos_name, L"<A
href="file://\\DosDevices\\Global\\ibal">\\DosDevices\\Global\\ibal</A>"
);<BR></FONT></DIV></BODY></HTML>