2

指定されたファイルが、コンピューターにマップされていない指定されたネットワークドライブにあるかどうかを確認する小さなプログラムがあります。
これを確認するには、ネットワークの場所に一時的にマップし、ファイルが存在するかどうかを確認してから、ドライブのマップを解除します。これで、空のローカル名でWNetAddConnection2を呼び出すことができることがわかりました(MSDN:文字列が空の場合、またはlpLocalNameがNULLの場合、関数はローカルデバイスをリダイレクトせずにネットワークリソースに接続します)。
コードを表示するためだけに:

NETRESOURCE nr;
nr.dwType = RESOURCETYPE_DISK;
nr.lpLocalName = NULL; // explicitly set this to NULL
nr.lpRemoteName = "\\\\computer\\c$";
nr.lpProvider = NULL;

DWORD dwResult = WNetAddConnection2(&nr, cstrPassword, cstrUsername, FALSE);
if (dwResult != 0)
{
    return false;
}

CPath cLocation(cstrFileLocation);
return cLocation.FileExists() != FALSE;

これまでのところ、コードは正常に機能しています。しかし、私が今知りたいのは、WNetAddConnection2の呼び出しに問題があるかどうかです。ローカル名がないため、WNetCancelConnectionを呼び出すことができません。それで、私は今私のコンピュータにある種のゾンビを持っていますか?
コンピューター上のすべてのネットワーク接続を確認するにはどうすればよいですか?コマンドプロンプトの短いコマンド(NET USEなど)が最適です。

4

1 に答える 1

3

わかりました。WNetCancelConnection2(nr.lpRemoteName, 0, TRUE);ドライブを適切にマップ解除するために呼び出すことができます。

于 2010-02-19T14:48:51.667 に答える