Нет, то, что вы делаете, в порядке. WFAPI - один из лучших способов получить такую информацию.
Знание того, является ли сеанс сеансом Citrix, является лишь продолжением того, что вы делаете. Если вы посмотрите на ссылку WFAPI для WFQuerySessionInformation:
http://community.citrix.com/download/attachments/37388956/WFAPI_SDK_Documentation.pdf
ОБНОВЛЕННАЯ ССЫЛКА: WinFrame API SDK
Посмотрите на таблицу значений WFInfoClass. Вы увидите, что ряд параметров имеет тег «3», указывающий, что они доступны только при вызове внутри сеанса ICA. Таким образом, вы можете вызвать WFQuerySessionInformation с одним из них, и если он возвращает false, вы не работаете в сеансе Citrix. Запрос IP-адреса, который вы делаете в данный момент, является одним из этих свойств, поэтому, когда ваша переменная "ok" имеет значение false, вы не участвуете в сеансе Citrix.
Что-то еще представляет интерес, Microsoft предоставляет API-интерфейсы WTS, которые очень похожи на WFAPI и делают в основном то же самое. Однако преимущество WFAPI заключается в том, что он будет работать с XenDesktop и XenApp, тогда как API-интерфейсы WTS будут работать только с XenApp.
С уважением,
Донован