共有フォルダって、アクセス許可の指定が三種類しかないんです。で、実際どういう仕組みになっているのか、NetShareGetInfo() 関数 あたりで調べてみます ( SHARE_INFO_503 の shi503_security_descriptor あたり ) と、↓のようになってます。
Full Control : 0x1F01FF Change : 0x1301BF Read : 0x1200A9
何のコトやら、なので、二進数に置き換えてみます。
Full Control : 111110000000111111111 Change : 100110000000110111111 Read : 100100000000010101001
あとは、この辺とうまいこと組み合わせます。つまり、『フルコントロール』と『変更』の違いは、この辺のビットが立っているかどうか、という違いってことですね。
#define FILE_DELETE_CHILD (0x0040) // 000000000000001000000 #define WRITE_DAC (0x00040000L) // 001000000000000000000 #define WRITE_OWNER (0x00080000L) // 010000000000000000000
ちょっと RPC に関して勉強してます。なんのかんのいって、Windows でリモートでごにょごにょするときの基本ですし。SDK ( Windows SDK 7.1 ) に付属のサンプルでは、認証関連の例が含まれていなかったので、こんな感じで試してみました。
SEC_WINNT_AUTH_IDENTITY swai; swai.User = "< user name >"; swai.UserLength = strlen(swai.User); swai.Domain = "< domain or computer name >"; swai.DomainLength = strlen(swai.Domain); swai.Password = "< password >"; swai.PasswordLength = strlen(swai.Password); swai.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI; // Set the security provider on binding handle status = RpcBindingSetAuthInfoEx(hello_IfHandle, pszSpn, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, RPC_C_AUTHN_GSS_NEGOTIATE, &swai, RPC_C_AUTHZ_NONE, &SecQos);
SEC_WINNT_AUTH_IDENTITY 構造体に資格情報を突っ込んで、さくっと成功。失敗するときは、ERROR_ACCESS_DENIED が出ますね。サーバーが見つからないようなときは、RPC_S_SERVER_UNAVAILABLE と。
結構面倒くさがりなんで、新しいモノを試すのがおっくうです。普段使っている Web ブラウザは Internet Explorer ですし、ホームは iGoogle と。
で、いろいろ RSS フィードとかガジェットとか追加してあって、それなりに便利に使ってました。というところで、iGoogle 終了のお知らせ が...。
ちょこまか Chrome のアプリとか調べてみたんですが、iGoogle ライクに使えるものはないみたいでした。うーん。しばらくは使えるみたいですが、どうしましょうね。これ。