Visual Studio 2015 の C++ で、UNC の名前解決する方法

Visual Studio 2015 の プロジェクトで、ネットワークドライブの共有ディレクトリーにあるファイルを共有しようと言うことで、ドライブ名をアドレスの判る状態にする必要がありました

端折ってますけど、忘れないように書いてこう!

こんな感じで、Windows10 のネットワークドライブ名を  へ変換することが出来ました
WNetGetUniversalName で、MSDN あたりを検索したり、Google 先生に聞いてみたりしてください

#pragma comment(lib, "mpr.lib")

#include <Winnetwk.h>

    DWORD dwRetVal;
    WCHAR buffer[1024];
    DWORD bufSize = 1024;
    …
    UNIVERSAL_NAME_INFO* unameinfo = (UNIVERSAL_NAME_INFO *)&buffer;
    dwRetVal = WNetGetUniversalName(_T("Z:\00-README.html"),UNIVERSAL_NAME_INFO_LEVEL, (LPVOID)unameinfo, &bufSize);
    …
    String^ unc = gcnew String(unameinfo->lpUniversalName);
    …
    MessageBox::Show(unc, "test", MessageBoxButtons::OK, MessageBoxIcon::Information);
    …

プロジェクトは、WIN32 プロジェクトです

Z: は、File-Server と言う Samba の共有フォルダーをネットワークドライブに割り当てました

Z:¥00-README.html と言うファイル名を \\file-server\00-README.html へ変換することが出来ます
デバッガで調べたら、こんな感じ 0x0116e12c L"\\\\file-server\\Public\\00-README.html"
(この逆は出来ないのかな…?)
UNC のファイルを渡したり、普通のファイル名を WNetGetUniversalName へ渡すとエラーします
(dwRetVal に 1200 とか、2250 とかが返ってきますが、眺めた程度では判らないので後回し ^^;)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です