У нас есть библиотека .NET, на которой платформа вызывает собственный код, в частности мы вызываем LoadLibrary(). Этот код был на месте некоторое время, но новый пользователь заметил, что он работает как пользователь служб терминалов на машине Windows Server 2008 R2, которую он не запускает (видимо, при вызове LoadLibrary). Это происходит при запуске в качестве стандартного пользователя, но не при запуске в качестве администратора, который является подозрительным. Также он работает при запуске на компьютере под управлением Windows Server 2003.LoadLibrary терпит неудачу при вызове из процесса в качестве стандартного пользователя в Windows Server 2008 с службами терминалов
Теперь мы протестировали запуск на компьютере под управлением Windows Server 2008 R2 и не имели никаких проблем до этого.
Я подозреваю, что UAC играет здесь. Мы использовали их в Process Monitor, и я заметил результат INVALID PARAMETER, когда DeviceIOControl() вызывается с управляющим кодом IOCTL_MOUNTDEV_QUERY_DEVICE_NAME. Это также заставляет меня подозрительно относиться к подключенному диску, хотя запуск одного и того же кода на сопоставленном диске на моей машине работает очень хорошо.
У кого-нибудь есть предложения о том, что нужно делать, чтобы не стоять на подобной машине, но шансы на то, что мы сможем воспроизвести это в доме, выглядят стройными.
Действительно ли они означают «при запуске в качестве стандартного пользователя» или они имеют в виду «когда они запускаются как административный пользователь, но без повышения»? Если они действительно означают стандартного пользователя, UAC не участвует. (Вы пробовали Server 2003 в качестве стандартного пользователя?) Если вы можете добавить диагностику в свое приложение, было бы полезно дважды проверить путь, передаваемый в LoadLibrary(), а также код ошибки, который он возвращает. –