ローカルの名前から UNC 名を取得する方法
例えば、ローカルドライブ文字の Z: に \\servername\public という UNC シェア名をマッピングしている状況を考えます。このときに、プログラムに Z: を与え、\\servername\public を取得する方法についてご紹介します。コマンドで言えば、net use で接続一覧を表示したときに、Local から Remote を取得する操作になります。
>net use
New connections will be remembered.
Status Local
Remote
Network
-------------------------------------------------------------------------------
OK Z:
\\servername\share Microsoft
Windows Network
The command completed successfully.
実はこの目的にピッタリの関数があります。WNetGetConnection です。下記にその使い方を示します (といっても、単にバッファを渡すだけなんですけど)。
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
void Usage () {
printf (
"Usage: getremotename drive\n"
"ex. getremotename Q:\n");
}
int main (int argc, char* argv[]) {
if ( argc != 2 ) {
Usage ();
return 0;
}
TCHAR szRemoteName [256];
DWORD dwSize = sizeof ( szRemoteName );
DWORD dwRet = WNetGetConnection
(
argv[1],
szRemoteName,
&dwSize );
if ( NO_ERROR == dwRet ) {
// 成功した場合は結果を表示
_tprintf ( TEXT("Local Name: %s\nRemote Name: %s\n"),
argv[1], szRemoteName);
}
else {
// ここは単にエラーメッセージを表示しているだけです。
// net helpmsg コマンドを直接利用しています。
_tprintf ( TEXT("ERROR %u\n"), dwRet );
TCHAR szCommand[256];
_stprintf (szCommand, TEXT("net helpmsg %u"), dwRet);
_tsystem ( szCommand );
}
return 0;
}
サンプルコードのダウンロード [getremotename.zip, makefile プロジェクト]