ホーム » Windows » ::NetShareEnum

::NetShareEnum

先日やった ::NetServerGetInfo で,サーバが動作しているかの判断はできるようになった.
それでテストしていると,環境にもよるかもしれないが共有名に誤りがある場合,1 分以上かかることがある.
そのため,サーバが動作している時に,共有名を取得する方法で調べ始めた.
次の様なコードで,サーバの共有名が列挙できる.

bool	test	(c_tstring& svr)
{
	std::wstring	server = ::To_wstring(svr) ;
	LPBYTE      	buff = NULL ;
	DWORD      	entriesRead  = 0 ;
	DWORD     	totalEntries = 0 ;
	DWORD     	resumeHandle = 0 ;
	NET_API_STATUS	status = ::NetShareEnum(LMSTR(server.c_str()),1,&buff,MAX_PREFERRED_LENGTH,
				        &entriesRead,&totalEntries,&resumeHandle) ;
	if (status == NERR_Success || status == ERROR_MORE_DATA) {
		SHARE_INFO_1*	info = (SHARE_INFO_1*)buff ;
		for (DWORD index=0 ; index<entriesRead ; index++) {
			tstring		stype ;
			{
				DWORD	type = info[index].shi1_type ;
				DWORD	typm = info[index].shi1_type & STYPE_MASK ;
				switch	(typm)	{
				    case  STYPE_DISKTREE :  stype = _T("STYPE_DISKTREE ") ;  break ;
				    case  STYPE_PRINTQ   :  stype = _T("STYPE_PRINTQ   ") ;  break ;
				    case  STYPE_DEVICE   :  stype = _T("STYPE_DEVICE   ") ;  break ;
				    case  STYPE_IPC      :  stype = _T("STYPE_IPC      ") ;  break ;
				    default :               stype = _T("?????          ") ;  break ;
				    }
				stype += ::To_tstring(u_32(typm),16) ;
				stype += _T("  ") ;
				stype += ::u32to_t(u_32(type),16,8) ;
				}
			std::tout  << stype << _T("\t") ;
			std::tout  << ::ttot_(::To_tstring(LPWSTR(info[index].shi1_netname)),20)
			           << ::ttot_(::To_tstring(LPWSTR(info[index].shi1_remark)) ,20)
			           << std::endl ;
			}
		::NetApiBufferFree(buff) ;
		}
	else {
		std::tout << _T("NetShareEnum error: ") << status << std::endl ;
		}
	return	true ;
	}

今はあまり使われていないと思うが「オフラインファイル」の場合にどうなるかが気になっていた.
まだ途中だが,[Offline Share] として認識はできているみたい.
NetShareEnum オフラインファイル



【Windows】ファイルサーバのファイルが一部しか表示されない
Offline Filesとは?キャッシュ管理とログオン時の動作を支えるWindowsサービスを解説
Windows 10 同期センターの有効化と無効化

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.