リモートシェアに接続する方法

プログラムから下図のようなネットワークシェア接続用のプロンプト を表示する方法です。

必要に応じてユーザーに接続を問い合わせることが出来ますので、本来接続できるはずのシェアにアクセスを試みたのに失敗して終わり、という事態をある程度 避けられます。

さて、これには WNetAddConnection2 関数を使います。この関数を用いると UNC シェアとの接続を確立することが出来ます。この際、第四引数に CONNECT_INTERACTIVE を指定すると、必要に応じてネットワーク接続のダイアログが表示されます。尚、AddConnection という名前ですが、既に接続が存在する場合には既存の接続をそのまま使うので問題ありません。

#include <windows.h>
#include <stdio.h>

//
// Return value:
//     Success - NO_ERROR
//     Faulure - System Error Code
//

DWORD EstablishConnection (LPTSTR pszRemote, LPTSTR pszUser, LPTSTR pszPassword) {

    DWORD dwRet;
    NETRESOURCE nr;

    ZeroMemory ( &nr, sizeof (nr) );
    nr.dwType = RESOURCETYPE_ANY;
    nr.lpLocalName = NULL;
    nr.lpRemoteName = pszRemote;
    nr.lpProvider = NULL;
 
    dwRet = WNetAddConnection2
        &nr, 
        pszPassword,
        pszUser,
        CONNECT_INTERACTIVE );
    
    return dwRet;
}

int main(int argc, char* argv[]) {

    DWORD dwRet = EstablishConnection (
        TEXT("\\\\server\\share"),
        TEXT("Yourname"),
        TEXT("password"));

    if ( NO_ERROR == dwRet ) {
        printf ("EstablishConnection completed successfully.\n");
    }
    else {
        printf ("ERROR. Status %u\n", GetLastError());
    }

    return 0;
}

 サンプルコードのダウンロード [connection.zip, makefile プロジェクト] 

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説