シトリックス炎の掲示板 1日8,000アクセスの国内最大シトリックスコミュニティ

XenAppでクライアントドライブをC言語で検出したい

ブー六 2012/03/22 16:46:44

エクスプローラーやJavaのFileChooserには、サーバードライブのほかにクライアントドライブも表示されるのですが、Win32APIのGetLogicalDriveStrings関数ではクライアントドライブが認識されません。
ネットワークドライブやSUBSTコマンドで作成した仮想ドライブは認識されます。

ご教授頂けますでしょうか。

ブー六 2012/03/23 16:37:17

すみません。自己レスです。

XenApp6.0以前ではユーザーのローカルドライブに対して
ネットワークドライブを割り当てる方式を使用していたようですが、
XenApp 6.0以降では、まったく異なるメカニズム(Microsoftのリモートデスク
トップ接続で使用されているのと同じ概念であるリダイレクトの概念)を
CDMシステムで使用しているそうです。
<参照>
http://support.citrix.com/article/CTX129504

ドライブ割り当てされていなければ、当然、Win32APIのGetLogicalDriveStrings関数
では、認識できないわけで、

net useコマンドでクライアントドライブの接続状況を確認すると

\\client\C$
\\client\D$

とか表示されるそうです。(XenAppクライアント環境を持つ人に確認してもらいました)

ちなみに、リモートディスクトップ接続でローカルドライブを見れるように設定した場合は

\\tsclient\C
\\tsclient\D

とか表示されていました。
これって、NetUseEnum関数では見れないんですね。

アプリのドライブ一覧コンボボックスに「xxxxのC」とか「xxxxのD」とか出すには
どうしたらよいのでしょうか。

とおりすがり 2012/03/23 18:18:37

NetUseEnum() のドキュメントには
This function applies only to the Server Message Block (LAN Manager Workstation) client. The NetUseEnum function does not support Distributed File System (DFS) shares.
とあるから、そもそも対象外なんでしょうね。その続きに
To enumerate shares using a different network provider (WebDAV or a DFS share, for example), use the WNetOpenEnum, WNetEnumResource, and WNetCloseEnum functions.
とあるように、WNetOpenEnum(RESOURCE_CONNECTED,RESOURCETYPE_DISK,...) で \\TSCLIENT は列挙されました。Citrix は手元にないのでわかりません。

ブー六 2012/03/24 11:10:21

(とおりすがり)さん、ありがとうございます。

確かに、WNetOpenEnum→WNetEnumResource→WNetCloseEnumで列挙できました。

残念ながらまだ「xxxxのC」とか「xxxxのD」とかの表示名の取得方法はわかっていませんが、
リモートディスクトップもXenAppも接続クライアントのマシン名を環境変数「CLIENTNAME」
から取得できることだけはわかりました。

ありがとうございます。
  • ニックネーム
  • メール
  • 本文

Powerful & Beautiful

力強く、美しいシステムを。