ここは主にWindowsNTServerで動作確認をしています。Windows95/98では動作しない可能性があります。
また、LANマネージャを使う場合にはlm.hをインクルードし、netapi32.libをライブラリに追加しなければなり ません。

@共有フォルダの追加


///////////////////////////////////////////
//ファイル共有追加
//NetShareAdd (
//    IN  LPTSTR  servername,
//    IN  DWORD   level,
//    IN  LPBYTE  buf,
//    OUT LPDWORD parm_err
//    );

    LPTSTR  servername=NULL;		//NULLはソフトを動かしているコンピュータ
    DWORD   level=2;		//ネットワーク共有構造体のレベル

	//ネットワーク共有情報の構造体
	SHARE_INFO_2  Share; 
	Share.shi2_netname = (LPTSTR)L"naka";		//共有名
    Share.shi2_type = STYPE_DISKTREE;
    Share.shi2_remark = NULL;
    Share.shi2_permissions = 0;
    Share.shi2_max_uses = SHI_USES_UNLIMITED;		//最大接続数(SHI_USES_UNLIMITEDは無制限)
    Share.shi2_current_uses = 0;
    Share.shi2_path = (LPTSTR)L"D:\\vnc";		//共有フォルダのローカルパス
    Share.shi2_passwd = NULL;

	NetShareAdd (servername,level,(LPBYTE) &Share,NULL);	
}


@共有情報を変更する


///////////////////////////////////////////
//ファイル共有情報変更
//NetShareSetInfo(
//LPWSTR servername,
//LPWSTR netname,
//DWORD level,
//LPBYTE buf,
//LPDWORD parm_err   
//    );


    LPTSTR  servername=NULL;		//このコンピュータ
    LPTSTR  netname=(LPTSTR)L"naka"; //対象の共有フォルダ
    DWORD   level=2;		//共有情報の構造体

	//ネットワーク共有情報の構造体
    SHARE_INFO_2  Share; 
    Share.shi2_netname = (LPTSTR)L"naka";		//共有名
    Share.shi2_type = STYPE_DISKTREE;
    Share.shi2_remark = NULL;
    Share.shi2_permissions = 0;
    Share.shi2_max_uses = SHI_USES_UNLIMITED;		//最大接続数(SHI_USES_UNLIMITEDは無制限)
    Share.shi2_current_uses = 0;
    Share.shi2_path = (LPTSTR)L"D:\\vnc";		//共有フォルダのローカルパス
    Share.shi2_passwd = NULL;

	NetShareSetInfo (servername,netname,level,(LPBYTE) &Share,NULL);	

}


@ファイル共有解除


    ///////////////////////////////////////////
    //ファイル共有解除
    //NetShareDel(
    //LPWSTR servername,
    //LPWSTR netname,
    //DWORD reserved      
    //    );


    LPTSTR  servername=NULL;
    LPTSTR  netname=(LPTSTR)L"naka";

    NetShareDel (servername,netname,NULL);	


@このソフトを動かしているユーザーはAdministratorsに所属しているか調べる。


NTでこのソフトを動かしているユーザーはAdministratorsに所属しているかどうかを調べます。Administrators (一般に管理者が所属しているグループ)に所属していない方には使わせないというときに使います。
	int adminflg = 0;	//Administratorsなら1そうでなければ0
	//#include <windows.h>する
	char user[256];
	WCHAR  w_user[256];
	CString struser;
	DWORD dwBuffer = 256;

	//ユーザー名の取得
	GetUserName(user,&dwBuffer);
	struser.Format("%s",user);		//char型からCString型に変換

	//----------------------------------------------
	//ユーザーのローカルグループ名取得

	CString		Group_Name;
	
	LPGROUP_INFO_0	GroupInfo;	//グループ情報の構造体

	DWORD	i;
	LPCWSTR	ServerName	=	NULL;
	//#include <stdlib.h>する
	mbstowcs( w_user, user, struser.GetLength()+1 );
	LPCWSTR	UserName	=	(LPCWSTR)w_user;
	DWORD	Level		=	0;
	DWORD	Flags		=	0;
	LPBYTE	Buffptr;
	DWORD	Prefmaxlen	=	65535;
	DWORD	Entriesread;
	DWORD	Totalentries;

	if (NetUserGetLocalGroups(ServerName,UserName,Level,Flags,&Buffptr,Prefmaxlen,&Entriesread,&Totalentries)	==	NERR_Success){
		for(i=0;i<Entriesread;i++){
			GroupInfo	=(LPGROUP_INFO_0)Buffptr;
			Group_Name	=_T(GroupInfo[i].grpi0_name);
			if(Group_Name=="Administrators") adminflg=1;
		}
	}
	else{
			AfxMessageBox("グループ名を取得できませんでした。");
	}
	if(adminflg==1)
		AfxMessageBox(struser+" is Administrator");
	else
		AfxMessageBox(struser+" is not Administrator");
}


