<!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>