FWIW, I've been working w/ unidata myself from an older SQL 2000 machine. All I can really tell you about are the configuration settings that I've had to work with to connect to an existing unidata server.
On my SQL server (which already had the unidata drivers installed, can't help you with that, although I'm now looking for newer OLE DB / .Net drivers), I've got a linked server of the type Microsoft OLE DB Provider for ODBC drivers. When I script that, it looks like the following:
EXEC master.dbo.sp_addlinkedserver @server =N'UNIDATALINK', @provider=N'MSDASQL', @datasrc=N'EXEODBC', @catalog=N'EXCUNIODBC'
master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'UNIDATALINK',@useself=N'False',@locallogin=NULL,@rmtuser=N'<DOMAIN>\<USERNAME>',@rmtpassword='<domain password>'
On my server, in C:\Informix\UniClient\Config folder, I've had to modify the uci.config file when we migrated the unidata server to a new machine. I think there's a UniAdmin tool or something which effectively modifies this file. Inside that file, I have the following entry:
[ODBC DATA SOURCES]
DBMSTYPE = UNIDATA
NETWORK = TCP/IP
SERVICE = udserver
HOST = <unidata server name>
And within the server's ODBC settings, I have a System DSN named EXEODBC (the "EXE" is part of the name of the database used in my scenario, it has no other significance) of type Informix UniData ODBC who's server name is, again, EXEUNIODBC, has a database name specified as "EXCUniODBC" that I guess matches with the actual unidata server. It has a user(name) specified, but I don't think the one here is relevant. In the ODBC Drivers tab, on this old sever, the driver version shows 3.01.01.00, UDTODBC.DLL dated 9/6/2001.
The linked server specified above once used a unidata-specific login of some sort, but I recently changed it to use a windows account. Using the SQL "use existing credentials" option never worked, but entering the login manually did.
I've been able to run queries against this linked server as follows (connecting to the SQL server, which specific local database you're connected to doesn't matter until you want to start moving the data over).
fromOPENQUERY( UNIDATALINK ,'select * from SOMETABLE where NAME = ''fred''')