Subject "unavailable database" under win2k when accessed via terminal services
Author Kenneth Foo

I have a FB server sitting on a win2k server that has Terminal Services installed.
Seems that if I login to the server via terminal services (remote desktop),
I'm unable to connect to the database.

I tried isql, it failed with a message "unavailable database".
I tried the dinosaur, IBConsole too. It too, failed.

The thing works if I go directly to the machine's real desktop.

I'm not sure if this is related, but from my own experience of writing NT services,
I remember reading somewhere in MSDN (Platform SDK : Terminal Services),
about something on global object name space.

Basically, the idea is to prepend "Global\\" to the object names so that they have a global scope,
or else the named object is visible to the current desktop only.

Here's an (uhmm..) excerpt below...


Kernel Object Name Spaces
A terminal server has multiple name spaces for the following named kernel objects: events, semaphores, mutexes, waitable timers, file-mapping objects, and job objects. There is a global name space used primarily by Win32 services such as client/server applications. In addition, each client session has a separate name space for these objects. Note that this differs from the standard Windows environment in which all processes and services share a single name space for these objects.

The separate client session name spaces enable multiple clients to run the same applications without interfering with each other. For processes started under a client session, the system uses the session name space by default. However, these processes can use the global name space by prepending the "Global\" prefix to the object name. For example, the following code creates an event object named CSAPP in the global name space:

CreateEvent( NULL, FALSE, FALSE, "Global\\CSAPP" );
Win32 services on a terminal server use the global name space by default. Processes started under the terminal server console session (session zero) also use the global name space by default. The global name space enables processes on multiple client sessions to communicate with a Win32 service or the console session. For example, a client/server application might use a mutex object for synchronization. The server component running as a Win32 service can create the mutex object in the global name space. Then the client component running as a process running under a client session can use the "Global\" prefix to open the mutex object.

Another use of the global name space is for applications that use named objects to detect that there is already an instance of the application running in the system across all sessions. This named object must be created or opened in the global name space instead of the per-session name space. Note that the more common case of running the application once per session is supported by default since the named object is created in a per session name space.

Client processes can also use the "Local\" prefix to explicitly create an object in their session name space.

The "Local", "Global" and "Session" prefixes are reserved for system use and should not be used as names for kernel objects. These keywords are case sensitive. On Windows 2000 without Terminal Services, these keywords are ignored. On earlier versions of the system, the functions for creating or opening these objects fail if you specify a name containing the backslash character (\).

[Non-text portions of this message have been removed]