Fedora 17 を x121e に入れようとして、sda1 が GPT でない
とかでパーティションが切れない。
最近(というか昔からか)ハードウェアに疎く、UEFI とか GPT
とかさっぱりで…
で、どうしても gpt でやりたかったのだけど、デフォルトの
状態のディスクは msdos ラベルというやつらしく、これを
gpt にしなくちゃならんということだ。
anaconda の裏で parted で mklabel gpt して成功。
parted + gpt は以下が詳しかったのでメモっておく。
http://plaza.rakuten.co.jp/bluearth/diary/201001170000/
2012年12月28日金曜日
2012年12月14日金曜日
System.DirectoryServices.AccountManagement で AD から任意の属性取得
.Net 3.5 から AD の操作をするには System.DirectoryServices.AccountManagement を使う
のが推奨のようだが、UserPrincipal クラスで取得できる属性が限られている。
しかも sAMAccountName が SamAccountName というプロパティ名だったりして使いづらい。
いろいろ調べたら以下の URL に拡張の仕方が書いてあった。
プリンシパルの拡張
http://msdn.microsoft.com/ja-jp/library/bb384372%28v=vs.90%29.aspx
まず、以下のような UserPrincipal クラスのサブクラス(ここでは UserPrincipalExt)を作成。
getValueByAttributeName() つー独自のメソッドを実装し、FindByIdentity() を override してる。
[DirectoryObjectClass("user")]
class UserPrincipalExt : UserPrincipal
{
public UserPrincipalExt(PrincipalContext context)
:base(context){}
public object[] getValueByAttributeName(String attrName)
{
return ExtensionGet(attrName);
}
public static new UserPrincipalExt FindByIdentity(
PrincipalContext context,
IdentityType identityType,
string identityValue)
{
return (UserPrincipalExt)FindByIdentityWithType(
context,
typeof(UserPrincipalExt),
identityType,
identityValue);
}
}
んで、以下みたいに呼び出し。 以下はwWWHomePage を取得しているが
"sAMAccountName" 等の標準の属性も LDAP の名前のまま取得できる模様。
PrincipalContext ctxt = new PrincipalContext(
ContextType.Domain, "mydomain", "binduser", "bindpasswd");
UserPrincipalExt target = UserPrincipalExt.FindByIdentity(
ctxt, IdentityType.SamAccountName, "myusername");
object[] res = target.getValueByAttributeName("wWWHomePage");
のが推奨のようだが、UserPrincipal クラスで取得できる属性が限られている。
しかも sAMAccountName が SamAccountName というプロパティ名だったりして使いづらい。
いろいろ調べたら以下の URL に拡張の仕方が書いてあった。
プリンシパルの拡張
http://msdn.microsoft.com/ja-jp/library/bb384372%28v=vs.90%29.aspx
まず、以下のような UserPrincipal クラスのサブクラス(ここでは UserPrincipalExt)を作成。
getValueByAttributeName() つー独自のメソッドを実装し、FindByIdentity() を override してる。
[DirectoryObjectClass("user")]
class UserPrincipalExt : UserPrincipal
{
public UserPrincipalExt(PrincipalContext context)
:base(context){}
public object[] getValueByAttributeName(String attrName)
{
return ExtensionGet(attrName);
}
public static new UserPrincipalExt FindByIdentity(
PrincipalContext context,
IdentityType identityType,
string identityValue)
{
return (UserPrincipalExt)FindByIdentityWithType(
context,
typeof(UserPrincipalExt),
identityType,
identityValue);
}
}
んで、以下みたいに呼び出し。 以下はwWWHomePage を取得しているが
"sAMAccountName" 等の標準の属性も LDAP の名前のまま取得できる模様。
PrincipalContext ctxt = new PrincipalContext(
ContextType.Domain, "mydomain", "binduser", "bindpasswd");
UserPrincipalExt target = UserPrincipalExt.FindByIdentity(
ctxt, IdentityType.SamAccountName, "myusername");
object[] res = target.getValueByAttributeName("wWWHomePage");
2012年12月8日土曜日
GetPrivateProfileString() と BOM
VS2010でテキストファイルを新規作成するとデフォルト?で UTF-8 になるぽい。
まぁこれが困るなら自分で文字コードを指定すればいいんだけど、
うっかり何も考えず VS2010 で ini ファイルを作り、それを GetPrivateProfileString()
で読み込もうとしたら全然読めない。
どうも BOM が邪魔してるらしく、素直に US-ASCII に変更したら OK になった。
# Windows はデフォルトが UTF16 なのか UTF8 なのかはっきりして欲しいっす。
# あと UTF-8 で BOM つけるのも何とかしてほしい。
まぁこれが困るなら自分で文字コードを指定すればいいんだけど、
うっかり何も考えず VS2010 で ini ファイルを作り、それを GetPrivateProfileString()
で読み込もうとしたら全然読めない。
どうも BOM が邪魔してるらしく、素直に US-ASCII に変更したら OK になった。
# Windows はデフォルトが UTF16 なのか UTF8 なのかはっきりして欲しいっす。
# あと UTF-8 で BOM つけるのも何とかしてほしい。
2012年12月6日木曜日
EventLog の InstanceId とかイベントIDとか
Windows の EventLog でイベントIDをエラーコードのようにして
メッセージは別ファイルで管理とかしてみたく調べたら、まぁいろいろ
Web に情報はあり、mc.exe と rc.exe を使えば人間が書いた定義を
コンパイルしてくれることはわかった。
しかしながら、.Net の EventLog.WriteEvent() の引数である
EventInstance クラスに指定する instanceId と 所謂イベントID
と mc ファイルに書く MessageId は全部イコールかと思ったら違っ
てた。おそらくイベントID と MessageId は同じ。
じゃ instanceId はなんだろうと思うと、mc.exe でできたヘッダ
ファイルに親切なコメントがあった。 以下の通り。
結局 instanceId の下位 16bit がイベントIDということ。
以下の「R」は予約されていてよくわからんが常に 0 の模様。
「C」は customer bit というものらしいがようわからん。
MS が作ったもの以外はビット立てろということ?まぁ、mc.exe の -c
でこのビットを立てれられるらしいが…よくわからん。
// Values are 32 bit values laid out as follows:
//
// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
// +---+-+-+-----------------------+-------------------------------+
// |Sev|C|R| Facility | Code |
// +---+-+-+-----------------------+-------------------------------+
//
// where
//
// Sev - is the severity code
//
// 00 - Success
// 01 - Informational
// 10 - Warning
// 11 - Error
//
// C - is the Customer code flag
//
// R - is a reserved bit
//
// Facility - is the facility code
//
// Code - is the facility's status code
メッセージは別ファイルで管理とかしてみたく調べたら、まぁいろいろ
Web に情報はあり、mc.exe と rc.exe を使えば人間が書いた定義を
コンパイルしてくれることはわかった。
しかしながら、.Net の EventLog.WriteEvent() の引数である
EventInstance クラスに指定する instanceId と 所謂イベントID
と mc ファイルに書く MessageId は全部イコールかと思ったら違っ
てた。おそらくイベントID と MessageId は同じ。
じゃ instanceId はなんだろうと思うと、mc.exe でできたヘッダ
ファイルに親切なコメントがあった。 以下の通り。
結局 instanceId の下位 16bit がイベントIDということ。
以下の「R」は予約されていてよくわからんが常に 0 の模様。
「C」は customer bit というものらしいがようわからん。
MS が作ったもの以外はビット立てろということ?まぁ、mc.exe の -c
でこのビットを立てれられるらしいが…よくわからん。
// Values are 32 bit values laid out as follows:
//
// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
// +---+-+-+-----------------------+-------------------------------+
// |Sev|C|R| Facility | Code |
// +---+-+-+-----------------------+-------------------------------+
//
// where
//
// Sev - is the severity code
//
// 00 - Success
// 01 - Informational
// 10 - Warning
// 11 - Error
//
// C - is the Customer code flag
//
// R - is a reserved bit
//
// Facility - is the facility code
//
// Code - is the facility's status code
登録:
投稿 (Atom)