ローカル システム アカウント (「NT AUTHORITY\SYSTEM」) からネットワーク共有にアクセスする方法:
- 非ドメイン ネットでもネットワークにアクセスできるローカル アカウントを使用してログオンする必要があります。これを取得するには、「NT AUTHORITY\NETWORK SERVICE」アカウントを使用するだけで十分です
- アクセス資格情報を指定して、ネットワーク共有接続を追加します。
ここでの主なポイントは、 LogonUser() 呼び出し中にLOGON32_LOGON_NEW_CREDENTIALSログオン タイプを使用することです (詳細/制限については MSDN を参照してください)。そうしないと、LogonUser と偽装が成功した場合でも、WNetAddConnection2() の実行時に ERROR_NO_SUCH_LOGON_SESSION が返されます。
LogonUser("NETWORK SERVICE", "NT AUTHORITY", NULL, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &hToken );
ImpersonateLoggedOnUser(hToken);
NETRESOURCE nr;
nr.dwScope = RESOURCE_GLOBALNET;
nr.dwType = RESOURCETYPE_DISK;
nr.dwUsage = RESOURCEUSAGE_CONNECTABLE;
nr.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE;
nr.lpRemoteName = "\\\\SomeCopmuter\\C$";
nr.lpLocalName = "Z:";
WNetAddConnection2(&nr, "password", "Administrator", 0);
ノート
- 偽装は現在のスレッドに対してのみ動作します。
- ローカル リソースでは LocalSystem として機能し、追加された共有では、WNetAddConenction2 で指定されたリモート コンピューター (この場合は SomeComputer の管理者) のユーザーとして機能します。
- NETRESOURCE でドライブ文字の使用を省略し、「\server\share\filename.ext」表記でファイルにアクセスできます
- これは一部の古いシステムでは機能しない可能性があります (NT/2000、正確なリストは不明)