ここから下はアルクトゥルスさんに教えて頂きました。

@ユーザーのグローバルグループ名を取得する


	//----------------------------------------------
	//ユーザーのグローバルグループ名取得

	CString		Group_Name;	
	
	LPGROUP_INFO_0	GroupInfo;	//グループ情報の構造体

	DWORD	i;
	LPCWSTR	ServerName	=	NULL;
	LPCWSTR	UserName	=	(LPCWSTR)L"testuser";
	DWORD	Level		=	0;
	LPBYTE	Buffptr;
	DWORD	Prefmaxlen	=	65535;
	DWORD	Entriesread;
	DWORD	Totalentries;


	if (NetUserGetGroups(ServerName,UserName,Flags,&Buffptr,Prefmaxlen,&Entriesread,&Totalentries)	==	NERR_Success){
		for(i=0;i<Entriesread;i++){
			GroupInfo	=(LPGROUP_INFO_0)Buffptr;
			Group_Name	=_T(GroupInfo[i].grpi0_name);
			AfxMessageBox(Group_Name);
		}
	}
	else{
			AfxMessageBox("グループ名を取得できませんでした。");
	}


@サーバーのローカルグループ名の取得


	//----------------------------------------------
	//サーバーのグループ名取得

	CString		Group_Name;
	
	LPLOCALGROUP_INFO_1	GroupInfo;

	DWORD	i;
	LPCWSTR	ServerName	=	NULL;
	DWORD	Level		=	1;
	LPBYTE	Buffptr;
	DWORD	Prefmaxlen	=	65535;
	DWORD	Entriesread;
	DWORD	Totalentries;
	LPDWORD	Resumehandle	=	NULL;

	if (NetLocalGroupEnum(ServerName,Level,&Buffptr,Prefmaxlen,&Entriesread,&Totalentries,Resumehandle)	==	NERR_Success){
		for(i=0;i<Entriesread;i++){
			GroupInfo	=(LPLOCALGROUP_INFO_1)Buffptr;
			Group_Name	=_T(GroupInfo[i].lgrpi1_name);
			AfxMessageBox(Group_Name);
		}
	}
	else{
			AfxMessageBox("グループ名を取得できませんでした。");
	}
}


@ドメインのサーバー名の取得


	//----------------------------------------------
	//ドメインのサーバー名の取得

	CString		Server_Name;
	
	LPSERVER_INFO_101	ServerInfo;

	DWORD	i;
	LPCWSTR	ServerName	=	NULL;
	DWORD	Level		=	101;
	LPBYTE	Buffptr;
	DWORD	Prefmaxlen	=	65535;
	DWORD	Entriesread;
	DWORD	Totalentries;
	DWORD	Servertype	=	SV_TYPE_ALL;
	LPWSTR	Domain		=	NULL;
	LPDWORD	Handle		=	NULL;

	if (NetServerEnum(ServerName,Level,&Buffptr,Prefmaxlen,&Entriesread,&Totalentries,Servertype,Domain,Handle)	==	NERR_Success){
		for(i=0;i<Entriesread;i++){
			ServerInfo	=(LPSERVER_INFO_101)Buffptr;
			Server_Name	=_T(ServerInfo[i].sv101_name);
			AfxMessageBox(Server_Name);
		}
	}
	else{
			AfxMessageBox("サーバー名を取得できませんでした。");
	}
}


@サーバーのユーザー名の取得


	//----------------------------------------------
	//サーバーのユーザー名の取得

	CString		Group_Name;
	
	LPUSER_INFO_20	ServerInfo;

	DWORD	i;
	LPCWSTR	ServerName	=	NULL;
	DWORD	Level		=	20;
	DWORD	Filter	=	FILTER_NORMAL_ACCOUNT;
	LPBYTE	Buffptr;
	DWORD	Prefmaxlen	=	65535;
	DWORD	Entriesread;
	DWORD	Totalentries;
	LPDWORD	Resumehandle	=	NULL;

	if (NetUserEnum(ServerName,Level,&Buffptr,Prefmaxlen,&Entriesread,&Totalentries,Resumehandle)	==	NERR_Success){
		for(i=0;i<Entriesread;i++){
			UserInfo	=(LPUSER_INFO_20)Buffptr;
			User_Name	=_T(UserInfo[i].usri20_name);
			AfxMessageBox(Server_Name);
		}
	}
	else{
			AfxMessageBox("ユーザー名を取得できませんでした。");
	}
}


戻る