/////////////////////////////////////////// //ファイル共有追加 //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); |
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("ユーザー名を取得できませんでした。"); } } |