I ran into a bug with the SQLInstallDriverEx function. It doesn’t accept paths to driver library files that the caller does not have write permission for. Some drivers ship with only read-only permissions.
The problem is in SQLINstallDriverEx.c at line 232.
if (lpszPathIn && access (lpszPathIn, R_OK | W_OK | X_OK))
fails because the W_OK bit is set.